ThreadBasicInformation, получить handle процесса по потоку

Тема в разделе "WASM.NT.KERNEL", создана пользователем n2, 16 сен 2011.

  1. n2

    n2 New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2011
    Сообщения:
    26
    Нужно получить ИД(или хендл) процесса-хозяина по хендлу его потока. Пробую делать так:
    Код (Text):
    1. NTSTATUS NewNtTerminateThread (
    2. IN HANDLE ThreadHandle,
    3. IN NTSTATUS ExitStatus )
    4.  {
    5. THREAD_BASIC_INFORMATION threadbuff;
    6. NtQueryInformationThread(ThreadHandle,0,&threadbuff,sizeof(THREAD_BASIC_INFORMATION),0);
    7. };
    Подскажите, какие структуры и функции я должен объявить в коде, дабы сиё работало и заполнило мне мою threadbuff. Спасибо.
    К примеру, NTSTATUS NtQueryInformationThread(
    __in HANDLE ThreadHandle,
    __in THREADINFOCLASS ThreadInformationClass,
    __inout PVOID ThreadInformation,
    __in ULONG ThreadInformationLength,
    __out_opt PULONG ReturnLength
    );

    А что ещё?
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    n2
    Код (Text):
    1. typedef struct _THREAD_BASIC_INFORMATION {
    2.   NTSTATUS                ExitStatus;
    3.   PVOID                   TebBaseAddress;
    4.   CLIENT_ID               ClientId;
    5.   KAFFINITY               AffinityMask;
    6.   KPRIORITY               Priority;
    7.   KPRIORITY               BasePriority;
    8. } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
    Вас в гугле забанили ?
    Остальные структуры сами найдете.
     
  3. n2

    n2 New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2011
    Сообщения:
    26
    Спасибо, получается. Теперь проблема в другом.
    Делаю так:
    Код (Text):
    1. NTSTATUS NewNtTerminateThread (
    2. IN HANDLE ThreadHandle,
    3. IN NTSTATUS ExitStatus ) {
    4. HANDLE ProcessId;
    5. THREAD_BASIC_INFORMATION threadbuff;
    6. NtQueryInformationThread(ThreadHandle,0,&threadbuff,sizeof(threadbuff),0);
    7.  DbgPrint("TryingNtTerminateThread with pid");
    8. ProcessId = threadbuff.ClientId.UniqueProcess;
    Как мне теперь сравнить ИД этого процесса с нужным мне? Как проверить, принадлежит ли завершаемый поток процессу с ИД ххх? Пробовал if (ProcessId==(HANDLE)176), результата нет. Как сравнить ид с каким-то числом?
     
  4. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    typedef struct _CLIENT_ID
    {
    PVOID UniqueProcess;
    PVOID UniqueThread;
    } CLIENT_ID, *PCLIENT_ID;
     
  5. n2

    n2 New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2011
    Сообщения:
    26
    ProfessorNimnull
    а подробнее можно? Как сравнить, если там указатель, а там структура?