Сабж получаю на выходе : все индетификаторы процессов - верные количество потоков в процессах - верное ->Threads.ClientID.UniqueThread выдает бред может кто сталкивался с таким? подскажите плиз з.ы.: выравнивание структуры - верное само описание структуры потока - верное
UTeX Да, код бы не помешало. Если код правильный и бред, значит кто-то хучит эти сложные магические функции внитри бинарных модулей. Хучанье не правильное, поэтому и бред. Проверьтесь на вирусы.
tylerdurden да мы с ним проверяли вроде, точнее я ему свою скидывал, говорит что у него такая же... и выравнивание тоже вырубал он
Great Эх Грейт - проверял я проверял но все таки неверна была структура у меня - все также как и у тебя было - но у меня поля были спутаны я только через день заметил Проблема уже конечно решена tylerdurden Что тут сказать невнимательность меня погубит нехватает опыта и к тому же нет ни одного нормального хидера с недокументированными структурами и прототипами - самое нормальное что встретилось - это то что мне Грейт скидывал - ntifs.h - нормально но все таки иногда встречаются недокументированные прототипы Может еще что-то подобное есть? Напишите кто чем пользуется?
Никаких проблем! Код (Text): QuerySystemInformation proc uses ebx edi SystemInformationClass:ULONG, SystemInformationLength:ULONG, SystemInformationReturned:PVOID, LengthReturned:PULONG Local PtrSystemInformation:PVOID, SystemInformationLengthReturned:ULONG _setseh_ xor eax,eax mov ebx,SystemInformationLength .if Ebx == Eax or ebx,10000h .endif loop_: cmp ebx,2000000h jnc err_size_ mov SystemInformationLength,ebx xor eax,eax mov PtrSystemInformation,eax invoke ZwAllocateVirtualMemory,NT_CURRENT_PROCESS,addr PtrSystemInformation,NULL,addr SystemInformationLength,MEM_COMMIT,PAGE_EXECUTE_READWRITE test eax,eax jnz exit_ _subsetseh_ invoke ZwQuerySystemInformation, SystemInformationClass, PtrSystemInformation, SystemInformationLength, addr SystemInformationLengthReturned test eax,eax jl err_query_ mov ecx,PtrSystemInformation mov ebx,SystemInformationReturned mov dword ptr [ebx],ecx mov ecx,SystemInformationLengthReturned mov ebx,LengthReturned .if Ebx mov dword ptr [ebx],ecx .endif err_query_: _subendseh_ test eax,eax jnl exit_ push eax invoke ZwFreeVirtualMemory,NT_CURRENT_PROCESS, addr PtrSystemInformation, addr SystemInformationLength, MEM_RELEASE pop eax cmp eax,STATUS_INFO_LENGTH_MISMATCH jnz exit_ shl ebx,1 jmp loop_ exit_: _endseh_ ret err_size_: mov eax,STATUS_INVALID_PARAMETER jmp exit_ QuerySystemInformation endp EnumerateThreads proto ProcessId:HANDLE, ResultThreads:PULONG, ResultStatus:PNTSTATUS, CallBack:PVOID, Parameter1:ULONG, Parameter2:ULONG comment ' Перечисляет все потоки в процессе, вызывая процедуру обратного вызова. EnumerateThreads( IN HANDLE ProcessId OPTIONAL, OUT PULONG ResultThreads OPTIONAL, OUT PNTSTATUS Status OPTIONAL, IN PVOID CallBack, IN ULONG Parameter1, IN ULONG Parameter2):NTSTATUS Return STATUS_THREAD_NOT_IN_PROCESS... CallBack proto ThreadInformation:PSYSTEM_THREADS, Parameter1:ULONG, Parameter2:ULONG, ExitFlag:PBOOLEAN CallBack( IN PSYSTEM_THREADS ThreadInformation, IN ULONG Parameter1, IN ULONG Parameter2, OUT ExitFlag:PBOOLEAN):BOOLEAN Процедура обратного вызова возвращает ноль для продолжения перечисления, или код ошибки для окончания перечисления, или установить флаг возврата ExitFlag в не ноль.' EnumerateThreads proc uses esi edi ebx ProcessId:HANDLE, ResultThreads:PULONG, ResultStatus:PNTSTATUS, CallBack:PVOID, Parameter1:ULONG, Parameter2:ULONG Local BufferSize:ULONG, Buffer:PVOID, Result:ULONG, ReturnLength:ULONG, ExitFlag:BOOLEAN Local ThreadInformation:THREAD_BASIC_INFORMATION _setseh_ xor eax,eax mov ExitFlag,eax mov edi,ProcessId .if !Edi invoke ZwQueryInformationThread, NtCurrentThread, THREAD_BASIC_INFORMATION, addr ThreadInformation, SizeOf THREAD_BASIC_INFORMATION, edi test eax,eax jnz exit_ mov edi,ThreadInformation.ClientId.UniqueProcess .endif _subsetseh_ xor ecx,ecx invoke QuerySystemInformation,SystemProcessesAndThreadsInformation,ecx,addr Buffer,addr ReturnLength test eax,eax jnz err_query_ mov eax,Buffer add ReturnLength,eax mov esi,Buffer assume esi:PSYSTEM_PROCESSES xor ecx,ecx mov eax,STATUS_INVALID_HANDLE find_pid_: cmp [esi].ProcessId,edi jz pid_find_ cmp [esi].NextEntryDelta,ecx jz err_query_ add esi,[esi].NextEntryDelta cmp ReturnLength,esi jnc find_pid_ mov eax,STATUS_INTERNAL_ERROR jmp err_query_ pid_find_: mov edi,[esi].ThreadCount mov eax,ResultThreads .if Eax mov dword ptr [eax],edi .endif mov eax,STATUS_THREAD_NOT_IN_PROCESS test edi,edi jz err_query_ lea esi,[esi].Threads assume esi:PSYSTEM_THREADS loop_: push esi push edi lea eax,ExitFlag push eax push Parameter2 push Parameter1 push esi Call CallBack pop edi pop esi test eax,eax jnz exit_success_ cmp ExitFlag,eax .if Zero? next_thread_: add esi,SizeOf SYSTEM_THREADS dec edi jnz loop_ .endif exit_success_: mov edx,ResultStatus .if Edx mov dword ptr [edx],eax .endif xor eax,eax err_query_: _subendseh_ xor ecx,ecx push eax mov ReturnLength,ecx invoke ZwFreeVirtualMemory, NtCurrentProcess, addr Buffer, addr ReturnLength, MEM_RELEASE pop eax exit_: _endseh_ ret EnumerateThreads endp