Узнать PID по хэндлу: не все так просто

Тема в разделе "WASM.WIN32", создана пользователем Twister, 21 авг 2007.

  1. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Twister

    Перечислить хэндлы через NtQuerySystemInformation. В SYSTEM_HANDLE_INFORMATION есть ProcessId поле.
     
  2. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Songoku
    ок, сорри

    Great
    ок
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Блин, и чего сам не додумался поэксперементировать с DuplicateHandle... :dntknw:

    Всем огромное спасибо, все заработало:
    Код (Text):
    1. GetProcId PROC hHandle: DWORD
    2.     local pbi: PROCESS_BASIC_INFORMATION
    3.     local hDuplicated: DWORD
    4.     local result: DWORD
    5.    
    6.     pushad
    7.     xor eax, eax
    8.     mov result, eax
    9.     call    GetCurrentProcess
    10.     mov ebx, eax
    11.     invoke  DuplicateHandle, ebx, hHandle, ebx, addr hDuplicated, PROCESS_QUERY_INFORMATION, 0, 0
    12.     .if (eax)
    13.         invoke  NtQueryInformationProcess, hDuplicated, 0, addr pbi, SizeOf(PROCESS_BASIC_INFORMATION), NULL
    14.         .if (eax == 0)
    15.             push    pbi.UniqueProcessId
    16.             pop result
    17.         .endif
    18.         invoke  CloseHandle, hDuplicated
    19.         jmp _ret
    20.     .endif
    21.   _ret:
    22.     popad
    23.     mov eax, result
    24.     ret
    25. GetProcId ENDP