Как я могу определить, какие события ожидаются с WinDBG в сеансе отладки ядра - PullRequest
3 голосов
/ 15 июня 2010

Я полный новичок в WinDbg, и я пытался отладить проблему WindowsXP, которую заказчик отправил мне, когда наше программное обеспечение и некоторые сторонние программы предотвращают выход из системы.Я воспроизвел проблему и убедился, что только когда наше программное обеспечение и программное обеспечение клиента установлены (хотя не обязательно работают при выходе из системы), возникает проблема выхода из системы.Я заметил, что сообщения WM_ENDSESSION не доходят до запущенных окон, когда пользователь пытается выйти из системы, и я знаю, что стороннее программное обеспечение использует драйвер ядра.

Я смотрел на процессы в WinDbg иЯ знаю, что csrss.exe обычно отправляет всем окнам сообщение WM_ENDSESSION.Когда я запустил:

! Process 82356020 6

Чтобы посмотреть на стек csrss.exe, я вижу:

WARNING: Frame IP not in any known module. Following frames may be wrong.
        00000000 00000000 00000000 00000000 00000000 0x7c90e514

        THREAD 8246d998  Cid 0248.02a0  Teb: 7ffd7000 Win32Thread: e1627008 WAIT: (WrUserRequest) UserMode Non-Alertable
            8243d9f0  SynchronizationEvent
            81fe0390  SynchronizationEvent
        Not impersonating
        DeviceMap                 e1004450
        Owning Process            82356020       Image:         csrss.exe
        Attached Process          N/A            Image:         N/A
        Wait Start TickCount      1813           Ticks: 20748 (0:00:05:24.187)
        Context Switch Count      3                 LargeStack
        UserTime                  00:00:00.000
        KernelTime                00:00:00.000
        Start Address 0x75b67cdf
        Stack Init f80bd000 Current f80bc9c8 Base f80bd000 Limit f80ba000 Call 0
        Priority 14 BasePriority 13 PriorityDecrement 0 DecrementCount 0
        Kernel stack not resident.
        ChildEBP RetAddr  Args to Child              
        f80bc9e0 80500ce6 00000000 8246d998 804f9af2 nt!KiSwapContext+0x2e (FPO: [Uses EBP] [0,0,4])
        f80bc9ec 804f9af2 804f986e e1627008 00000000 nt!KiSwapThread+0x46 (FPO: [0,0,0])
        f80bca24 bf80a4a3 00000002 82475218 00000001 nt!KeWaitForMultipleObjects+0x284 (FPO: [Non-Fpo])
        f80bca5c bf88c0a6 00000001 82475218 00000000 win32k!xxxMsgWaitForMultipleObjects+0xb0 (FPO: [Non-Fpo])
        f80bcd30 bf87507d bf9ac0a0 00000001 f80bcd54 win32k!xxxDesktopThread+0x339 (FPO: [Non-Fpo])
        f80bcd40 bf8010fd bf9ac0a0 f80bcd64 00bcfff4 win32k!xxxCreateSystemThreads+0x6a (FPO: [Non-Fpo])
        f80bcd54 8053d648 00000000 00000022 00000000 win32k!NtUserCallOneParam+0x23 (FPO: [Non-Fpo])
        f80bcd54 7c90e514 00000000 00000022 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f80bcd64)

Этот waitForMultipleObjects выглядит интересно, потому что мне интересно,csrss.exe ожидает некоторого события, которое не приходит, чтобы разрешить выход из системы.Может кто-нибудь сказать мне, как я могу узнать, какое событие ожидает чего-либо еще, что я мог бы сделать для дальнейшего исследования проблемы?

Ответы [ 2 ]

6 голосов
/ 15 июня 2010

Ожидаемые объекты находятся прямо в выводе:

    THREAD 8246d998  Cid 0248.02a0  Teb: 7ffd7000 Win32Thread: e1627008 WAIT: (WrUserRequest) UserMode Non-Alertable  
        8243d9f0  SynchronizationEvent  
        81fe0390  SynchronizationEvent  

Я отмечу, что поток, на который вы смотрите, является общим потоком, почти для каждой системы, на которую вы смотритебудет (не уверен, для чего конкретно предназначен этот поток, но я узнаю стек ... Иногда мне кажется, что я делал это слишком долго!).

Я также отмечу, что вы можетене доверяйте параметрам в стеке все время.Подробности см. Здесь: http://analyze -v.com /? P = 7

-scott

2 голосов
/ 15 июня 2010

Чтобы начать, попробуйте !object 82475218, чтобы увидеть, говорит ли это, что это за объект.

Если это не поможет, попробуйте это:

http://blogs.msdn.com/search/SearchResults.aspx?q=KeWaitForMultipleObjects

Это поиск по KeWaitForMultipleObjects в блоге отладки NT, который является отличным блогом для изучения внутренних компонентов Windows.

EDIT:

Вот документация для KeWaitForMultipleObjects:

http://msdn.microsoft.com/en-us/library/ff553324.aspx Приветствия. Иак.

...