winlogon登录对话框中USER32!SLEditWndProc函数分析之WM_CHAR消息是如何来的–重要

winlogon登录对话框中USER32!SLEditWndProc函数分析之WM_CHAR消息是如何来的–重要

0: kd> g
Breakpoint 17 hit
eax=e1630530 ebx=00000000 ecx=00000101 edx=bc510000 esi=00040001 edi=e16fa0a8
eip=bf8ad0ba esp=f75d68c0 ebp=f75d693c iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
win32k!PostInputMessage:
bf8ad0ba 55              push    ebp
0: kd> dv
             pq = 0xe1630530
           pwnd = 0x00000000
        message = 0x101
         wParam = 0x33
         lParam = 0n262145
           time = 0xffec66bb
    dwExtraInfo = 0
0: kd> bd 43
0: kd> be 43
0: kd> bl
   
    38 d Enable Clear  77cdfedd  [d:srv03rtmwindowscore
tuserclientdlgmgr.c @ 1109]     0001 (0001) USER32!DialogBox2+0xe2
    39 d Enable Clear  77cc06d3  [d:srv03rtmwindowscore
tuserclientcltxt.h @ 764]     0001 (0001) USER32!SendMessageW
    40 d Enable Clear  771803ce  [d:srv03rtmshellcomctl32v5subclass.c @ 1343]     0001 (0001) Comctl32!MasterSubclassProc
    41 d Enable Clear  77cc2325  [d:srv03rtmwindowscore
tuserclienteditsl.c @ 2523]     0001 (0001) USER32!SLEditWndProc
    42 d Enable Clear  77f5e0a3  [d:srv03rtmase
tos
tlsertl.c @ 535]     0001 (0001) ntdll!RtlRunEncodeUnicodeString+0x79
    43 e Disable Clear  77cbe820  [d:srv03rtmwindowscore
tuserclient
tstubs.c @ 1207]     0001 (0001) USER32!TranslateMessage
    44 d Enable Clear  bf8108ee e 1 0001 (0001) win32k!NtUserTranslateMessage

0: kd> be 40
0: kd> be 40
0: kd> be 39
0: kd> dv
             pq = 0xe1630530
           pwnd = 0x00000000
        message = 0x101
         wParam = 0x33
         lParam = 0n262145
           time = 0xffec66bb
    dwExtraInfo = 0
0: kd> g
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserWaitMessage, retval = 1
456.460> Winlogon-Trace-Timeout: Enabling timeout after 120 seconds
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserKillTimer, retval = 1
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserSetTimer, retval = 7ebc
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubCallback] SfnHkINDWORD, retval = 0
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserPeekMessage, retval = 1
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserCallMsgFilter, retval = 0
Breakpoint 39 hit
eax=00000000 ebx=00000002 ecx=007d4124 edx=00000201 esi=0006f8f8 edi=00000087
eip=77cc06d3 esp=0006f8b0 ebp=0006f8dc iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
USER32!SendMessageW:
001b:77cc06d3 55              push    ebp
1: kd> dv
           hwnd = 0x000800ec
        message = 0x87
         wParam = 0x33
         lParam = 0n456952
1: kd> kc
 #
