!logon command?

I saw an analysis from someone at Microsoft which used the “!logon” extension, specifically “!logon -a”. Does anyone know where that extension comes from? It’s not part of MEX, and a Google search didn’t turn up anything (though you cannot search with the “!”, so it may be hidden somewhere). (I hope I’m not just being stupid.)

I don’t see it listed in any of the extension DLL exports (only !logonsession). What does the output look like?

Thanks for your interest. I should have posted this the first time around; silly me. The “Stuck Winlogon … Performing wait chain analysis” is the key bit that I’m after since it’s surely the signature of the issue that I’m chasing. Perhaps there’s some other way to do a similar thing?

kd> !logon -a
Winlogons found: 2

Stuck Winlogon a22ad8a8 in session 2. Performing wait chain analysis...
# Process                      Thread   State   Time            Reason         Function                                                    Target
= ============================ ======== ======= =============== ============== =========================================================== ========
1 winlogon.exe                 84f7f4b0 Waiting      29m:38.312 WrLpcReply     WINSTA!RpcConnectTerminal                                   a67ad228
2 lsm.exe                      a67ad228 Waiting      29m:37.531 WrLpcReply     ole32!ThreadSendReceive                                     aaad8030
3 svchost.exe (NetworkService) aaad8030 Waiting      29m:37.531 WrLpcReply     ADVAPI32!ROpenSCManagerW                                    840b28e8
4 services.exe                 840b28e8 Waiting      29m:37.515 UserRequest    services!CServiceRecordSharedLock::CServiceRecordSharedLock b16f6d10
5 services.exe                 b16f6d10 Waiting 2d.16:25:51.531 Executive      nt!IopUnloadDriver                                          8358fad0
6 System                       8358fad0 Waiting              0s DelayExecution nt!CmUnRegisterCallback         

Last thread in wait chain:

Process           Thread   CID       UserTime KernelTime ContextSwitches Wait Reason    Time State
System (83589558) 8358fad0 4.4c            0s  2m:48.359       238217533 DelayExecution   0s Waiting

# Child-SP Return   Call Site                           
0 8713fb5c 81e871d9 nt!KiSwapContext+0x26               
1 8713fb70 81e7e884 nt!KiSwapThread+0x44f               
2 8713fbb4 81f90d32 nt!KeDelayExecutionThread+0x472     
3 8713fc10 8d8fe091 nt!CmUnRegisterCallback+0x182       
4 8713fc84 8d8044da BHDrvx86+0xfd091 >>>>>>>>>>>>
5 8713fcb8 8d80226a BHDrvx86+0x34da 
6 8713fcd4 8d8021ed BHDrvx86+0x126a 
7 8713fcf0 8d8028ef BHDrvx86+0x11ed 
8 8713fcfc 81fda502 BHDrvx86+0x18ef 
9 8713fd0c 81f0fcaf nt!IopLoadUnloadDriver+0x1e         
a 8713fd4c 8207c642 nt!ExpWorkerThread+0xfd             
b 8713fd84 81f2a9e2 nt!PspSystemThreadStartup+0x114     
c 8713fdc8 00000000 nt!KiThreadStartup+0x16

Definitely don’t see that command anywhere. That wait chain analysis is pretty cool though, I wonder if it relies on private PDBs.

I think you should be able to do most of this manually with !process and !thread though. Are you having a problem with winlogon hanging?

i dont think private pdbs are needed this is probably based on wct apis GetThreadWaitChain() implementation there is a sample code that uses this api in ms docs i also remember sasha ( goldshtn ) had written one wct extension

Thanks for the suggestion. I tried the WCT WinDbg extension, but unfortunately, it seems to only work for live debugging, not a memory dump.