ZwQueryInformationThread и STATUS_INFO_LENGTH_MISMATCH

Тема в разделе "WASM.WIN32", создана пользователем XshStasX, 10 авг 2011.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Что - то плохо соображаю помогите разобраться, ZwQueryInformationThread все время возвращает STATUS_INFO_LENGTH_MISMATCH ( и это при размере буфера в 1мб...) ..

    Код (Text):
    1.    
    2.     for (DWORD i = 0; i<MAX_COUNT_THREAD; ++i)
    3.     if ( Threads[i] ) // Threads массив id для потоков
    4.     {
    5.         PTEB        pTeb;
    6.         HANDLE      htmp;
    7.         ULONG       size;
    8.         NTSTATUS    nt;
    9.         if ( ! (htmp = OpenThread(THREAD_QUERY_INFORMATION | THREAD_SUSPEND_RESUME,FALSE,Threads[i]))  )
    10.             continue;
    11.  
    12.         size = 1024*1024;
    13.         pTeb = (PTEB)MemAlloc(size);
    14.         if ( NT_SUCCESS(ZwQueryInformationThread(htmp,ThreadBasicInformation,pTeb,size,&size)) )
    15.         {
    16.             PCHAR StackBase =(PCHAR) pTeb->Tib.StackBase;
    17.             PCHAR StackLimit=(PCHAR) pTeb->Tib.StackLimit;
    18.        
    19.  
    20.         };
    21.  
    22.         if (pTeb)
    23.             MemFree(pTeb);
    24.  
    25.         CloseHandle(htmp);
    26.     };
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Наверное, ZwQueryInformationThread хочет чтобы размер буфера точно соответствовал типу затребованной информации.
    Либо укажи sizeof(THREAD_BASIC_INFORMATION), либо вызывай два раза, первый - для определения размера буфера, второй - для получения информации.
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991