00 USER32!SendMessageW
01 USER32!IsDialogMessageW
02 USER32!DialogBox2
03 USER32!InternalDialogBox
04 USER32!DialogBoxIndirectParamAorW
05 USER32!DialogBoxParamW
06 USER32!DialogBoxParamW_wrapper
07 winlogon!Fusion_DialogBoxParam
08 winlogon!TimeoutDialogBoxParam
09 winlogon!WlxDialogBoxParam
0a MSGINA!WlxWkstaLockedSAS
0b winlogon!DoLockWksta
0c winlogon!DoScreenSaver
0d winlogon!LoggedonDlgProc
0e winlogon!RootDlgProc
0f USER32!InternalCallWinProc
10 USER32!UserCallDlgProcCheckWow
11 USER32!DefDlgProcWorker
12 USER32!DefDlgProcW
13 USER32!InternalCallWinProc
14 USER32!UserCallWinProcCheckWow
15 USER32!DispatchMessageWorker
16 USER32!DispatchMessageW
17 USER32!IsDialogMessageW
18 USER32!DialogBox2
19 USER32!InternalDialogBox
1a USER32!DialogBoxIndirectParamAorW
1b USER32!DialogBoxParamW
1c USER32!DialogBoxParamW_wrapper
1d winlogon!Fusion_DialogBoxParam
1e winlogon!TimeoutDialogBoxParam
1f winlogon!WlxDialogBoxParam
20 winlogon!BlockWaitForUserAction
21 winlogon!MainLoop
22 winlogon!WinMain
23 winlogon!WinMainCRTStartup

   case WM_KEYDOWN:
        code = (UINT)SendMessage(lpMsg->hwnd, WM_GETDLGCODE, lpMsg->wParam,
                (LPARAM)lpMsg);
        if (code & (DLGC_WANTALLKEYS | DLGC_WANTMESSAGE))
            break;

        switch (lpMsg->wParam) {
        case VK_TAB:

1: kd> g
Breakpoint 40 hit
eax=c0000000 ebx=00000000 ecx=40000000 edx=00000000 esi=771803ce edi=0006f824
eip=771803ce esp=0006f7b0 ebp=0006f7d8 iopl=0         ov up ei ng nz na pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000a87
Comctl32!MasterSubclassProc:
001b:771803ce 6a20            push    20h
1: kd> kc
 #
00 Comctl32!MasterSubclassProc
01 USER32!InternalCallWinProc
02 USER32!UserCallWinProcCheckWow
03 USER32!SendMessageWorker
04 USER32!SendMessageW
05 USER32!IsDialogMessageW
06 USER32!DialogBox2
07 USER32!InternalDialogBox
08 USER32!DialogBoxIndirectParamAorW
09 USER32!DialogBoxParamW
0a USER32!DialogBoxParamW_wrapper
0b winlogon!Fusion_DialogBoxParam
0c winlogon!TimeoutDialogBoxParam
0d winlogon!WlxDialogBoxParam
0e MSGINA!WlxWkstaLockedSAS
0f winlogon!DoLockWksta
10 winlogon!DoScreenSaver
11 winlogon!LoggedonDlgProc
12 winlogon!RootDlgProc
13 USER32!InternalCallWinProc
14 USER32!UserCallDlgProcCheckWow
15 USER32!DefDlgProcWorker
16 USER32!DefDlgProcW
17 USER32!InternalCallWinProc
18 USER32!UserCallWinProcCheckWow
19 USER32!DispatchMessageWorker
1a USER32!DispatchMessageW
1b USER32!IsDialogMessageW
1c USER32!DialogBox2
1d USER32!InternalDialogBox
1e USER32!DialogBoxIndirectParamAorW
1f USER32!DialogBoxParamW
20 USER32!DialogBoxParamW_wrapper
21 winlogon!Fusion_DialogBoxParam
22 winlogon!TimeoutDialogBoxParam
23 winlogon!WlxDialogBoxParam
24 winlogon!BlockWaitForUserAction
25 winlogon!MainLoop
26 winlogon!WinMain
27 winlogon!WinMainCRTStartup
1: kd> dv
           hWnd = 0x000800ec
           uMsg = 0x87
         wParam = 0x33
         lParam = 0n456952
          Frame = struct _SUBCLASS_FRAME
        pHeader = 0x007d3ef4
        lResult = 0n456740
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
1: kd> ?0n456952
Evaluate expression: 456952 = 0006f8f8

1: kd> g
Breakpoint 45 hit
eax=00000089 ebx=00000002 ecx=004c0c9c edx=000800ec esi=0006f8f8 edi=00000087
eip=77cdb37e esp=0006f8c4 ebp=0006f8dc iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
USER32!IsDialogMessageW+0x297:
001b:77cdb37e a804            test    al,4

    case WM_KEYDOWN:
        code = (UINT)SendMessage(lpMsg->hwnd, WM_GETDLGCODE, lpMsg->wParam,
                (LPARAM)lpMsg);
        if (code & (DLGC_WANTALLKEYS | DLGC_WANTMESSAGE))
            break;

code =eax=00000089

#define DLGC_HASSETSEL      0x0008
#define DLGC_WANTARROWS     0x0001
#define DLGC_WANTCHARS      0x0080

/* dialog codes */
#define DLGC_WANTARROWS     0x0001
#define DLGC_WANTTAB        0x0002
#define DLGC_WANTALLKEYS    0x0004
#define DLGC_WANTMESSAGE    0x0004
#define DLGC_HASSETSEL      0x0008
#define DLGC_DEFPUSHBUTTON  0x0010
#define DLGC_UNDEFPUSHBUTTON 0x0020
#define DLGC_RADIOBUTTON    0x0040
#define DLGC_WANTCHARS      0x0080
#define DLGC_STATIC         0x0100
#define DLGC_BUTTON         0x2000

    TranslateMessage(lpMsg);
    DispatchMessage(lpMsg);

    return TRUE;
}

1: kd> t
Breakpoint 43 hit
eax=00000089 ebx=00000002 ecx=00000008 edx=000800ec esi=0006f8f8 edi=00000087
eip=77cbe820 esp=0006f8bc ebp=0006f8dc iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
USER32!TranslateMessage:
001b:77cbe820 55              push    ebp
1: kd> kc
 #
00 USER32!TranslateMessage
01 USER32!IsDialogMessageW

02 USER32!DialogBox2
03 USER32!InternalDialogBox
04 USER32!DialogBoxIndirectParamAorW
05 USER32!DialogBoxParamW
06 USER32!DialogBoxParamW_wrapper
07 winlogon!Fusion_DialogBoxParam
08 winlogon!TimeoutDialogBoxParam
09 winlogon!WlxDialogBoxParam
0a MSGINA!WlxWkstaLockedSAS
0b winlogon!DoLockWksta
0c winlogon!DoScreenSaver
0d winlogon!LoggedonDlgProc
0e winlogon!RootDlgProc
0f USER32!InternalCallWinProc
10 USER32!UserCallDlgProcCheckWow
11 USER32!DefDlgProcWorker
12 USER32!DefDlgProcW
13 USER32!InternalCallWinProc
14 USER32!UserCallWinProcCheckWow
15 USER32!DispatchMessageWorker
16 USER32!DispatchMessageW
17 USER32!IsDialogMessageW
18 USER32!DialogBox2
19 USER32!InternalDialogBox
1a USER32!DialogBoxIndirectParamAorW
1b USER32!DialogBoxParamW
1c USER32!DialogBoxParamW_wrapper
1d winlogon!Fusion_DialogBoxParam
1e winlogon!TimeoutDialogBoxParam
1f winlogon!WlxDialogBoxParam
20 winlogon!BlockWaitForUserAction
21 winlogon!MainLoop
22 winlogon!WinMain
23 winlogon!WinMainCRTStartup
1: kd> dv
           pmsg = 0x0006f8f8 {msg=0x100 wp=0x33 lp=0x40001}

1: kd> dx -id 0,0,8960a020 -r1 ((win32k!tagQ *)0xe1630530)
((win32k!tagQ *)0xe1630530)                 : 0xe1630530 [Type: tagQ *]
    [+0x000] mlInput          [Type: tagMLIST]
 
