Проблема с перечислением потоков :: ZwQuerySystemInformaton(..)

Тема в разделе "WASM.WIN32", создана пользователем UTeX, 8 дек 2007.

  1. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Сабж
    получаю на выходе :
    все индетификаторы процессов - верные
    количество потоков в процессах - верное

    ->Threads.ClientID.UniqueThread выдает бред

    может кто сталкивался с таким?
    подскажите плиз


    з.ы.:

    выравнивание структуры - верное
    само описание структуры потока - верное
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    код можно самим додумывать?
     
  3. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    UTeX
    Да, код бы не помешало. Если код правильный и бред, значит кто-то хучит эти сложные магические функции внитри бинарных модулей. Хучанье не правильное, поэтому и бред. Проверьтесь на вирусы.
     
  4. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Структуру плз покажи. 90% что неверна.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    tylerdurden
    да мы с ним проверяли вроде, точнее я ему свою скидывал, говорит что у него такая же... и выравнивание тоже вырубал он
     
  6. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Great
    Эх Грейт - проверял я проверял но все таки неверна была структура у меня - все также как и у тебя было - но у меня поля были спутаны я только через день заметил
    Проблема уже конечно решена

    tylerdurden
    Что тут сказать невнимательность меня погубит
    нехватает опыта и к тому же нет ни одного нормального хидера с недокументированными структурами и прототипами - самое нормальное что встретилось - это то что мне Грейт скидывал - ntifs.h - нормально но все таки иногда встречаются недокументированные прототипы

    Может еще что-то подобное есть?
    Напишите кто чем пользуется?
     
  7. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Попробуй хидеры в аттаче. + юзаю инклуды из пакета MASM
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Никаких проблем!
    Код (Text):
    1. QuerySystemInformation proc uses ebx edi SystemInformationClass:ULONG, SystemInformationLength:ULONG, SystemInformationReturned:PVOID, LengthReturned:PULONG
    2. Local PtrSystemInformation:PVOID, SystemInformationLengthReturned:ULONG
    3.     _setseh_
    4.     xor eax,eax
    5.     mov ebx,SystemInformationLength
    6.     .if Ebx == Eax
    7.     or ebx,10000h  
    8.     .endif
    9. loop_:
    10.     cmp ebx,2000000h
    11.     jnc err_size_
    12.     mov SystemInformationLength,ebx
    13.     xor eax,eax
    14.     mov PtrSystemInformation,eax
    15.     invoke ZwAllocateVirtualMemory,NT_CURRENT_PROCESS,addr PtrSystemInformation,NULL,addr SystemInformationLength,MEM_COMMIT,PAGE_EXECUTE_READWRITE
    16.     test eax,eax
    17.     jnz exit_
    18.     _subsetseh_
    19.     invoke ZwQuerySystemInformation, SystemInformationClass, PtrSystemInformation, SystemInformationLength, addr SystemInformationLengthReturned
    20.     test eax,eax
    21.     jl err_query_
    22.     mov ecx,PtrSystemInformation
    23.     mov ebx,SystemInformationReturned
    24.     mov dword ptr [ebx],ecx
    25.     mov ecx,SystemInformationLengthReturned
    26.     mov ebx,LengthReturned
    27.     .if Ebx
    28.     mov dword ptr [ebx],ecx
    29.     .endif
    30. err_query_:
    31.     _subendseh_
    32.     test eax,eax
    33.     jnl exit_
    34.     push eax
    35.     invoke ZwFreeVirtualMemory,NT_CURRENT_PROCESS, addr PtrSystemInformation, addr SystemInformationLength, MEM_RELEASE
    36.     pop eax
    37.     cmp eax,STATUS_INFO_LENGTH_MISMATCH
    38.     jnz exit_
    39.     shl ebx,1
    40.     jmp loop_
    41. exit_:
    42.     _endseh_
    43.     ret
    44. err_size_:
    45.     mov eax,STATUS_INVALID_PARAMETER
    46.     jmp exit_
    47. QuerySystemInformation endp
    48.  
    49. EnumerateThreads proto ProcessId:HANDLE, ResultThreads:PULONG, ResultStatus:PNTSTATUS, CallBack:PVOID, Parameter1:ULONG, Parameter2:ULONG
    50. comment '
    51. Перечисляет все потоки в процессе, вызывая процедуру обратного вызова.
    52. EnumerateThreads(
    53. IN HANDLE ProcessId OPTIONAL,
    54. OUT PULONG ResultThreads OPTIONAL,
    55. OUT PNTSTATUS Status OPTIONAL,
    56. IN PVOID CallBack,
    57. IN ULONG Parameter1,
    58. IN ULONG Parameter2):NTSTATUS
    59.  
    60. Return STATUS_THREAD_NOT_IN_PROCESS...
    61.  
    62. CallBack proto ThreadInformation:PSYSTEM_THREADS, Parameter1:ULONG, Parameter2:ULONG, ExitFlag:PBOOLEAN
    63. CallBack(
    64. IN PSYSTEM_THREADS ThreadInformation,
    65. IN ULONG Parameter1,
    66. IN ULONG Parameter2,
    67. OUT ExitFlag:PBOOLEAN):BOOLEAN
    68. Процедура обратного вызова возвращает ноль для продолжения перечисления, или код ошибки для окончания перечисления, или установить флаг возврата ExitFlag в не ноль.'
    69.  
    70. EnumerateThreads proc uses esi edi ebx ProcessId:HANDLE, ResultThreads:PULONG, ResultStatus:PNTSTATUS, CallBack:PVOID, Parameter1:ULONG, Parameter2:ULONG
    71. Local BufferSize:ULONG, Buffer:PVOID, Result:ULONG, ReturnLength:ULONG, ExitFlag:BOOLEAN
    72. Local ThreadInformation:THREAD_BASIC_INFORMATION
    73.     _setseh_
    74.     xor eax,eax
    75.     mov ExitFlag,eax
    76.     mov edi,ProcessId
    77.     .if !Edi
    78.     invoke ZwQueryInformationThread, NtCurrentThread, THREAD_BASIC_INFORMATION, addr ThreadInformation, SizeOf THREAD_BASIC_INFORMATION, edi
    79.     test eax,eax
    80.     jnz exit_
    81.     mov edi,ThreadInformation.ClientId.UniqueProcess
    82.     .endif
    83.     _subsetseh_
    84.     xor ecx,ecx
    85.     invoke QuerySystemInformation,SystemProcessesAndThreadsInformation,ecx,addr Buffer,addr ReturnLength
    86.     test eax,eax
    87.     jnz err_query_
    88.     mov eax,Buffer
    89.     add ReturnLength,eax
    90.     mov esi,Buffer
    91.     assume esi:PSYSTEM_PROCESSES
    92.     xor ecx,ecx
    93.     mov eax,STATUS_INVALID_HANDLE
    94. find_pid_:
    95.     cmp [esi].ProcessId,edi
    96.     jz pid_find_
    97.     cmp [esi].NextEntryDelta,ecx
    98.     jz err_query_
    99.     add esi,[esi].NextEntryDelta
    100.     cmp ReturnLength,esi
    101.     jnc find_pid_
    102.     mov eax,STATUS_INTERNAL_ERROR
    103.     jmp err_query_
    104. pid_find_: 
    105.     mov edi,[esi].ThreadCount
    106.     mov eax,ResultThreads
    107.     .if Eax
    108.     mov dword ptr [eax],edi
    109.     .endif
    110.     mov eax,STATUS_THREAD_NOT_IN_PROCESS
    111.     test edi,edi
    112.     jz err_query_
    113.     lea esi,[esi].Threads
    114.     assume esi:PSYSTEM_THREADS         
    115. loop_:
    116.     push esi
    117.     push edi
    118.     lea eax,ExitFlag
    119.     push eax   
    120.     push Parameter2
    121.     push Parameter1    
    122.     push esi
    123.     Call CallBack
    124.     pop edi
    125.     pop esi
    126.     test eax,eax
    127.     jnz exit_success_
    128.     cmp ExitFlag,eax
    129.     .if Zero?
    130. next_thread_:
    131.     add esi,SizeOf SYSTEM_THREADS
    132.     dec edi
    133.     jnz loop_
    134.     .endif
    135. exit_success_:
    136.     mov edx,ResultStatus
    137.     .if Edx
    138.     mov dword ptr [edx],eax
    139.     .endif
    140.     xor eax,eax
    141. err_query_:
    142.     _subendseh_
    143.     xor ecx,ecx
    144.     push eax
    145.     mov ReturnLength,ecx
    146.     invoke ZwFreeVirtualMemory, NtCurrentProcess, addr Buffer, addr ReturnLength, MEM_RELEASE  
    147.     pop eax
    148. exit_:
    149.     _endseh_
    150.     ret
    151. EnumerateThreads endp