user32!NtUserCreateWindowEx

Тема в разделе "WASM.WIN32", создана пользователем Lord_De_Seis, 29 апр 2008.

  1. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Дайте прототип, плиз. Что то никак не пойму, где там какой параметр. В исходниках 2к прототип (для win32k.sys) такой:
    Код (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
    Код (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
    Код (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 Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    msdn->CreateWindowEx, или под отладчик её.
     
  3. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Параметры CreateWindowEx мне хорошо известны. И они разумеется не такие.
    Код (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 Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (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

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Посмотрел отладчиком: второй параметр IN PLARGE_STRING pstrClassName,// pointer to registered class name
    Версия 5.1.2600.2180.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Не нашёл описания этой структуры; сделал сам:
    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

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Вопервых:
    Код (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 и тому подобные, туда не обязательно передаётся указатель, эта была загвоздка в моём случае.
    Втретьих: сейчас прототип выглядит не так, хотя бы потому что:
    Код (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

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Lord_De_Seis
    В CreateWindowEx второй параметр (pClassName) тоже декларируется как указатель, но, тем не менее, может быть атомом (ATOM).
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв

    Lord_De_Seis

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    второй параметр не всегда указатель, А может быть и числом - АТОМом, как уже сказали.
     
  12. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    А у меня проблема с третим параметром..

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

    Код (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

    Публикаций:
    0
    Регистрация:
    21 ноя 2008
    Сообщения:
    25
    думать. ещё раз думать.