1: kd> dx -id 0,0,8960a020 -r1 (*((win32k!tagMLIST *)0xe1630530))
(*((win32k!tagMLIST *)0xe1630530))                 [Type: tagMLIST]
    [+0x000] pqmsgRead        : 0xe31096b8 [Type: tagQMSG *]
    [+0x004] pqmsgWriteLast   : 0xe31096b8 [Type: tagQMSG *]
    [+0x008] cMsgs            : 0x1 [Type: unsigned long]
1: kd> dx -id 0,0,8960a020 -r1 ((win32k!tagQMSG *)0xe31096b8)
((win32k!tagQMSG *)0xe31096b8)                 : 0xe31096b8 [Type: tagQMSG *]
    [+0x000] pqmsgNext        : 0x0 [Type: tagQMSG *]
    [+0x004] pqmsgPrev        : 0x0 [Type: tagQMSG *]
    [+0x008] msg              : {msg=0x101 wp=0x33 lp=0x40001} [Type: tagMSG]
    [+0x024] ExtraInfo        : 0 [Type: long]
    [+0x028] dwQEvent         : 0x0 [Type: unsigned long]
    [+0x02c] pti              : 0xe1404c50 [Type: tagTHREADINFO *]

msg=0x100 wp=0x33 已经被取走。

1: kd> g
Breakpoint 44 hit
eax=89413020 ebx=bf8108ee ecx=00000000 edx=0006f89c esi=0006f8a4 edi=f75c6d58
eip=bf8108ee esp=f75c6d4c ebp=f75c6d64 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
win32k!NtUserTranslateMessage:
bf8108ee 6a28            push    28h
1: kd> kc
 #
00 win32k!NtUserTranslateMessage
01 nt!_KiSystemService
02 SharedUserData!SystemCallStub
03 USER32!NtUserTranslateMessage
04 USER32!TranslateMessage
05 USER32!IsDialogMessageW
06 USER32!DialogBox2
07 USER32!InternalDialogBox
08 USER32!DialogBoxIndirectParamAorW
09 USER32!DialogBoxParamW
0a USER32!DialogBoxParamW_wrapper
0b winlogon!Fusion_DialogBoxParam
0c winlogon!TimeoutDialogBoxParam
0d winlogon!WlxDialogBoxParam
0e MSGINA!WlxWkstaLockedSAS
0f winlogon!DoLockWksta
10 winlogon!DoScreenSaver
11 winlogon!LoggedonDlgProc
12 winlogon!RootDlgProc
13 USER32!InternalCallWinProc
14 USER32!UserCallDlgProcCheckWow
15 USER32!DefDlgProcWorker
16 USER32!DefDlgProcW
17 USER32!InternalCallWinProc
18 USER32!UserCallWinProcCheckWow
19 USER32!DispatchMessageWorker
1a USER32!DispatchMessageW
1b USER32!IsDialogMessageW
1c USER32!DialogBox2
1d USER32!InternalDialogBox
1e USER32!DialogBoxIndirectParamAorW
1f USER32!DialogBoxParamW
20 USER32!DialogBoxParamW_wrapper
21 winlogon!Fusion_DialogBoxParam
22 winlogon!TimeoutDialogBoxParam
23 winlogon!WlxDialogBoxParam
24 winlogon!BlockWaitForUserAction
25 winlogon!MainLoop
26 winlogon!WinMain
27 winlogon!WinMainCRTStartup
1: kd> bd 44
1: kd> dv
          lpMsg = 0x0006f8f8 {msg=0x100 wp=0x33 lp=0x40001}
          flags = 0
            msg = {msg=0x6f89c wp=0x0 lp=0x89413020}
        nLocks_ = 0n-144937640

   case WM_SYSKEYUP:
    case WM_KEYDOWN:
    case WM_KEYUP:
        pti = PtiCurrent();

        if ((pti->pMenuState != NULL) &&
                (HW(pti->pMenuState->pGlobalPopupMenu->spwndPopupMenu) ==
                pmsg->hwnd)) {
            uiTMFlags |= TM_INMENUMODE;
        } else {
            uiTMFlags &= ~TM_INMENUMODE;
        }

        /*
         * Don't change the contents of the passed in structure.
         */
        lParam = pmsg->lParam;

        /*
         * For backward compatibility, mask the virtual key value.
         */
        uVirKey = LOWORD(pmsg->wParam);

        cChar = xxxInternalToUnicode(uVirKey,   // virtual key code
                         HIWORD(lParam),  // scan code, make/break bit
                         pti->pq->afKeyState,
                         awch, sizeof(awch)/sizeof(awch[0]),
                         uiTMFlags, &dwKeyFlags, NULL);

        lParam |= (dwKeyFlags & ALTNUMPAD_BIT);

1: kd> p
eax=00000033 ebx=00040001 ecx=bc640008 edx=bc510000 esi=f75c6d10 edi=e1404c50
eip=bf8e366a esp=f75c6cc0 ebp=f75c6cf4 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
win32k!xxxTranslateMessage+0x7c:
bf8e366a 6a00            push    0
1: kd> p
eax=00000001 ebx=00040001 ecx=f75c6cd0 edx=00000033 esi=f75c6d10 edi=00000001
eip=bf8e368e esp=f75c6cc0 ebp=f75c6cf4 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
win32k!xxxTranslateMessage+0xa0:
bf8e368e 8b4508          mov     eax,dword ptr [ebp+8] ss:0010:f75c6cfc=00000000

