sasha_s
Гость
|
|
« : 03-08-2004 12:32 » |
|
Может не туда пишу, но кто знает подскажите...
Подсказали на одном из форумов:
"Ищи описалово NtQuerySystemInformation, с параметром SystemProcessesAndThreadsInformation."
Нашел следующее:
NtQuerySystemInformation имеет прототип
NTSTATUS NTAPI NtQuerySystemInformation( IN SYSTEMINFOCLASS SystemInformationClass, OUT PVOID pSystemInformation, IN ULONG uSystemInformationLength, OUT PULONG puReturnLength );
SystemInformationClass = SystemProcessesAndThreadsInformation (это 5, если кто не знает, описалово не везде есть) pSystemInformation = выходной буфер, который будет содержать структуры "SYSTEM_PROCESS_INFORMATION" uSystemInformationLength = размер подаваемого буфера puReturnLength = кол-во записанных байт в буфер
структуры:
typedef struct _CLIENT_ID { HANDLE UniqueProcess; HANDLE UniqueThread; } CLIENT_ID, *PCLIENT_ID;
typedef enum _KWAIT_REASON { Executive, FreePage, PageIn, PoolAllocation, DelayExecution, Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn, WrPoolAllocation, WrDelayExecution, WrSuspended, WrUserRequest, WrEventPair, WrQueue, WrLpcReceive, WrLpcReply, WrVirtualMemory, WrPageOut, WrRendezvous, Spare2, Spare3, Spare4, Spare5, Spare6, WrKernel, MaximumWaitReason } KWAIT_REASON, *PKWAIT_REASON;
typedef enum { StateInitialized, StateReady, StateRunning, StateStandby, StateTerminated, StateWait, StateTransition, StateUnknown } THREAD_STATE;
typedef LONG KPRIORITY;
typedef struct _SYSTEM_THREAD { LARGE_INTEGER liKernelTime; // 100 nsec units LARGE_INTEGER liUserTime; // 100 nsec units LARGE_INTEGER liCreateTime; // relative to 01-01-1601 ULONG WaitTime; // ticks PVOID pStartAddress; // EIP CLIENT_ID Cid; // process/thread ids KPRIORITY Priority; KPRIORITY BasePriority; ULONG ContextSwitches; THREAD_STATE ThreadState; KWAIT_REASON WaitReason; } SYSTEM_THREAD, *PSYSTEM_THREAD;
typedef struct _SYSTEM_PROCESS_INFORMATION { ULONG uNext; // relative offset ULONG uThreadCount; LARGE_INTEGER liUnknown1; LARGE_INTEGER liUnknown2; LARGE_INTEGER liUnknown3; LARGE_INTEGER liCreateTime; // relative to 01-01-1601 LARGE_INTEGER liUserTime; // 100 nsec units LARGE_INTEGER liKernelTime; // 100 nsec units UNICODE_STRING usName; KPRIORITY BasePriority; ULONG uUniqueProcessId; ULONG uInheritedFromUniqueProcessId; ULONG uHandleCount; ULONG uSessionId; // W2K Only! DWORD dwUnknown5; VM_COUNTERS VmCounters; ULONG uCommitCharge; // bytes SYSTEM_THREAD aST[]; } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
Меня интересует массив "SYSTEM_THREAD aST[];", а в структуре "SYSTEM_THREAD" отсутствует поле УНИКАЛЬНОГО ИДЕНТИФИКАТОРА ПОТОКА!!! Есть "CLIENT_ID Cid;", но в этой структуре два каких-то ХЭНДЛА...
Вопрос: ГДЕ ВЗЯТЬ УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР ПОТОКА???
|