Нужен псевдокод Win32k!HMValidateHandle

Тема в разделе "WASM.NT.KERNEL", создана пользователем Clerk, 23 июн 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В wrk нету, хотябы имена переменных узнать. Может есть у кого.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в сорцах Win2k и winnt есть.
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Код (Text):
    1. PVOID FASTCALL HMValidateHandle(
    2.     HANDLE h,
    3.     BYTE bType)
    4. {
    5.     DWORD       dwError;
    6.     KERNEL_PVOID pobj = NULL;
    7.     PCLIENTINFO pci;
    8.  
    9.     GET_CURRENT_CLIENTINFO();
    10.  
    11. #if DBG != 0 && !defined(_USERK_)
    12.     /*
    13.      * We don't want 32 bit apps passing 16 bit handles
    14.      *  we should consider failing this before we get
    15.      *  stuck supporting it (Some VB apps do this).
    16.      */
    17.     if (pci && (h != NULL)
    18.            && (HMUniqFromHandle(h) == 0)
    19.            && !(pci->dwTIFlags & TIF_16BIT)) {
    20.         RIPMSG3(RIP_WARNING, "HMValidateHandle: 32bit process [%d] using 16 bit handle [%#p] bType:%#lx",
    21.                 HandleToUlong(NtCurrentTeb()->ClientId.UniqueProcess), h, (DWORD)bType);
    22.     }
    23. #endif
    24.  
    25.     /*
    26.      * Object can't be located in shared memory.
    27.      */
    28.     UserAssert(bType != TYPE_MONITOR);
    29.  
    30.     /*
    31.      * Validation macro. Falls through if the handle is invalid.
    32.      */
    33.     ValidateHandleMacro(pci, pobj, h, bType);
    34.  
    35.     /*
    36.      * check for secure process
    37.      */
    38.     CHECK_RESTRICTED();
    39.  
    40.     if (pobj != NULL) {
    41.         return pobj;
    42.     }
    43.  
    44.     switch (bType) {
    45.  
    46.     case TYPE_WINDOW:
    47.         dwError = ERROR_INVALID_WINDOW_HANDLE;
    48.         break;
    49.  
    50.     case TYPE_MENU:
    51.         dwError = ERROR_INVALID_MENU_HANDLE;
    52.         break;
    53.  
    54.     case TYPE_CURSOR:
    55.         dwError = ERROR_INVALID_CURSOR_HANDLE;
    56.         break;
    57.  
    58.     case TYPE_ACCELTABLE:
    59.         dwError = ERROR_INVALID_ACCEL_HANDLE;
    60.         break;
    61.  
    62.     case TYPE_HOOK:
    63.         dwError = ERROR_INVALID_HOOK_HANDLE;
    64.         break;
    65.  
    66.     case TYPE_SETWINDOWPOS:
    67.         dwError = ERROR_INVALID_DWP_HANDLE;
    68.         break;
    69.  
    70.     default:
    71.         dwError = ERROR_INVALID_HANDLE;
    72.         break;
    73.     }
    74.  
    75.     RIPERR2(dwError,
    76.             RIP_WARNING,
    77.             "HMValidateHandle: Invalid:%#p Type:%#lx",
    78.             h, (DWORD)bType);
    79.  
    80.     /*
    81.      * If we get here, it's an error.
    82.      */
    83.     return NULL;
    84. }
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В wrk этого нету. "Под ним ниче нету, совсем ниче нету!!" (С) :)
     
  5. Clerk

    Clerk Забанен

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

    Clerk Забанен

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Все что у меня есть сорсы обрыл, нету.
    Хотелось узнать имена двух переменных - [1B8558] и [1B8444]
    Кусок кода:
    Код (Text):
    1. ;000411D8
    2. HMValidateHandle:
    3.     mov edi,edi
    4.     push ebx
    5.     push esi
    6.     push edi
    7.     mov bl,dl
    8.     mov esi,ecx
    9.     xor edi,edi
    10.     invoke PsGetCurrentThread
    11.     invoke PsGetThreadWin32Thread, eax
    12.     mov ecx,dword ptr ds:[1B8558]
    13.     mov edx,dword ptr ds:[ecx+8]
    14.     mov eax,esi
    15.     and eax,0FFFF
    16.     cmp eax,edx
    17.     jnb short 00041229
    18.     lea edx,dword ptr ds:[eax+eax*2]
    19.     mov eax,dword ptr ds:[1B8444]
    20.     lea ecx,dword ptr ds:[eax+edx*4]
    21.     mov eax,esi
    22.     shr eax,10
    23.     cmp ax,word ptr ds:[ecx+A]
    24.     jnz short 00041263
    25. 0004121A:
    26.     test byte ptr ds:[ecx+9],1
    27.     jnz short 00041229
    28.     mov al,byte ptr ds:[ecx+8]
    29.     cmp al,bl
    30.     jnz short 000411C8
    31. 00041227:
    32.     mov edi,dword ptr ds:[ecx]
    33. 00041229:
    34.     call dword ptr ds:[<&ntoskrnl.PsGetCurrentThread>]         ;  ntoskrnl.PsGetCurrentThread
    35.     push eax
    36.     call dword ptr ds:[<&ntoskrnl.PsGetThreadWin32Thread>]     ;  ntoskrnl.PsGetThreadWin32Thread
    37.     test dword ptr ds:[eax+48],20000000
    38.     jnz 00041145
    39. 00041243:
    40.     push 1
    41.     push esi
    42.     call 000116ED
    43.     test eax,eax
    44.     jnz 00010410
    45. 00041253:
    46.     movzx eax,bl
    47.     dec eax                                                    ;  Switch (cases 1..8)
    48.     cmp eax,7
    49.     ja short 00041290
    50.     jmp dword ptr ds:[eax*4+41270]
    51. 00041263:
    52.     test ax,ax
    53.     je short 0004121A
    54.     cmp ax,0FFFF
    55.     jnz short 00041229
    56.     jmp short 0004121A
    57. 00041270:
    58.     dd win32k_.00041162                                        ;  Switch table used at 0004125C
    59.     dd win32k_.00041173
    60.     dd win32k_.00041184
    61.     dd win32k_.000411B7
    62.     dd win32k_.000411A6
    63.     dd win32k_.00041290
    64.     dd win32k_.00041290
    65.     dd win32k_.00041195
    66. 00041290:
    67.     mov eax,6                                                  ;  Default case of switch 00041256
    68.     push eax
    69.     call 0001377D
    70.     pop edi
    71.     pop esi
    72.     xor eax,eax
    73.     pop ebx
    74.     ret
    75. 000412A1:
    76.     test edx,edx
    77.     mov dword ptr ds:[edi+4],ecx
    78.     je short 000412F0
    79.     mov eax,dword ptr ds:[eax]
    80.     mov dword ptr ds:[edx],eax
    81.     jmp short 000412F0
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Сорц тебе кинули верный просто макросы не развернуты.

    Код (Text):
    1. #define ValidateHandleMacro(pci, pobj, h, bType) \
    2.     StartValidateHandleMacro(h) \
    3.     BeginAliveValidateHandleMacro()  \
    4.     BeginTypeValidateHandleMacro(pobj, bType) \
    5.     DESKTOPVALIDATE(pci, pobj) \
    6.     EndTypeValidateHandleMacro \
    7.     EndAliveValidateHandleMacro()  \
    8.     EndValidateHandleMacro
    9.  
    10. #define StartValidateHandleMacro(h)                                         \
    11. {                                                                           \
    12.     PHE phe;                                                                \
    13.     DWORD dw;                                                               \
    14.     WORD uniq;                                                              \
    15.                                                                             \
    16.     /*                                                                      \
    17.      * This is a macro that does an AND with HMINDEXBITS,                   \
    18.      * so it is fast.                                                       \
    19.      */                                                                     \
    20.     dw = HMIndexFromHandle(h);                                              \
    21.                                                                             \
    22.     /*                                                                      \
    23.      * Make sure it is part of our handle table.                            \
    24.      */                                                                     \
    25.     if (dw < gpsi->cHandleEntries) {                                        \
    26.         /*                                                                  \
    27.          * Make sure it is the handle                                       \
    28.          * the app thought it was, by                                       \
    29.          * checking the uniq bits in                                        \
    30.          * the handle against the uniq                                      \
    31.          * bits in the handle entry.                                        \
    32.          */                                                                 \
    33.         phe = &gSharedInfo.aheList[dw];                                     \
    34.         uniq = HMUniqFromHandle(h);                                         \
    35.         if (   uniq == phe->wUniq                                           \
    36.             || uniq == 0                                                    \
    37.             || uniq == HMUNIQBITS                                           \
    38.             ) {
    1B8558 - gpsi (PSERVERINFO)
    1B8444 - gSharedInfo+0x4 (SHAREDINFO)
     
  9. Clerk

    Clerk Забанен

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