PFNCLIENT apfnClient;

Тема в разделе "WASM.WIN32", создана пользователем xrc2, 11 янв 2010.

  1. xrc2

    xrc2 New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    47
    Здравствуйте.

    PFNCLIENT - Client side functisons pointer structure.
    Как можно в WindowsXP 32\64 получить адрес на PFNCLIENT (Ansi\Unicode), не используя структуру SERVERINFO?

    В данный момент делаю так:

    Код (Text):
    1. PVOID pv1 = NULL;
    2. PVOID pv2 = NULL;
    3.  
    4. pv1 = (PVOID)((UINT_PTR)gServerInfo + 0x00000E8);
    5. if(IsX64Windows())
    6.     pv2 = (PVOID)((UINT_PTR)pv1 + sizeof(_PFNCLIENT64));
    7. else
    8.     pv2 = (PVOID)((UINT_PTR)pv1 + sizeof(_PFNCLIENT32));
    Код работает - но проверял только на WindowsXP 32 бита. Вот думаю что это не оч. хороший метод - но тем не менее лучшего пока нет.

    P.S. Еще есть опасение из-за того что в Windows Seven PFNCLIENT уже не храниться в SERVERINFO.
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Это лысо, притом весьма прозрачно; Никаких готовых решений на этот раз.

    Впрочем, раз тема была затронута, один может взглянуть на этот дамп:
    Код (Text):
    1. lkd> vertarget
    2. Windows 7 Kernel Version 7600 MP (2 procs) Free x64
    3. Product: WinNt, suite: TerminalServer SingleUserTS
    4. Built by: 7600.16385.amd64fre.win7_rtm.090713-1255
    5.  
    6. lkd> x win32k!*sharedinfo*
    7. fffff960`0034d300 win32k!gSharedInfo = struct tagSharedInfo
    8.  
    9. lkd> dt win32k!tagSharedInfo
    10.    +0x000 psi              : Ptr64 tagSERVERINFO
    11.    +0x008 aheList          : Ptr64 _HANDLEENTRY
    12.    +0x010 HeEntrySize      : Uint4B
    13.    +0x018 pDispInfo        : Ptr64 tagDISPLAYINFO
    14.    +0x020 ulSharedDelta    : Uint8B
    15.    +0x028 awmControl       : [31] _WNDMSG
    16.    +0x218 DefWindowMsgs    : _WNDMSG
    17.    +0x228 DefWindowSpecMsgs : _WNDMSG
    18.    
    19. lkd> dt win32k!tagSharedInfo fffff960`0034d300
    20.    +0x000 psi              : 0xfffff900`c0580a70 tagSERVERINFO
    21.    +0x008 aheList          : 0xfffff900`c0400000 _HANDLEENTRY
    22.    +0x010 HeEntrySize      : 0x18
    23.    +0x018 pDispInfo        : 0xfffff900`c0581e50 tagDISPLAYINFO
    24.    +0x020 ulSharedDelta    : 0
    25.    +0x028 awmControl       : [31] _WNDMSG
    26.    +0x218 DefWindowMsgs    : _WNDMSG
    27.    +0x228 DefWindowSpecMsgs : _WNDMSG
    28.    
    29. lkd> dt 0xfffff900`c0580a70 tagSERVERINFO
    30. Exit on Control-C
    31. lkd> dt 0xfffff900`c0580a70 win32k!tagSERVERINFO
    32.    +0x000 dwSRVIFlags      : 0x554
    33.    +0x008 cHandleEntries   : 0x16aa
    34.    +0x010 mpFnidPfn        : [32] 0xfffff960`0015bb88     int64  win32k!xxxWrapSBWndProc+0
    35.    +0x110 aStoCidPfn       : [7] 0xfffff960`001892e8     int64  win32k!xxxSBWndProc+0
    36.    +0x148 mpFnid_serverCBWndProc : [31] 0x170
    37.    +0x188 apfnClientA      : _PFNCLIENT
    38.    +0x240 apfnClientW      : _PFNCLIENT
    39.    +0x2f8 apfnClientWorker : _PFNCLIENTWORKER
    40.    +0x350 cbHandleTable    : 0x22000
    41.    +0x354 atomSysClass     : [25] 0xc017
    42.    +0x388 dwDefaultHeapBase : 0
    43.    +0x38c dwDefaultHeapSize : 0x1400000
    44.    +0x390 uiShellMsg       : 0xc02b
    45.    +0x394 MBStrings        : [11] tagMBSTRING
    46.    +0x54c atomIconSmProp   : 0xc029
    47.    +0x54e atomIconProp     : 0xc02a
    48.    +0x550 atomContextHelpIdProp : 0xc028
    49.    +0x552 atomFrostedWindowProp : 0xc02c
    50.    +0x554 acOemToAnsi      : [256]  ""
    51.    +0x654 acAnsiToOem      : [256]  ""
    52.    +0x754 dwInstalledEventHooks : 0x8105
    53.    +0x758 aiSysMet         : [97] 1280
    54.    +0x8dc argbSystemUnmatched : [31] 0x500
    55.    +0x958 argbSystem       : [31] 0x15
    56.    +0x9d8 ahbrSystem       : [31] (null)
    57.    +0xad0 hbrGray          : 0x00ff9933`00f2e4d7 HBRUSH__
    58.    +0xad8 ptCursor         : tagPOINT
    59.    +0xae0 ptCursorReal     : tagPOINT
    60.    +0xae8 dwLastRITEventTickCount : 0xdbcdbf
    61.    +0xaec nEvents          : 15790320
    62.    +0xaf0 dtScroll         : 0xffffff
    63.    +0xaf4 dtLBSearch       : 0x646464
    64.    +0xaf8 dtCaretBlink     : 0
    65.    +0xafc ucWheelScrollLines : 0
    66.    +0xb00 ucWheelScrollChars : 0
    67.    +0xb04 wMaxLeftOverlapChars : 11842740
    68.    +0xb08 wMaxRightOverlapChars : 16578548
    69.    +0xb0c cxSysFontChar    : 11250603
    70.    +0xb10 cySysFontChar    : 16750899
    71.    +0xb14 tmSysFont        : tagTEXTMETRICW
    72.    +0xb50 dpiSystem        : tagDPISERVERINFO
    73.    +0xb78 hIconSmWindows   : 0x00000000`01100079 HICON__
    74.    +0xb80 hIcoWindows      : 0x00000000`0110007a HICON__
    75.    +0xb88 dwKeyCache       : 0x110007b
    76.    +0xb8c dwAsyncKeyCache  : 0
    77.    +0xb90 cCaptures        : 0x110007c
    78.    +0xb94 oembmi           : [93] tagOEMBITMAPINFO
    79.    +0x1164 rcScreenReal     : tagRECT
    80.    +0x1174 BitCount         : 0x11
    81.    +0x1176 dmLogPixels      : 0
    82.    +0x1178 Planes           : 0x11 ''
    83.    +0x1179 BitsPixel        : 0 ''
    84.    +0x117c PUSIFlags        : 0x82
    85.    +0x1180 uCaretWidth      : 0x5d
    86.    +0x1184 UILangID         : 0x11
    87.    +0x1188 dwLastSystemRITEventTickCountUpdate : 0x11
    88.    +0x118c adwDBGTAGFlags   : [35] 0x93
    89.    +0x1218 dwTagCount       : 0xd
    90.    +0x121c dwRIPFlags       : 0x1a
    91.    
    92. lkd> dps 0xfffff900`c0580a70+10 L100/8
    93. fffff900`c0580a80  fffff960`0015bb88 win32k!xxxWrapSBWndProc
    94. fffff900`c0580a88  fffff960`001207c0 win32k!xxxWrapRealDefWindowProc
    95. fffff900`c0580a90  fffff960`0015bbe0 win32k!xxxWrapMenuWindowProc
    96. fffff900`c0580a98  fffff960`0015bc38 win32k!xxxWrapDesktopWndProc
    97. fffff900`c0580aa0  fffff960`001207c0 win32k!xxxWrapRealDefWindowProc
    98. fffff900`c0580aa8  fffff960`001207c0 win32k!xxxWrapRealDefWindowProc
    99. fffff900`c0580ab0  fffff960`0015bc90 win32k!xxxWrapSwitchWndProc
    100. fffff900`c0580ab8  fffff960`00252f74 win32k!prunPlgReadError
    101. fffff900`c0580ac0  fffff960`00252f74 win32k!prunPlgReadError
    102. fffff900`c0580ac8  fffff960`00252f74 win32k!prunPlgReadError
    103. fffff900`c0580ad0  fffff960`00252f74 win32k!prunPlgReadError
    104. fffff900`c0580ad8  fffff960`00252f74 win32k!prunPlgReadError
    105. fffff900`c0580ae0  fffff960`00252f74 win32k!prunPlgReadError
    106. fffff900`c0580ae8  fffff960`00252f74 win32k!prunPlgReadError
    107. fffff900`c0580af0  fffff960`00252f74 win32k!prunPlgReadError
    108. fffff900`c0580af8  fffff960`00252f74 win32k!prunPlgReadError
    109. fffff900`c0580b00  fffff960`00252f74 win32k!prunPlgReadError
    110. fffff900`c0580b08  fffff960`001c7224 win32k!fnHkINLPCWPEXSTRUCT
    111. fffff900`c0580b10  fffff960`001c72b8 win32k!fnHkINLPCWPRETEXSTRUCT
    112. fffff900`c0580b18  fffff960`00252f74 win32k!prunPlgReadError
    113. fffff900`c0580b20  fffff960`00252f74 win32k!prunPlgReadError
    114. fffff900`c0580b28  fffff960`00252f74 win32k!prunPlgReadError
    115. fffff900`c0580b30  fffff960`00252f74 win32k!prunPlgReadError
    116. fffff900`c0580b38  fffff960`000f3374 win32k!xxxWrapSendMessage
    117. fffff900`c0580b40  fffff960`00179204 win32k!xxxSendMessageFF
    118. fffff900`c0580b48  fffff960`000eec34 win32k!xxxSendMessageEx
    119. fffff900`c0580b50  fffff960`0015be08 win32k!xxxWrapCallWindowProc
    120. fffff900`c0580b58  fffff960`000e0790 win32k!xxxWrapSendMessageBSM
    121. fffff900`c0580b60  fffff960`00252f74 win32k!prunPlgReadError
    122. fffff900`c0580b68  fffff960`000e1ef4 win32k!xxxWrapSendNotifyMessage
    123. fffff900`c0580b70  fffff960`0015bcf0 win32k!xxxWrapSendMessageCallback
    124. fffff900`c0580b78  fffff960`00252f74 win32k!prunPlgReadError
    125.  
    126. lkd> dps 0xfffff900`c0580a70+110 L7
    127. fffff900`c0580b80  fffff960`001892e8 win32k!xxxSBWndProc
    128. fffff900`c0580b88  fffff960`000fc080 win32k!xxxDefWindowProc
    129. fffff900`c0580b90  fffff960`00193570 win32k!xxxMenuWindowProc
    130. fffff900`c0580b98  fffff960`000fc200 win32k!xxxDesktopWndProc
    131. fffff900`c0580ba0  fffff960`000fc080 win32k!xxxDefWindowProc
    132. fffff900`c0580ba8  fffff960`000fc080 win32k!xxxDefWindowProc
    133. fffff900`c0580bb0  00000000`00000000
    134.  
    135. lkd> dt 0xfffff900`c0580a70 win32k!tagSERVERINFO apfnClient.
    136.    +0x188 apfnClientA :
    137.       +0x000 pfnScrollBarWndProc : 0x00000000`77c1930c        int64  ntdll!NtdllScrollBarWndProc_A+0
    138.       +0x008 pfnTitleWndProc : 0x00000000`77bb18d8        int64  ntdll!NtdllDefWindowProc_A+0
    139.       +0x010 pfnMenuWndProc : 0x00000000`77c1932c        int64  ntdll!NtdllMenuWndProc_A+0
    140.       +0x018 pfnDesktopWndProc : 0x00000000`77c1934c        int64  ntdll!NtdllDesktopWndProc_A+0
    141.       +0x020 pfnDefWindowProc : 0x00000000`77bb18d8        int64  ntdll!NtdllDefWindowProc_A+0
    142.       +0x028 pfnMessageWindowProc : 0x00000000`77bb18d8        int64  ntdll!NtdllDefWindowProc_A+0
    143.       +0x030 pfnSwitchWindowProc : 0x00000000`77c1936c        int64  ntdll!NtdllSwitchWindowProc_A+0
    144.       +0x038 pfnButtonWndProc : 0x00000000`77c1938c        int64  ntdll!NtdllButtonWndProc_A+0
    145.       +0x040 pfnComboBoxWndProc : 0x00000000`77c193ac        int64  ntdll!NtdllComboBoxWndProc_A+0
    146.       +0x048 pfnComboListBoxProc : 0x00000000`77c193cc        int64  ntdll!NtdllComboListBoxProc_A+0
    147.       +0x050 pfnDialogWndProc : 0x00000000`77c193ec        int64  ntdll!NtdllDialogWndProc_A+0
    148.       +0x058 pfnEditWndProc : 0x00000000`77c193fc        int64  ntdll!NtdllEditWndProc_A+0
    149.       +0x060 pfnListBoxWndProc : 0x00000000`77c1941c        int64  ntdll!NtdllListBoxWndProc_A+0
    150.       +0x068 pfnMDIClientWndProc : 0x00000000`77c1943c        int64  ntdll!NtdllMDIClientWndProc_A+0
    151.       +0x070 pfnStaticWndProc : 0x00000000`77c1945c        int64  ntdll!NtdllStaticWndProc_A+0
    152.       +0x078 pfnImeWndProc : 0x00000000`77c1947c        int64  ntdll!NtdllImeWndProc_A+0
    153.       +0x080 pfnGhostWndProc : 0x00000000`77c1948c        int64  ntdll!NtdllGhostWndProc_A+0
    154.       +0x088 pfnHkINLPCWPSTRUCT : 0x00000000`77c194ac        int64  ntdll!NtdllHkINLPCWPSTRUCT_A+0
    155.       +0x090 pfnHkINLPCWPRETSTRUCT : 0x00000000`77c194bc        int64  ntdll!NtdllHkINLPCWPRETSTRUCT_A+0
    156.       +0x098 pfnDispatchHook : 0x00000000`77c194dc        int64  ntdll!NtdllDispatchHook_A+0
    157.       +0x0a0 pfnDispatchDefWindowProc : 0x00000000`77c194fc        int64  ntdll!NtdllDispatchDefWindowProc_A+0
    158.       +0x0a8 pfnDispatchMessage : 0x00000000`77c1951c        int64  ntdll!NtdllDispatchMessage_A+0
    159.       +0x0b0 pfnMDIActivateDlgProc : 0x00000000`77c1952c        int64  ntdll!NtdllMDIActivateDlgProc_A+0
    160.    +0x240 apfnClientW :
    161.       +0x000 pfnScrollBarWndProc : 0x00000000`77c1931c        int64  ntdll!NtdllScrollBarWndProc_W+0
    162.       +0x008 pfnTitleWndProc : 0x00000000`77bd5dd0        int64  ntdll!NtdllDefWindowProc_W+0
    163.       +0x010 pfnMenuWndProc : 0x00000000`77c1933c        int64  ntdll!NtdllMenuWndProc_W+0
    164.       +0x018 pfnDesktopWndProc : 0x00000000`77c1935c        int64  ntdll!NtdllDesktopWndProc_W+0
    165.       +0x020 pfnDefWindowProc : 0x00000000`77bd5dd0        int64  ntdll!NtdllDefWindowProc_W+0
    166.       +0x028 pfnMessageWindowProc : 0x00000000`77bd5dd0        int64  ntdll!NtdllDefWindowProc_W+0
    167.       +0x030 pfnSwitchWindowProc : 0x00000000`77c1937c        int64  ntdll!NtdllSwitchWindowProc_W+0
    168.       +0x038 pfnButtonWndProc : 0x00000000`77c1939c        int64  ntdll!NtdllButtonWndProc_W+0
    169.       +0x040 pfnComboBoxWndProc : 0x00000000`77c193bc        int64  ntdll!NtdllComboBoxWndProc_W+0
    170.       +0x048 pfnComboListBoxProc : 0x00000000`77c193dc        int64  ntdll!NtdllComboListBoxProc_W+0
    171.       +0x050 pfnDialogWndProc : 0x00000000`77bb39e8        int64  ntdll!NtdllDialogWndProc_W+0
    172.       +0x058 pfnEditWndProc : 0x00000000`77c1940c        int64  ntdll!NtdllEditWndProc_W+0
    173.       +0x060 pfnListBoxWndProc : 0x00000000`77c1942c        int64  ntdll!NtdllListBoxWndProc_W+0
    174.       +0x068 pfnMDIClientWndProc : 0x00000000`77c1944c        int64  ntdll!NtdllMDIClientWndProc_W+0
    175.       +0x070 pfnStaticWndProc : 0x00000000`77c1946c        int64  ntdll!NtdllStaticWndProc_W+0
    176.       +0x078 pfnImeWndProc : 0x00000000`77bbe290        int64  ntdll!NtdllImeWndProc_W+0
    177.       +0x080 pfnGhostWndProc : 0x00000000`77c1949c        int64  ntdll!NtdllGhostWndProc_W+0
    178.       +0x088 pfnHkINLPCWPSTRUCT : 0x00000000`77b9dcc4        int64  ntdll!NtdllHkINLPCWPSTRUCT_W+0
    179.       +0x090 pfnHkINLPCWPRETSTRUCT : 0x00000000`77c194cc        int64  ntdll!NtdllHkINLPCWPRETSTRUCT_W+0
    180.       +0x098 pfnDispatchHook : 0x00000000`77c194ec        int64  ntdll!NtdllDispatchHook_W+0
    181.       +0x0a0 pfnDispatchDefWindowProc : 0x00000000`77c1950c        int64  ntdll!NtdllDispatchDefWindowProc_W+0
    182.       +0x0a8 pfnDispatchMessage : 0x00000000`77bd5dc0        int64  ntdll!NtdllDispatchMessage_W+0
    183.       +0x0b0 pfnMDIActivateDlgProc : 0x00000000`77c1953c        int64  ntdll!NtdllMDIActivateDlgProc_W+0
    184.    +0x2f8 apfnClientWorker :
    185.       +0x000 pfnButtonWndProc : 0x00000000`77c1954c        int64  ntdll!NtdllButtonWndProcWorker+0
    186.       +0x008 pfnComboBoxWndProc : 0x00000000`77c1955c        int64  ntdll!NtdllComboBoxWndProcWorker+0
    187.       +0x010 pfnComboListBoxProc : 0x00000000`77c1956c        int64  ntdll!NtdllComboListBoxProcWorker+0
    188.       +0x018 pfnDialogWndProc : 0x00000000`77bbe8dc        int64  ntdll!NtdllDialogWndProcWorker+0
    189.       +0x020 pfnEditWndProc : 0x00000000`77c1957c        int64  ntdll!NtdllEditWndProcWorker+0
    190.       +0x028 pfnListBoxWndProc : 0x00000000`77c1958c        int64  ntdll!NtdllListBoxWndProcWorker+0
    191.       +0x030 pfnMDIClientWndProc : 0x00000000`77c1959c        int64  ntdll!NtdllMDIClientWndProcWorker+0
    192.       +0x038 pfnStaticWndProc : 0x00000000`77c195ac        int64  ntdll!NtdllStaticWndProcWorker+0
    193.       +0x040 pfnImeWndProc : 0x00000000`77bbdaa4        int64  ntdll!NtdllImeWndProcWorker+0
    194.       +0x048 pfnGhostWndProc : 0x00000000`77c195bc        int64  ntdll!NtdllGhostWndProcWorker+0
    195.       +0x050 pfnCtfHookProc : 0x00000000`77bbda58        int64  ntdll!NtdllCtfHookProcWorker+0
    И в сфокусированном виде:
    Код (Text):
    1. lkd> dps 0xfffff900`c0580a70 +110 L(2f8+50-110)/8 + 1
    2. fffff900`c0580b80  fffff960`001892e8 win32k!xxxSBWndProc
    3. fffff900`c0580b88  fffff960`000fc080 win32k!xxxDefWindowProc
    4. fffff900`c0580b90  fffff960`00193570 win32k!xxxMenuWindowProc
    5. fffff900`c0580b98  fffff960`000fc200 win32k!xxxDesktopWndProc
    6. fffff900`c0580ba0  fffff960`000fc080 win32k!xxxDefWindowProc
    7. fffff900`c0580ba8  fffff960`000fc080 win32k!xxxDefWindowProc
    8. fffff900`c0580bb0  00000000`00000000
    9. fffff900`c0580bb8  01280130`01280170
    10. fffff900`c0580bc0  01300000`012c0000
    11. fffff900`c0580bc8  01300146`01300130
    12. fffff900`c0580bd0  01300130`01380130
    13. fffff900`c0580bd8  00000000`00000130
    14. fffff900`c0580be0  00000000`00000000
    15. fffff900`c0580be8  00000000`00000000
    16. fffff900`c0580bf0  00000000`00000158
    17. fffff900`c0580bf8  00000000`77c1930c ntdll!NtdllScrollBarWndProc_A
    18. fffff900`c0580c00  00000000`77bb18d8 ntdll!NtdllDefWindowProc_A
    19. fffff900`c0580c08  00000000`77c1932c ntdll!NtdllMenuWndProc_A
    20. fffff900`c0580c10  00000000`77c1934c ntdll!NtdllDesktopWndProc_A
    21. fffff900`c0580c18  00000000`77bb18d8 ntdll!NtdllDefWindowProc_A
    22. fffff900`c0580c20  00000000`77bb18d8 ntdll!NtdllDefWindowProc_A
    23. fffff900`c0580c28  00000000`77c1936c ntdll!NtdllSwitchWindowProc_A
    24. fffff900`c0580c30  00000000`77c1938c ntdll!NtdllButtonWndProc_A
    25. fffff900`c0580c38  00000000`77c193ac ntdll!NtdllComboBoxWndProc_A
    26. fffff900`c0580c40  00000000`77c193cc ntdll!NtdllComboListBoxProc_A
    27. fffff900`c0580c48  00000000`77c193ec ntdll!NtdllDialogWndProc_A
    28. fffff900`c0580c50  00000000`77c193fc ntdll!NtdllEditWndProc_A
    29. fffff900`c0580c58  00000000`77c1941c ntdll!NtdllListBoxWndProc_A
    30. fffff900`c0580c60  00000000`77c1943c ntdll!NtdllMDIClientWndProc_A
    31. fffff900`c0580c68  00000000`77c1945c ntdll!NtdllStaticWndProc_A
    32. fffff900`c0580c70  00000000`77c1947c ntdll!NtdllImeWndProc_A
    33. fffff900`c0580c78  00000000`77c1948c ntdll!NtdllGhostWndProc_A
    34. fffff900`c0580c80  00000000`77c194ac ntdll!NtdllHkINLPCWPSTRUCT_A
    35. fffff900`c0580c88  00000000`77c194bc ntdll!NtdllHkINLPCWPRETSTRUCT_A
    36. fffff900`c0580c90  00000000`77c194dc ntdll!NtdllDispatchHook_A
    37. fffff900`c0580c98  00000000`77c194fc ntdll!NtdllDispatchDefWindowProc_A
    38. fffff900`c0580ca0  00000000`77c1951c ntdll!NtdllDispatchMessage_A
    39. fffff900`c0580ca8  00000000`77c1952c ntdll!NtdllMDIActivateDlgProc_A
    40. fffff900`c0580cb0  00000000`77c1931c ntdll!NtdllScrollBarWndProc_W
    41. fffff900`c0580cb8  00000000`77bd5dd0 ntdll!NtdllDefWindowProc_W
    42. fffff900`c0580cc0  00000000`77c1933c ntdll!NtdllMenuWndProc_W
    43. fffff900`c0580cc8  00000000`77c1935c ntdll!NtdllDesktopWndProc_W
    44. fffff900`c0580cd0  00000000`77bd5dd0 ntdll!NtdllDefWindowProc_W
    45. fffff900`c0580cd8  00000000`77bd5dd0 ntdll!NtdllDefWindowProc_W
    46. fffff900`c0580ce0  00000000`77c1937c ntdll!NtdllSwitchWindowProc_W
    47. fffff900`c0580ce8  00000000`77c1939c ntdll!NtdllButtonWndProc_W
    48. fffff900`c0580cf0  00000000`77c193bc ntdll!NtdllComboBoxWndProc_W
    49. fffff900`c0580cf8  00000000`77c193dc ntdll!NtdllComboListBoxProc_W
    50. fffff900`c0580d00  00000000`77bb39e8 ntdll!NtdllDialogWndProc_W
    51. fffff900`c0580d08  00000000`77c1940c ntdll!NtdllEditWndProc_W
    52. fffff900`c0580d10  00000000`77c1942c ntdll!NtdllListBoxWndProc_W
    53. fffff900`c0580d18  00000000`77c1944c ntdll!NtdllMDIClientWndProc_W
    54. fffff900`c0580d20  00000000`77c1946c ntdll!NtdllStaticWndProc_W
    55. fffff900`c0580d28  00000000`77bbe290 ntdll!NtdllImeWndProc_W
    56. fffff900`c0580d30  00000000`77c1949c ntdll!NtdllGhostWndProc_W
    57. fffff900`c0580d38  00000000`77b9dcc4 ntdll!NtdllHkINLPCWPSTRUCT_W
    58. fffff900`c0580d40  00000000`77c194cc ntdll!NtdllHkINLPCWPRETSTRUCT_W
    59. fffff900`c0580d48  00000000`77c194ec ntdll!NtdllDispatchHook_W
    60. fffff900`c0580d50  00000000`77c1950c ntdll!NtdllDispatchDefWindowProc_W
    61. fffff900`c0580d58  00000000`77bd5dc0 ntdll!NtdllDispatchMessage_W
    62. fffff900`c0580d60  00000000`77c1953c ntdll!NtdllMDIActivateDlgProc_W
    63. fffff900`c0580d68  00000000`77c1954c ntdll!NtdllButtonWndProcWorker
    64. fffff900`c0580d70  00000000`77c1955c ntdll!NtdllComboBoxWndProcWorker
    65. fffff900`c0580d78  00000000`77c1956c ntdll!NtdllComboListBoxProcWorker
    66. fffff900`c0580d80  00000000`77bbe8dc ntdll!NtdllDialogWndProcWorker
    67. fffff900`c0580d88  00000000`77c1957c ntdll!NtdllEditWndProcWorker
    68. fffff900`c0580d90  00000000`77c1958c ntdll!NtdllListBoxWndProcWorker
    69. fffff900`c0580d98  00000000`77c1959c ntdll!NtdllMDIClientWndProcWorker
    70. fffff900`c0580da0  00000000`77c195ac ntdll!NtdllStaticWndProcWorker
    71. fffff900`c0580da8  00000000`77bbdaa4 ntdll!NtdllImeWndProcWorker
    72. fffff900`c0580db0  00000000`77c195bc ntdll!NtdllGhostWndProcWorker
    73. fffff900`c0580db8  00000000`77bbda58 ntdll!NtdllCtfHookProcWorker
    В совокупности со знанием о доступности получения адреса оконной процедуры универсальный алгоритм поиска _PFNCLIENT внутри SERVERINFO для любой системы становится очевидным.

    >pv1 = (PVOID)((UINT_PTR)gServerInfo + 0x00000E8)
    Нам кажется, что если уж делать поддержку x64, то имеет смысл изначально работать именно с такой системой, а не делать странных предположений.
     
  3. xrc2

    xrc2 New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    47
    Sol_Ksacap

    А возможно ли узнать PFNCLIENT без использования структуры SERVERINFO? (может как нибудь через Csr* ф-ии?)
    Меня интересует только WindowsXP 32\64.
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    >А возможно ли узнать PFNCLIENT без использования структуры SERVERINFO?
    Нам ничего об этом не известно. А сервер подсистемы – не волшебная пуля:
    Код (Text):
    1. lkd> vertarget
    2. Windows 7 Kernel Version 7600 MP (2 procs) Free x64
    3. Product: WinNt, suite: TerminalServer SingleUserTS
    4. Built by: 7600.16385.amd64fre.win7_rtm.090713-1255
    5.  
    6. lkd> !process 0 0 csrss.exe
    7. PROCESS fffffa8002cda840
    8.     SessionId: 0  Cid: 017c    Peb: 7fffffd9000  ParentCid: 0174
    9.     DirBase: 19f8e000  ObjectTable: fffff8a000c82a40  HandleCount: 471.
    10.     Image: csrss.exe
    11.  
    12. PROCESS fffffa80035fcb30
    13.     SessionId: 1  Cid: 01c8    Peb: 7fffffd4000  ParentCid: 01a4
    14.     DirBase: 186cd000  ObjectTable: fffff8a005106910  HandleCount: 611.
    15.     Image: csrss.exe
    16.  
    17. lkd> .process /p /r fffffa80035fcb30
    18. Implicit process is now fffffa80`035fcb30
    19. Loading User Symbols
    20. .......WARNING: Loader 00000000`00283ab0 timestamp 0004ac81 != header timestamp 4a5bdfdf
    21. .........
    22.  
    23. lkd> lmm csrsrv*
    24. Browse full module list
    25. start             end                 module name
    26. 000007fe`fdb70000 000007fe`fdb83000   CSRSRV     (deferred)            
    27.  
    28. lkd> dps CSRSRV!CsrLoadedServerDll L8
    29. 000007fe`fdb7e740  00000000`00283480
    30. 000007fe`fdb7e748  00000000`00283590
    31. 000007fe`fdb7e750  00000000`002ab030
    32. 000007fe`fdb7e758  00000000`002a99a0
    33. 000007fe`fdb7e760  00000000`002ab0c0
    34. 000007fe`fdb7e768  00000000`7efe0000
    35. 000007fe`fdb7e770  00000000`00000090
    36. 000007fe`fdb7e778  00000000`00000078
    37.  
    38. lkd> dps 00283480 L10
    39. 00000000`00283480  00000000`00060005
    40. 00000000`00283488  00000000`002834f8
    41. 00000000`00283490  00000000`00000000
    42. 00000000`00283498  00000000`00000000
    43. 00000000`002834a0  00000005`00000000
    44. 00000000`002834a8  000007fe`fdb713b8 CSRSRV!CsrServerApiDispatchTable
    45. 00000000`002834b0  000007fe`fdb7a170 CSRSRV!CsrServerApiServerValidTable
    46. 00000000`002834b8  00000000`00000000
    47. 00000000`002834c0  00000000`00000000
    48. 00000000`002834c8  00000000`00000000
    49. 00000000`002834d0  00000000`00000000
    50. 00000000`002834d8  00000000`00000000
    51. 00000000`002834e0  00000000`7efe0000
    52. 00000000`002834e8  00000000`00000000
    53. 00000000`002834f0  00000000`00000000
    54. 00000000`002834f8  00000053`53525343
    55.  
    56. lkd> as /x OffsetApiTable 002834a8 - 00283480
    57. lkd> as /x OffsetName 002834f8 - 00283480
    58. lkd> al
    59.   Alias            Value  
    60.  -------          -------
    61.  OffsetApiTable   0x28
    62.  OffsetName       0x78
    63.  
    64. lkd> r$t0=0; .while (@$t0 < 5) {r$t1= poi(CSRSRV!CsrLoadedServerDll + @$ptrsize * @$t0); .echo;.echo;.echo; da @$t1 + OffsetName ; .echo; dps @$t1 L(1 + OffsetName / @$ptrsize); .echo; dps poi(@$t1 + OffsetApiTable ) L(dwo(@$t1 + OffsetApiTable - 4) - dwo(@$t1 + OffsetApiTable - 8));    r$t0= @$t0+1}
    65.  
    66.  
    67.  
    68. 00000000`002834f8  "CSRSS"
    69.  
    70. 00000000`00283480  00000000`00060005
    71. 00000000`00283488  00000000`002834f8
    72. 00000000`00283490  00000000`00000000
    73. 00000000`00283498  00000000`00000000
    74. 00000000`002834a0  00000005`00000000
    75. 00000000`002834a8  000007fe`fdb713b8 CSRSRV!CsrServerApiDispatchTable
    76. 00000000`002834b0  000007fe`fdb7a170 CSRSRV!CsrServerApiServerValidTable
    77. 00000000`002834b8  00000000`00000000
    78. 00000000`002834c0  00000000`00000000
    79. 00000000`002834c8  00000000`00000000
    80. 00000000`002834d0  00000000`00000000
    81. 00000000`002834d8  00000000`00000000
    82. 00000000`002834e0  00000000`7efe0000
    83. 00000000`002834e8  00000000`00000000
    84. 00000000`002834f0  00000000`00000000
    85. 00000000`002834f8  00000053`53525343
    86.  
    87. 000007fe`fdb713b8  000007fe`fdb738f8 CSRSRV!CsrSrvClientConnect
    88. 000007fe`fdb713c0  000007fe`fdb726dc CSRSRV!CsrSrvUnusedFunction
    89. 000007fe`fdb713c8  000007fe`fdb726dc CSRSRV!CsrSrvUnusedFunction
    90. 000007fe`fdb713d0  000007fe`fdb726dc CSRSRV!CsrSrvUnusedFunction
    91. 000007fe`fdb713d8  000007fe`fdb726dc CSRSRV!CsrSrvUnusedFunction
    92.  
    93.  
    94.  
    95. 00000000`00283608  "basesrv"
    96.  
    97. 00000000`00283590  00000000`00080007
    98. 00000000`00283598  00000000`00283608
    99. 00000000`002835a0  000007fe`fdb50000 basesrv!_imp_CsrUnlockProcess <PERF> (basesrv+0x0)
    100. 00000000`002835a8  00000000`00000001
    101. 00000000`002835b0  0000001d`00000000
    102. 00000000`002835b8  000007fe`fdb51930 basesrv!BaseServerApiDispatchTable
    103. 00000000`002835c0  000007fe`fdb5d270 basesrv!BaseServerApiServerValidTable
    104. 00000000`002835c8  00000000`00000000
    105. 00000000`002835d0  00000000`00000000
    106. 00000000`002835d8  000007fe`fdb52e04 basesrv!BaseClientConnectRoutine
    107. 00000000`002835e0  000007fe`fdb52e1c basesrv!BaseClientDisconnectRoutine
    108. 00000000`002835e8  00000000`00000000
    109. 00000000`002835f0  00000000`7efe0ac0
    110. 00000000`002835f8  00000000`00000000
    111. 00000000`00283600  00000000`00000000
    112. 00000000`00283608  00767273`65736162
    113.  
    114. 000007fe`fdb51930  000007fe`fdb54b44 basesrv!BaseSrvCreateProcess
    115. 000007fe`fdb51938  000007fe`fdb54fb8 basesrv!BaseSrvCreateThread
    116. 000007fe`fdb51940  000007fe`fdb551b4 basesrv!BaseSrvDeadEntry
    117. 000007fe`fdb51948  000007fe`fdb55188 basesrv!BaseSrvExitProcess
    118. 000007fe`fdb51950  000007fe`fdb551b4 basesrv!BaseSrvDeadEntry
    119. 000007fe`fdb51958  000007fe`fdb5547c basesrv!BaseSrvCheckVDM
    120. 000007fe`fdb51960  000007fe`fdb5562c basesrv!BaseSrvUpdateVDMEntry
    121. 000007fe`fdb51968  000007fe`fdb55674 basesrv!BaseSrvGetNextVDMCommand
    122. 000007fe`fdb51970  000007fe`fdb55f50 basesrv!BaseSrvExitVDM
    123. 000007fe`fdb51978  000007fe`fdb55f98 basesrv!BaseSrvIsFirstVDM
    124. 000007fe`fdb51980  000007fe`fdb579e4 basesrv!BaseSrvGetVDMExitCode
    125. 000007fe`fdb51988  000007fe`fdb58238 basesrv!BaseSrvSetReenterCount
    126. 000007fe`fdb51990  000007fe`fdb551c0 basesrv!BaseSrvSetProcessShutdownParam
    127. 000007fe`fdb51998  000007fe`fdb551f8 basesrv!BaseSrvGetProcessShutdownParam
    128. 000007fe`fdb519a0  000007fe`fdb56028 basesrv!BaseSrvSetVDMCurDirs
    129. 000007fe`fdb519a8  000007fe`fdb56398 basesrv!BaseSrvGetVDMCurDirs
    130. 000007fe`fdb519b0  000007fe`fdb5615c basesrv!BaseSrvBatNotification
    131. 000007fe`fdb519b8  000007fe`fdb56224 basesrv!BaseSrvRegisterWowExec
    132. 000007fe`fdb519c0  000007fe`fdb5ae18 basesrv!BaseSrvSoundSentryNotification
    133. 000007fe`fdb519c8  000007fe`fdb5a7ec basesrv!BaseSrvRefreshIniFileMapping
    134. 000007fe`fdb519d0  000007fe`fdb52f54 basesrv!BaseSrvDefineDosDevice
    135. 000007fe`fdb519d8  000007fe`fdb5ad0c basesrv!BaseSrvSetTermsrvAppInstallMode
    136. 000007fe`fdb519e0  000007fe`fdb5411c basesrv!BaseSrvSetTermsrvClientTimeZone
    137. 000007fe`fdb519e8  000007fe`fdb55224 basesrv!BaseSrvCreateActivationContext
    138. 000007fe`fdb519f0  000007fe`fdb551b4 basesrv!BaseSrvDeadEntry
    139. 000007fe`fdb519f8  000007fe`fdb550c0 basesrv!BaseSrvRegisterThread
    140. 000007fe`fdb51a00  000007fe`fdb54f5c basesrv!BaseSrvDeferredCreateProcess
    141. 000007fe`fdb51a08  000007fe`fdb59930 basesrv!BaseSrvNlsGetUserInfo
    142. 000007fe`fdb51a10  000007fe`fdb59a28 basesrv!BaseSrvNlsUpdateCacheCount
    143.  
    144.  
    145.  
    146. 00000000`002ab0a8  "winsrv"
    147.  
    148. 00000000`002ab030  00000000`00070006
    149. 00000000`002ab038  00000000`002ab0a8
    150. 00000000`002ab040  000007fe`fdb10000 winsrv!_delayLoadHelper2 <PERF> (winsrv+0x0)
    151. 00000000`002ab048  00000000`00000002
    152. 00000000`002ab050  00000000`00000000
    153. 00000000`002ab058  00000000`00000000
    154. 00000000`002ab060  00000000`00000000
    155. 00000000`002ab068  00000000`00000000
    156. 00000000`002ab070  00000000`00000090
    157. 00000000`002ab078  000007fe`fdb113b4 winsrv!ConsoleClientConnectRoutine
    158. 00000000`002ab080  000007fe`fdb11270 winsrv!ConsoleClientDisconnectRoutine
    159. 00000000`002ab088  00000000`00000000
    160. 00000000`002ab090  00000000`7efe0000
    161. 00000000`002ab098  000007fe`fdb11300 winsrv!ConsoleAddProcessRoutine
    162. 00000000`002ab0a0  00000000`00000000
    163. 00000000`002ab0a8  00007672`736e6977
    164.  
    165.  
    166.  
    167.  
    168. 00000000`002a9a18  "winsrv"
    169.  
    170. 00000000`002a99a0  00000000`00070006
    171. 00000000`002a99a8  00000000`002a9a18
    172. 00000000`002a99b0  000007fe`fdb10000 winsrv!_delayLoadHelper2 <PERF> (winsrv+0x0)
    173. 00000000`002a99b8  00000000`00000003
    174. 00000000`002a99c0  0000040a`00000400
    175. 00000000`002a99c8  000007fe`fdb26960 winsrv!UserServerApiDispatchTable
    176. 00000000`002a99d0  000007fe`fdb2b8b8 winsrv!UserServerApiServerValidTable
    177. 00000000`002a99d8  00000000`00000000
    178. 00000000`002a99e0  00000000`00000000
    179. 00000000`002a99e8  000007fe`fdb1145c winsrv!UserClientConnect
    180. 00000000`002a99f0  00000000`00000000
    181. 00000000`002a99f8  000007fe`fdb231b0 winsrv!UserHardError
    182. 00000000`002a9a00  00000000`7efe0000
    183. 00000000`002a9a08  00000000`00000000
    184. 00000000`002a9a10  000007fe`fdb1e064 winsrv!UserClientShutdown
    185. 00000000`002a9a18  00007672`736e6977
    186.  
    187. 000007fe`fdb26960  000007fe`fdb1ff70 winsrv!SrvExitWindowsEx
    188. 000007fe`fdb26968  000007fe`fdb145bc winsrv!SrvEndTask
    189. 000007fe`fdb26970  000007fe`fdb12bd8 winsrv!SrvLogon
    190. 000007fe`fdb26978  000007fe`fdb21314 winsrv!SrvActivateDebugger
    191. 000007fe`fdb26980  000007fe`fdb1409c winsrv!SrvDeviceEvent
    192. 000007fe`fdb26988  000007fe`fdb14280 winsrv!SrvCreateSystemThreads
    193. 000007fe`fdb26990  000007fe`fdb20528 winsrv!SrvRecordShutdownReason
    194. 000007fe`fdb26998  000007fe`fdb20090 winsrv!CancelExitWindowsThread
    195. 000007fe`fdb269a0  000007fe`fdb11020 winsrv!SrvConsoleHandleOperation
    196. 000007fe`fdb269a8  000007fe`fdb1d548 winsrv!SrvGetSetShutdownBlockReason
    197.  
    198.  
    199.  
    200. 00000000`002ab138  "sxssrv"
    201.  
    202. 00000000`002ab0c0  00000000`00070006
    203. 00000000`002ab0c8  00000000`002ab138
    204. 00000000`002ab0d0  000007fe`fdb00000 sxssrv!ServerDllInitialization <PERF> (sxssrv+0x0)
    205. 00000000`002ab0d8  00000000`00000004
    206. 00000000`002ab0e0  00000000`00000000
    207. 00000000`002ab0e8  00000000`00000000
    208. 00000000`002ab0f0  00000000`00000000
    209. 00000000`002ab0f8  00000000`00000000
    210. 00000000`002ab100  00000000`00000000
    211. 00000000`002ab108  00000000`00000000
    212. 00000000`002ab110  00000000`00000000
    213. 00000000`002ab118  00000000`00000000
    214. 00000000`002ab120  00000000`7efe0000
    215. 00000000`002ab128  00000000`00000000
    216. 00000000`002ab130  00000000`00000000
    217. 00000000`002ab138  00007672`73737873
     
  5. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Парсинг(создание графа/трассировка графа для User32!ClientThreadSetup() до входа в NtUserInitializeClientPfnArrays()(определить можно по стабу, по модели вызова или используя релоки).
     
  6. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Откопал у себя код, там сигнатурный поиск(это плохое решение, в любом случае скан памяти не тру). Сейчас я использую дизасм+парсер для любых поисков.
    http://narod.ru/disk/16811565000/Msg.rar.html
    Мониторит мессаги http://img229.imageshack.us/img229/2552/logu.png