user32!NtUserCreateWindowEx

Discussion in 'WASM.WIN32' started by Lord_De_Seis, Apr 29, 2008.

  1. Lord_De_Seis

    Lord_De_Seis New Member

    Blog Posts:
    0
    Joined:
    Aug 18, 2005
    Messages:
    55
    Дайте прототип, плиз. Что то никак не пойму, где там какой параметр. В исходниках 2к прототип (для win32k.sys) такой:
    Code (Text):
    1. W32KAPI
    2. HWND
    3. NtUserCreateWindowEx(
    4.     IN DWORD dwExStyle,
    5.     IN PLARGE_STRING pstrClassName,
    6.     IN PLARGE_STRING pstrWindowName OPTIONAL,
    7.     IN DWORD dwStyle,
    8.     IN int x,
    9.     IN int y,
    10.     IN int nWidth,
    11.     IN int nHeight,
    12.     IN HWND hwndParent,
    13.     IN HMENU hmenu,
    14.     IN HANDLE hModule,
    15.     IN LPVOID pParam,
    16.     IN DWORD dwFlags);
    Но судя по тому что я вижу в WinDbg, второй параметр точно не указатель.
    Для user32.dll
    Code (Text):
    1. kd> bp user32!NtUserCreateWindowEx
    2. kd> g
    3. Breakpoint 0 hit
    4. user32!NtUserCreateWindowEx:
    5. 001b:77d517df b857110000      mov     eax,1157h
    6. kd> kvn
    7.  # ChildEBP RetAddr  Args to Child              
    8. 00 0012fe50 77d557f8 80010100 00008002 0012feb4 user32!NtUserCreateWindowEx
    9. 01 0012ff28 77d56877 00400000 00008002 00000000 user32!InternalCreateDialog+0x5bc (FPO: [Non-Fpo])
    10. 02 0012ff5c 77d568cc 00400000 00404060 00000000 user32!InternalDialogBox+0xa9 (FPO: [Non-Fpo])
    11. 03 0012ff7c 77d5892d 00400000 00404060 00000000 user32!DialogBoxIndirectParamAorW+0x37 (FPO: [Non-Fpo])
    12. 04 0012ffa8 00401027 00400000 00000065 00000000 user32!DialogBoxParamA+0x4c (FPO: [Non-Fpo])
    13. kd> dps 00008002
    14. 00008002  ????????
    15. 00008006  ????????
    16. 0000800a  ????????
    17. 0000800e  ????????
    18. 00008012  ????????
    19. 00008016  ????????
    20. 0000801a  ????????
    И для win32k.sys
    Code (Text):
    1. kd> bp win32k!NtUserCreateWindowEx
    2. WARNING: Software breakpoints on session addresses can cause bugchecks.
    3. Use hardware execution breakpoints (ba e) if possible.
    4. breakpoint 1 redefined
    5. kd> g
    6. Breakpoint 1 hit
    7. win32k!NtUserCreateWindowEx:
    8. bf82f80f 6a54            push    54h
    9. kd> kvn
    10.  # ChildEBP RetAddr  Args to Child              
    11. 00 f8093d20 804df06b 80010100 00008002 00008002 win32k!NtUserCreateWindowEx (FPO: [Non-Fpo])
    12. 01 f8093d20 7c90eb94 80010100 00008002 00008002 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f8093d64)
    13. 02 0012f9ac 77d517eb 77d517b1 80010100 00008002 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
    14. 03 0012fe50 77d557f8 80010100 00008002 0012feb4 user32!NtUserCreateWindowEx+0xc
    15. 04 0012ff28 77d56877 00400000 00008002 00000000 user32!InternalCreateDialog+0x5bc (FPO: [Non-Fpo])
    16. 05 0012ff5c 77d568cc 00400000 00404060 00000000 user32!InternalDialogBox+0xa9 (FPO: [Non-Fpo])
    17. 06 0012ff7c 77d5892d 00400000 00404060 00000000 user32!DialogBoxIndirectParamAorW+0x37 (FPO: [Non-Fpo])
    18. 07 0012ffa8 00401027 00400000 00000065 00000000 user32!DialogBoxParamA+0x4c (FPO: [Non-Fpo])
    19. WARNING: Stack unwind information not available. Following frames may be wrong.
    20. 08 0012fff0 00000000 00401000 00000000 78746341 Windows_Test+0x1027
    21. kd> dps 00008002
    22. 00008002  ????????
    23. 00008006  ????????
    24. 0000800a  ????????
    25. 0000800e  ????????
    26. 00008012  ????????
    Или я чего то недопонимаю...?
     
  2. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    msdn->CreateWindowEx, или под отладчик её.
     
  3. Lord_De_Seis

    Lord_De_Seis New Member

    Blog Posts:
    0
    Joined:
    Aug 18, 2005
    Messages:
    55
    Параметры CreateWindowEx мне хорошо известны. И они разумеется не такие.
    Code (Text):
    1. HWND CreateWindowEx(
    2.  
    3.     DWORD dwExStyle,    // extended window style
    4.     LPCTSTR lpClassName,    // pointer to registered class name
    5.     LPCTSTR lpWindowName,   // pointer to window name
    6.     DWORD dwStyle,  // window style
    7.     int x,  // horizontal position of window
    8.     int y,  // vertical position of window
    9.     int nWidth, // window width
    10.     int nHeight,    // window height
    11.     HWND hWndParent,    // handle to parent or owner window
    12.     HMENU hMenu,    // handle to menu, or child-window identifier
    13.     HINSTANCE hInstance,    // handle to application instance
    14.     LPVOID lpParam  // pointer to window-creation data
    15.    );
    Если ты заметил то она уже под отладчиком, но тратить день и разгадывать ребусы от microsoft, мне как бы не очень хочется.
     
  4. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Code (Text):
    1. W32KAPI
    2. HWND
    3. NtUserCreateWindowEx(
    4.     IN DWORD dwExStyle, // extended window style
    5.     IN PLARGE_STRING pstrClassName,// pointer to registered class name
    6.     IN PLARGE_STRING pstrWindowName OPTIONAL,   // pointer to window name
    7.     IN DWORD dwStyle,   // window style
    8.     IN int x,   // horizontal position of window
    9.     IN int y,   // vertical position of window
    10.     IN int nWidth,  // window width
    11.     IN int nHeight, // window height
    12.     IN HWND hwndParent, // handle to parent or owner window
    13.     IN HMENU hmenu, // handle to menu, or child-window identifier
    14.     IN HANDLE hModule,  // handle to application instance
    15.     IN LPVOID pParam,   // pointer to window-creation data
    16.     IN DWORD dwFlags);  // хз
    И без отлабчика можно понять.
     
  5. Lord_De_Seis

    Lord_De_Seis New Member

    Blog Posts:
    0
    Joined:
    Aug 18, 2005
    Messages:
    55
    Я прошу прощения, но ты читал первый пост вообще? Перечитай ещё раз. Второй параметр не указатель. Этот прототип устарел.
     
  6. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Посмотрел отладчиком: второй параметр IN PLARGE_STRING pstrClassName,// pointer to registered class name
    Версия 5.1.2600.2180.
     
  7. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Не нашёл описания этой структуры; сделал сам:
    LARGE_STRING struct
    _Length ULONG ?
    MaximumLength ULONG ?
    Buffer PWSTR ?
    LARGE_STRING ends
    PLARGE_STRING typedef ptr LARGE_STRING
     
  8. Lord_De_Seis

    Lord_De_Seis New Member

    Blog Posts:
    0
    Joined:
    Aug 18, 2005
    Messages:
    55
    Вопервых:
    Code (Text):
    1. typedef struct _LARGE_STRING {
    2.     ULONG Length;
    3.     ULONG MaximumLength : 31;
    4.     ULONG bAnsi : 1;
    5.     KERNEL_PVOID Buffer;
    6. } LARGE_STRING, *PLARGE_STRING;
    Вовторых: в случае когда вызывается функция типа DialogBoxParam и тому подобные, туда не обязательно передаётся указатель, эта была загвоздка в моём случае.
    Втретьих: сейчас прототип выглядит не так, хотя бы потому что:
    Code (Text):
    1. user32!NtUserCreateWindowEx:
    2. 001b:77d517df b857110000      mov     eax,1157h
    3. 001b:77d517e4 ba0003fe7f      mov     edx,offset SharedUserData!SystemCallStub (7ffe0300)
    4. 001b:77d517e9 ff12            call    dword ptr [edx]
    5. 001b:77d517eb c23c00          ret     3Ch
    6. 001b:77d517ee 90              nop
    7. 001b:77d517ef 90              nop
    8. 001b:77d517f0 90              nop
    9. 001b:77d517f1 90              nop
    10. 001b:77d517f2 90              nop
    у неё 15 параметров, а не 13.
    Но видимо нормального прототипа действительно ни у кого нет, так что придётся искать самому.
     
  9. green

    green New Member

    Blog Posts:
    0
    Joined:
    Jul 15, 2003
    Messages:
    1,217
    Location:
    Ukraine
    Lord_De_Seis
    В CreateWindowEx второй параметр (pClassName) тоже декларируется как указатель, но, тем не менее, может быть атомом (ATOM).
     
  10. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв

    Lord_De_Seis

    Во первых мне было пох на число параметров, я смотрел тока второй.
    Во вторых, когда второй параметр наконецто стал указателем, есть вообщето опциональные параметры.
    А вообще, чтобы узнать параметры сервиса, вызываемого из режима пользователя, надо применять ядерный отладчик !? :lol:
     
  11. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    второй параметр не всегда указатель, А может быть и числом - АТОМом, как уже сказали.
     
  12. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    А у меня проблема с третим параметром..

    Хочу, чтобы окно игры создавалась без caption'a.
    Kerberos'ом прошелся, выдало:
    Code (Text):
    1. CreateWindowExA(00000000, 01E7D5C0: "Valve001", 0012F9AC: "Counter-Strike", 84CA0000, 00000000, 00000000, 00000400, 00000300, 00000000, 00000000) returns: 000C0112
    Хукаю NtUserCreateWindowEx:

    Code (Text):
    1.      .if eax == 1157h ;NtUserCreateWindowEx
    2.         mov eax,SERVICE_CALLSTACK.Param2[esi]
    3.         mov ecx,[eax+8]
    4.  
    5.         .if byte ptr [ecx+0] == 'V' &&\ ;Valve001
    6.             byte ptr [ecx+2] == 'a' &&\
    7.             byte ptr [ecx+4] == 'l' &&\
    8.             byte ptr [ecx+14] == '1'
    9.  
    10. ; до сюда мы доходим, я проверял..
    11.  
    12.             mov eax,SERVICE_CALLSTACK.Param3[esi]
    13.             mov ecx,[eax+8]
    14.  
    15. ; тут у нас почему-то тоже название класса, вместо "Counter-Strike"
    16.  
    17.  
    18.         .endif
    19.       .endif
    Спрошивается, что за нафиг ? :)
     
  13. 4VR

    4VR New Member

    Blog Posts:
    0
    Joined:
    Nov 21, 2008
    Messages:
    25
    думать. ещё раз думать.