1: kd> dv
           pmsg = 0x00000000
      uiTMFlags = 0
        fSysKey = 0n0
           awch = unsigned short [16]
           pwnd = 0x00000000
       wMsgType = 0
     dwKeyFlags = 0
1: kd> dx -id 0,0,8960a020 -r1 (*((win32k!unsigned short (*)[16])0xf75c6cd0))
(*((win32k!unsigned short (*)[16])0xf75c6cd0))                 [Type: unsigned short [16]]
    [0]              : 0x33 [Type: unsigned short]
    [1]              : 0x0 [Type: unsigned short]

1: kd> dx -id 0,0,8960a020 -r1 (*((win32k!unsigned char (*)[64])0xe163059c))
(*((win32k!unsigned char (*)[64])0xe163059c))                 [Type: unsigned char [64]]
    [0]              : 0x8 [Type: unsigned char]
    [1]              : 0x0 [Type: unsigned char]
    [2]              : 0x8 [Type: unsigned char]
    [3]              : 0x0 [Type: unsigned char]
    [4]              : 0x0 [Type: unsigned char]
    [5]              : 0x0 [Type: unsigned char]
    [6]              : 0x0 [Type: unsigned char]
    [7]              : 0x0 [Type: unsigned char]
    [8]              : 0x0 [Type: unsigned char]
    [9]              : 0x0 [Type: unsigned char]
    [10]             : 0x0 [Type: unsigned char]
    [11]             : 0x20 [Type: unsigned char]
    [12]             : 0x40 [Type: unsigned char]
    [13]             : 0x0 [Type: unsigned char]

0x33
0011  0011

1100 第12个,第3个是01 00 00 00

cChar = edi=00000001

1: kd> p
eax=00000000 ebx=00040001 ecx=f75c6cd0 edx=00000033 esi=f75c6d10 edi=00000001
eip=bf8e3698 esp=f75c6cc0 ebp=f75c6cf4 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
win32k!xxxTranslateMessage+0xaa:
bf8e3698 85ff            test    edi,edi

        if (cChar > 0)
            wMsgType = (fSysKey) ? (UINT)WM_SYSCHAR : (UINT)WM_CHAR;    关键代码:
        else {
            wMsgType = (fSysKey) ? (UINT)WM_SYSDEADCHAR : (UINT)WM_DEADCHAR;
            cChar = -cChar;                // want positive value
        }

1: kd> dv fSysKey
        fSysKey = 0n0

