Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Список потоков (вернее их ID) под NT?  (Прочитано 4641 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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;", но в этой структуре два каких-то ХЭНДЛА...

Вопрос: ГДЕ ВЗЯТЬ УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР ПОТОКА???
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 06-08-2004 11:24 » 

Идентификатор потока объвлен как HANDLE, так исторически сложилось. В CLIENT_ID  идентификатор процесса и потока.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines