Получение PID из Handle

Тема в разделе "WASM.WIN32", создана пользователем SPath, 14 окт 2005.

  1. SPath

    SPath New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    13
    извиняюсь если комуто вопрос покажется слишком простым но я чето ничего не нашел, кроме таких же соискателей.

    если поможете буду признателен.
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    В XP sp1 и выше есть GetProcessId



    А так - только перебором процессов наверно...



    Можно ещё использовать NtQueryInformationProcess
     
  3. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    SPath

    Используй ToolHelp и не трахай мозги, этот интерфейс универсален для обеих виндовых веток, хотя немного глючит в 2к, но это мелочи. Более универсального способа и конкретного посоветовать не могу, потому как он единственно документированный в psdk, в то время, как ХхQuerySystemInformation ни в psdk ни в ddk практически неупоминается.
     
  5. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Если имеющийся handle позволяет, можно внедрить в процесс код, вызывающий GetCurrentProcessId.

    :derisive:

    Или прямо прочитать PID из PEB процесса. Только опять таки надо версию виндовса учитывать.
     
  6. SPath

    SPath New Member

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

    спасибо всем за советы



    скорее всего прийдется ковырять через NtQuerySystemInformation

    поскольку toolhelp все равно его использует

    только будет без лишнего ну и полезней
     
  7. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Млин, народ, че вы мучаетесь? ZwQueryInformationProcess рулит.


    Код (Text):
    1. function GetProcessId(pHandle: dword): dword;
    2. var
    3.  Info: PROCESS_BASIC_INFORMATION;
    4.  status: NTSTATUS;
    5. begin
    6.  Result := 0;
    7.  status := ZwQueryInformationProcess(pHandle, ProcessBasicInformation, @Info,SizeOf(Info), nil);
    8.  if NT_SUCCESS(status) then Result := Info.UniqueProcessId;
    9. end;