BOOL xxxTranslateMessage(
    LPMSG pmsg,
    UINT uiTMFlags)
{
    PTHREADINFO pti;
    UINT wMsgType;
    int cChar;
    BOOL fSysKey = FALSE;
    DWORD dwKeyFlags;
    LPARAM lParam;
    UINT uVirKey;
    PWND pwnd;
    WCHAR awch[16];
    WCHAR *pwch;

    switch (pmsg->message) {

    default:
        return FALSE;

    case WM_SYSKEYDOWN:
        /*
         * HACK carried over from Win3 code: system messages
         * only get posted during KEYDOWN processing – so
         * set fSysKey only for WM_SYSKEYDOWN.
         */
        fSysKey = TRUE;

        for (pwch = awch; cChar > 0; cChar–) {

            /*
             * If this is a multi-character posting, all but the last one
             * should be marked as fake keystrokes for Console/VDM.
             */
            _PostMessage(pwnd, wMsgType, (WPARAM)*pwch,
                    lParam | (cChar > 1 ? FAKE_KEYSTROKE : 0));

            *pwch = 0;        // zero out old character (why?)
            pwch += 1;
        }

1: kd> t
eax=00000033 ebx=00040001 ecx=bc640008 edx=bc510000 esi=f75c6cd0 edi=00000001
eip=bf80b2ef esp=f75c6cac ebp=f75c6cf4 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
win32k!_PostMessage:
bf80b2ef 55              push    ebp
1: kd> kc
 #
00 win32k!_PostMessage
01 win32k!xxxTranslateMessage
02 win32k!NtUserTranslateMessage
03 nt!_KiSystemService
04 SharedUserData!SystemCallStub
05 USER32!NtUserTranslateMessage
06 USER32!TranslateMessage
07 USER32!IsDialogMessageW
08 USER32!DialogBox2
09 USER32!InternalDialogBox
0a USER32!DialogBoxIndirectParamAorW
0b USER32!DialogBoxParamW
0c USER32!DialogBoxParamW_wrapper
0d winlogon!Fusion_DialogBoxParam
0e winlogon!TimeoutDialogBoxParam
0f winlogon!WlxDialogBoxParam
10 MSGINA!WlxWkstaLockedSAS
11 winlogon!DoLockWksta
12 winlogon!DoScreenSaver
13 winlogon!LoggedonDlgProc
14 winlogon!RootDlgProc
15 USER32!InternalCallWinProc
16 USER32!UserCallDlgProcCheckWow
17 USER32!DefDlgProcWorker
18 USER32!DefDlgProcW
19 USER32!InternalCallWinProc
1a USER32!UserCallWinProcCheckWow
1b USER32!DispatchMessageWorker
1c USER32!DispatchMessageW
1d USER32!IsDialogMessageW
1e USER32!DialogBox2
1f USER32!InternalDialogBox
20 USER32!DialogBoxIndirectParamAorW
21 USER32!DialogBoxParamW
22 USER32!DialogBoxParamW_wrapper
23 winlogon!Fusion_DialogBoxParam
24 winlogon!TimeoutDialogBoxParam
25 winlogon!WlxDialogBoxParam
26 winlogon!BlockWaitForUserAction
27 winlogon!MainLoop
28 winlogon!WinMain
29 winlogon!WinMainCRTStartup
1: kd> dv
           pwnd = 0xbc6449ac
        message = 0x102
         wParam = 0x33

         lParam = 0n262145
         tlpwnd = struct _TL
           fRet = 0n8
    fPwndUnlock = 0n-1134278228
1: kd> dx -id 0,0,8960a020 -r1 ((win32k!tagWND *)0xbc6449ac)
((win32k!tagWND *)0xbc6449ac)                 : 0xbc6449ac [Type: tagWND *]
    [+0x000] head             [Type: _THRDESKHEAD]
    [+0x014] state            : 0x20000 [Type: unsigned long]
    [+0x018] state2           : 0x80000310 [Type: unsigned long]
    [+0x01c] ExStyle          : 0xa04 [Type: unsigned long]
    [+0x020] style            : 0x500100a0 [Type: unsigned long]
    [+0x024] hModule          : 0x75080000 [Type: void *]
    [+0x028] hMod16           : 0x0 [Type: unsigned short]
    [+0x02a] fnid             : 0x2a5 [Type: unsigned short]
    [+0x02c] spwndNext        : 0xbc644ab4 [Type: tagWND *]
    [+0x030] spwndPrev        : 0xbc644834 [Type: tagWND *]
    [+0x034] spwndParent      : 0xbc644124 [Type: tagWND *]
    [+0x038] spwndChild       : 0x0 [Type: tagWND *]
    [+0x03c] spwndOwner       : 0x0 [Type: tagWND *]
    [+0x040] rcWindow         : {LT(443, 361) RB(632, 381)  [189 x 20]} [Type: tagRECT]
    [+0x050] rcClient         : {LT(445, 363) RB(630, 379)  [185 x 16]} [Type: tagRECT]
    [+0x060] lpfnWndProc      : 0x771803ce [Type: long (*)(tagWND *,unsigned int,unsigned int,long)]
    [+0x064] pcls             : 0xbc64253c [Type: tagCLS *]
    [+0x068] hrgnUpdate       : 0x0 [Type: HRGN__ *]
    [+0x06c] ppropList        : 0xbc6456bc [Type: tagPROPLIST *]
    [+0x070] pSBInfo          : 0x0 [Type: tagSBINFO *]
    [+0x074] spmenuSys        : 0x0 [Type: tagMENU *]
    [+0x078] spmenu           : 0x7a2 [Type: tagMENU *]
    [+0x07c] hrgnClip         : 0x0 [Type: HRGN__ *]
    [+0x080] strName          [Type: _LARGE_UNICODE_STRING]
    [+0x08c] cbwndExtra       : 6 [Type: int]
    [+0x090] spwndLastActive  : 0x0 [Type: tagWND *]
    [+0x094] hImc             : 0x0 [Type: HIMC__ *]
    [+0x098] dwUserData       : 0x0 [Type: unsigned long]
    [+0x09c] pActCtx          : 0x0 [Type: _ACTIVATION_CONTEXT *]
1: kd> u 771803ce
Comctl32!MasterSubclassProc
[d:srv03rtmshellcomctl32v5subclass.c @ 1343]:
771803ce 6a20            push    20h
771803d0 6818841477      push    offset Comctl32!`string'+0x60 (77148418)
771803d5 e8ca300400      call    Comctl32!__SEH_prolog (771c34a4)
771803da 33ff            xor     edi,edi
771803dc 897de4          mov     dword ptr [ebp-1Ch],edi
771803df ff7508          push    dword ptr [ebp+8]
771803e2 e8f5ebffff      call    Comctl32!IsWindowOnCurrentThread (7717efdc)
771803e7 85c0            test    eax,eax

1: kd> g
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserTranslateMessage, retval = 1

Breakpoint 40 hit
eax=c0000000 ebx=00000000 ecx=40000000 edx=00000000 esi=771803ce edi=0006f814
eip=771803ce esp=0006f7a0 ebp=0006f7c8 iopl=0         ov up ei ng nz na pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000a87
Comctl32!MasterSubclassProc:
001b:771803ce 6a20            push    20h

1: kd> kc
 #
00 Comctl32!MasterSubclassProc
01 USER32!InternalCallWinProc
02 USER32!UserCallWinProcCheckWow
03 USER32!DispatchMessageWorker
04 USER32!DispatchMessageW
05 USER32!IsDialogMessageW
06 USER32!DialogBox2
07 USER32!InternalDialogBox
08 USER32!DialogBoxIndirectParamAorW
09 USER32!DialogBoxParamW
0a USER32!DialogBoxParamW_wrapper
0b winlogon!Fusion_DialogBoxParam
0c winlogon!TimeoutDialogBoxParam
0d winlogon!WlxDialogBoxParam
0e MSGINA!WlxWkstaLockedSAS
0f winlogon!DoLockWksta
10 winlogon!DoScreenSaver
11 winlogon!LoggedonDlgProc
12 winlogon!RootDlgProc
13 USER32!InternalCallWinProc
14 USER32!UserCallDlgProcCheckWow
15 USER32!DefDlgProcWorker
16 USER32!DefDlgProcW
17 USER32!InternalCallWinProc
18 USER32!UserCallWinProcCheckWow
19 USER32!DispatchMessageWorker
1a USER32!DispatchMessageW
1b USER32!IsDialogMessageW
1c USER32!DialogBox2
1d USER32!InternalDialogBox
1e USER32!DialogBoxIndirectParamAorW
1f USER32!DialogBoxParamW
20 USER32!DialogBoxParamW_wrapper
21 winlogon!Fusion_DialogBoxParam
22 winlogon!TimeoutDialogBoxParam
23 winlogon!WlxDialogBoxParam
24 winlogon!BlockWaitForUserAction
25 winlogon!MainLoop
26 winlogon!WinMain
27 winlogon!WinMainCRTStartup

1: kd> dv
           hWnd = 0x000800ec
           uMsg = 0x100
         wParam = 0x33

         lParam = 0n262145
          Frame = struct _SUBCLASS_FRAME
        pHeader = 0x00000002
        lResult = 0n456724
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0

1: kd> g
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserPeekMessage, retval = 1
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserCallMsgFilter, retval = 0
Breakpoint 39 hit
eax=00000000 ebx=00000002 ecx=007d4124 edx=00000201 esi=0006f8f8 edi=007d4124
eip=77cc06d3 esp=0006f8b0 ebp=0006f8dc iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
USER32!SendMessageW:
001b:77cc06d3 55              push    ebp
1: kd> kc
 #
00 USER32!SendMessageW
01 USER32!IsDialogMessageW
02 USER32!DialogBox2
03 USER32!InternalDialogBox
04 USER32!DialogBoxIndirectParamAorW
05 USER32!DialogBoxParamW
06 USER32!DialogBoxParamW_wrapper
07 winlogon!Fusion_DialogBoxParam
08 winlogon!TimeoutDialogBoxParam
09 winlogon!WlxDialogBoxParam
0a MSGINA!WlxWkstaLockedSAS
0b winlogon!DoLockWksta
0c winlogon!DoScreenSaver
0d winlogon!LoggedonDlgProc
0e winlogon!RootDlgProc
0f USER32!InternalCallWinProc
10 USER32!UserCallDlgProcCheckWow
11 USER32!DefDlgProcWorker
12 USER32!DefDlgProcW
13 USER32!InternalCallWinProc
14 USER32!UserCallWinProcCheckWow
15 USER32!DispatchMessageWorker
16 USER32!DispatchMessageW
17 USER32!IsDialogMessageW
18 USER32!DialogBox2
19 USER32!InternalDialogBox
1a USER32!DialogBoxIndirectParamAorW
1b USER32!DialogBoxParamW
1c USER32!DialogBoxParamW_wrapper
1d winlogon!Fusion_DialogBoxParam
1e winlogon!TimeoutDialogBoxParam
1f winlogon!WlxDialogBoxParam
20 winlogon!BlockWaitForUserAction
21 winlogon!MainLoop
22 winlogon!WinMain
23 winlogon!WinMainCRTStartup
1: kd> dv
           hwnd = 0x000800ec
        message = 0x87
         wParam = 0x33
         lParam = 0n456952
1: kd> ?0n456952
Evaluate expression: 456952 = 0006f8f8
1: kd> dt msg 6f8f8
winlogon!MSG
   +0x000 hwnd             : 0x000800ec HWND__
   +0x004 message          : 0x102
   +0x008 wParam           : 0x33
   +0x00c lParam           : 0n262145
   +0x010 time             : 0xffec6a54
   +0x014 pt               : tagPOINT

1: kd> g
Breakpoint 40 hit
eax=c0000000 ebx=00000000 ecx=40000000 edx=00000000 esi=771803ce edi=0006f824
eip=771803ce esp=0006f7b0 ebp=0006f7d8 iopl=0         ov up ei ng nz na pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000a87
Comctl32!MasterSubclassProc:
001b:771803ce 6a20            push    20h
1: kd> kc
 #
00 Comctl32!MasterSubclassProc
01 USER32!InternalCallWinProc
02 USER32!UserCallWinProcCheckWow
03 USER32!SendMessageWorker
04 USER32!SendMessageW
05 USER32!IsDialogMessageW
06 USER32!DialogBox2
07 USER32!InternalDialogBox
08 USER32!DialogBoxIndirectParamAorW
09 USER32!DialogBoxParamW
0a USER32!DialogBoxParamW_wrapper
0b winlogon!Fusion_DialogBoxParam
0c winlogon!TimeoutDialogBoxParam
0d winlogon!WlxDialogBoxParam
0e MSGINA!WlxWkstaLockedSAS
0f winlogon!DoLockWksta
10 winlogon!DoScreenSaver
11 winlogon!LoggedonDlgProc
12 winlogon!RootDlgProc
13 USER32!InternalCallWinProc
14 USER32!UserCallDlgProcCheckWow
15 USER32!DefDlgProcWorker
16 USER32!DefDlgProcW
17 USER32!InternalCallWinProc
18 USER32!UserCallWinProcCheckWow
19 USER32!DispatchMessageWorker
1a USER32!DispatchMessageW
1b USER32!IsDialogMessageW
1c USER32!DialogBox2
1d USER32!InternalDialogBox
1e USER32!DialogBoxIndirectParamAorW
1f USER32!DialogBoxParamW
20 USER32!DialogBoxParamW_wrapper
21 winlogon!Fusion_DialogBoxParam
22 winlogon!TimeoutDialogBoxParam
23 winlogon!WlxDialogBoxParam
24 winlogon!BlockWaitForUserAction
25 winlogon!MainLoop
26 winlogon!WinMain
27 winlogon!WinMainCRTStartup
1: kd> dv
           hWnd = 0x000800ec
           uMsg = 0x87
         wParam = 0x33
         lParam = 0n456952

1: kd> g
Breakpoint 43 hit
eax=00000089 ebx=00000089 ecx=004c0c9c edx=000800ec esi=0006f8f8 edi=007d4124
eip=77cbe820 esp=0006f8bc ebp=0006f8dc iopl=0         nv up ei ng nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000282
USER32!TranslateMessage:
001b:77cbe820 55              push    ebp
1: kd> kc
 #
00 USER32!TranslateMessage
01 USER32!IsDialogMessageW
02 USER32!DialogBox2
03 USER32!InternalDialogBox
04 USER32!DialogBoxIndirectParamAorW
05 USER32!DialogBoxParamW
06 USER32!DialogBoxParamW_wrapper
07 winlogon!Fusion_DialogBoxParam
08 winlogon!TimeoutDialogBoxParam
09 winlogon!WlxDialogBoxParam
0a MSGINA!WlxWkstaLockedSAS
0b winlogon!DoLockWksta
0c winlogon!DoScreenSaver
0d winlogon!LoggedonDlgProc
0e winlogon!RootDlgProc
0f USER32!InternalCallWinProc
10 USER32!UserCallDlgProcCheckWow
11 USER32!DefDlgProcWorker
12 USER32!DefDlgProcW
13 USER32!InternalCallWinProc
14 USER32!UserCallWinProcCheckWow
15 USER32!DispatchMessageWorker
16 USER32!DispatchMessageW
17 USER32!IsDialogMessageW
18 USER32!DialogBox2
19 USER32!InternalDialogBox
1a USER32!DialogBoxIndirectParamAorW
1b USER32!DialogBoxParamW
1c USER32!DialogBoxParamW_wrapper
1d winlogon!Fusion_DialogBoxParam
1e winlogon!TimeoutDialogBoxParam
1f winlogon!WlxDialogBoxParam
20 winlogon!BlockWaitForUserAction
21 winlogon!MainLoop
22 winlogon!WinMain
23 winlogon!WinMainCRTStartup
1: kd> dv
           pmsg = 0x0006f8f8 {msg=0x102 wp=0x33 lp=0x40001}

1: kd> g
Breakpoint 40 hit
eax=c0000000 ebx=00000000 ecx=40000000 edx=00000000 esi=771803ce edi=0006f814
eip=771803ce esp=0006f7a0 ebp=0006f7c8 iopl=0         ov up ei ng nz na pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000a87
Comctl32!MasterSubclassProc:
001b:771803ce 6a20            push    20h
1: kd> kc
 #
00 Comctl32!MasterSubclassProc
01 USER32!InternalCallWinProc
02 USER32!UserCallWinProcCheckWow
03 USER32!DispatchMessageWorker
04 USER32!DispatchMessageW
05 USER32!IsDialogMessageW
06 USER32!DialogBox2
07 USER32!InternalDialogBox
08 USER32!DialogBoxIndirectParamAorW
09 USER32!DialogBoxParamW
0a USER32!DialogBoxParamW_wrapper
0b winlogon!Fusion_DialogBoxParam
0c winlogon!TimeoutDialogBoxParam
0d winlogon!WlxDialogBoxParam
0e MSGINA!WlxWkstaLockedSAS
0f winlogon!DoLockWksta
10 winlogon!DoScreenSaver
11 winlogon!LoggedonDlgProc
12 winlogon!RootDlgProc
13 USER32!InternalCallWinProc
14 USER32!UserCallDlgProcCheckWow
15 USER32!DefDlgProcWorker
16 USER32!DefDlgProcW
17 USER32!InternalCallWinProc
18 USER32!UserCallWinProcCheckWow
19 USER32!DispatchMessageWorker
1a USER32!DispatchMessageW
1b USER32!IsDialogMessageW
1c USER32!DialogBox2
1d USER32!InternalDialogBox
1e USER32!DialogBoxIndirectParamAorW
1f USER32!DialogBoxParamW
20 USER32!DialogBoxParamW_wrapper
21 winlogon!Fusion_DialogBoxParam
22 winlogon!TimeoutDialogBoxParam
23 winlogon!WlxDialogBoxParam
24 winlogon!BlockWaitForUserAction
25 winlogon!MainLoop
26 winlogon!WinMain
27 winlogon!WinMainCRTStartup
1: kd> dv
           hWnd = 0x000800ec
           uMsg = 0x102
         wParam = 0x33
         lParam = 0n262145
          Frame = struct _SUBCLASS_FRAME
        pHeader = 0x00000002
        lResult = 0n456724
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
         szFile = unsigned short [41]
  gAlwaysAssert = 0n0
1: kd> ?0n262145
Evaluate expression: 262145 = 00040001

1: kd> gu
eax=00000000 ebx=00000000 ecx=004c0c9c edx=00000002 esi=01233e04 edi=00000001
eip=77cce6e9 esp=0006f3cc ebp=0006f3e4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
USER32!SLChar+0x21a:
001b:77cce6e9 53              push    ebx
1: kd> dv
            ped = 0x00000001
       keyValue = 0x33
       hwndSave = 0x000800ec
        DBCSkey = 0n1
       keyPress = 0x33
     updateText = 0n1
  InsertTextLen = 0n1

1: kd> kc
 #
00 USER32!SLChar
01 USER32!SLEditWndProc
02 USER32!EditWndProc
03 USER32!EditWndProcWorker
04 USER32!EditWndProcW
05 USER32!InternalCallWinProc
06 USER32!UserCallWinProcCheckWow
07 USER32!CallWindowProcAorW
08 USER32!CallWindowProcW
09 USER32!CallWindowProcW_wrapper
0a Comctl32!CallOriginalWndProc
0b Comctl32!CallNextSubclassProc
0c Comctl32!DefSubclassProc
0d MSGINA!DisableEditSubClassProc
0e Comctl32!CallNextSubclassProc
0f Comctl32!MasterSubclassProc
10 USER32!InternalCallWinProc
11 USER32!UserCallWinProcCheckWow
12 USER32!DispatchMessageWorker
13 USER32!DispatchMessageW
14 USER32!IsDialogMessageW
15 USER32!DialogBox2
16 USER32!InternalDialogBox
17 USER32!DialogBoxIndirectParamAorW
18 USER32!DialogBoxParamW
19 USER32!DialogBoxParamW_wrapper
1a winlogon!Fusion_DialogBoxParam
1b winlogon!TimeoutDialogBoxParam
1c winlogon!WlxDialogBoxParam
1d MSGINA!WlxWkstaLockedSAS
1e winlogon!DoLockWksta
1f winlogon!DoScreenSaver
20 winlogon!LoggedonDlgProc
21 winlogon!RootDlgProc
22 USER32!InternalCallWinProc
23 USER32!UserCallDlgProcCheckWow
24 USER32!DefDlgProcWorker
25 USER32!DefDlgProcW
26 USER32!InternalCallWinProc
27 USER32!UserCallWinProcCheckWow
28 USER32!DispatchMessageWorker
29 USER32!DispatchMessageW
2a USER32!IsDialogMessageW
2b USER32!DialogBox2
2c USER32!InternalDialogBox
2d USER32!DialogBoxIndirectParamAorW
2e USER32!DialogBoxParamW
2f USER32!DialogBoxParamW_wrapper
30 winlogon!Fusion_DialogBoxParam
31 winlogon!TimeoutDialogBoxParam
32 winlogon!WlxDialogBoxParam
33 winlogon!BlockWaitForUserAction
34 winlogon!MainLoop
35 winlogon!WinMain
36 winlogon!WinMainCRTStartup

1: kd> g
456.460> Winlogon-Trace-Timeout: Enabling timeout after 120 seconds
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserKillTimer, retval = 1
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserSetTimer, retval = 7ebb
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubCallback] SfnHkINDWORD, retval = 0
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserPeekMessage, retval = 1
(s: 0 0x1c8.1cc winlogon.exe) USRK-[StubReturn] NtUserCallMsgFilter, retval = 0
Breakpoint 43 hit
eax=ffffff00 ebx=00000002 ecx=007d4124 edx=00000201 esi=0006f8f8 edi=007d4124
eip=77cbe820 esp=0006f8bc ebp=0006f8dc iopl=0         nv up ei ng nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000286
USER32!TranslateMessage:
001b:77cbe820 55              push    ebp
1: kd> dv
           pmsg = 0x0006f8f8 {msg=0x101 wp=0x33 lp=0xc0040001}

1: kd> p
eax=affbe38a ebx=bf8108ee ecx=bc640008 edx=bc510000 esi=0006f914 edi=f75c6d2c
eip=bf8e35f9 esp=f75c6ccc ebp=f75c6cf4 iopl=0         nv up ei ng nz ac pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000296
win32k!xxxTranslateMessage+0xb:
bf8e35f9 8365d800        and     dword ptr [ebp-28h],0 ss:0010:f75c6ccc=f75c6d38
1: kd> dv
           pmsg = 0xf75c6d10 {msg=0x101 wp=0x33 lp=0xc0040001}
      uiTMFlags = 0
        fSysKey = 0n-144937672

        cChar = xxxInternalToUnicode(uVirKey,   // virtual key code
                         HIWORD(lParam),  // scan code, make/break bit
                         pti->pq->afKeyState,
                         awch, sizeof(awch)/sizeof(awch[0]),
                         uiTMFlags, &dwKeyFlags, NULL);

1: kd> dv
           pmsg = 0xf75c6d10 {msg=0x101 wp=0x33 lp=0xc0040001}
      uiTMFlags = 0
        fSysKey = 0n0
           awch = unsigned short [16]
           pwnd = 0x00000000
       wMsgType = 0
     dwKeyFlags = 0xf75c6d10
1: kd> dx -id 0,0,8960a020 -r1 (*((win32k!unsigned short (*)[16])0xf75c6cd0))
(*((win32k!unsigned short (*)[16])0xf75c6cd0))                 [Type: unsigned short [16]]
    [0]              : 0x30 [Type: unsigned short]
    [1]              : 0x0 [Type: unsigned short]
    [2]              : 0x6d2c [Type: unsigned short]
    [3]              : 0xf75c [Type: unsigned short]
    [4]              : 0xf914 [Type: unsigned short]
    [5]              : 0x6 [Type: unsigned short]
    [6]              : 0x8ee [Type: unsigned short]
    [7]              : 0xbf81 [Type: unsigned short]
    [8]              : 0x6cf4 [Type: unsigned short]
    [9]              : 0xf75c [Type: unsigned short]
    [10]             : 0x0 [Type: unsigned short]
    [11]             : 0x0 [Type: unsigned short]
    [12]             : 0x35f1 [Type: unsigned short]
    [13]             : 0xbf8e [Type: unsigned short]
    [14]             : 0x8 [Type: unsigned short]
    [15]             : 0x0 [Type: unsigned short]
1: kd> p
eax=00000033 ebx=c0040001 ecx=bc640008 edx=bc510000 esi=f75c6d10 edi=e1404c50
eip=bf8e366a esp=f75c6cc0 ebp=f75c6cf4 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
win32k!xxxTranslateMessage+0x7c:
bf8e366a 6a00            push    0
1: kd> p
eax=00000000 ebx=c0040001 ecx=e13e6bb8 edx=f75c6cfc esi=f75c6d10 edi=00000000
eip=bf8e368e esp=f75c6cc0 ebp=f75c6cf4 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
win32k!xxxTranslateMessage+0xa0:
bf8e368e 8b4508          mov     eax,dword ptr [ebp+8] ss:0010:f75c6cfc=00008000

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容