Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.13;
Скачать: CL | DM;

Вниз

Как получить идентификаторы потоков одного процесса под NT ?   Найти похожие ветки 

 
zhmax ©   (2002-04-08 14:43) [0]

Как получить идентификаторы потоков одного процесса под NT ?
По моему мнению, PSAPI не способна это сделать. Тогда как ?
Ведь под W95,98 это сделать можно.
Посоветуйте.


 
zhmax ©   (2002-04-08 16:15) [1]

неужели никто не знает ?


 
zhmax ©   (2002-04-09 08:42) [2]

ну подскажите, плииз.


 
Fellomena   (2002-04-09 10:34) [3]

Тебе под Win2k или XP надо ? Или под NT4 ?


 
zhmax ©   (2002-04-09 13:56) [4]

и так, и так и эдак. приму все варианты, так сказать.
Но больше ориентируюсь под NT4.0 и W2000.
Если можно, подробнее ...


 
troits ©   (2002-04-09 14:36) [5]

Под 2000 работают ToolHelp - ф-ции.


 
zhmax ©   (2002-04-09 14:56) [6]

Проверял, работают процессы, модули, кучи. Потоки - нет !
Что делать ?


 
troits ©   (2002-04-09 15:07) [7]

Вот код - у меня под Win2k все работает

var
Hndl: THandle;
THREADENTRY32: tagTHREADENTRY32;
begin
THREADENTRY32.dwSize := SizeOf(tagTHREADENTRY32);
Hndl := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Thread32First(Hndl, THREADENTRY32);
Writeln("ProcessID: ", THREADENTRY32.th32OwnerProcessID, " ThreadID: ", THREADENTRY32.th32ThreadID);
while Thread32Next(Hndl, THREADENTRY32) do
Writeln("ProcessID: ", THREADENTRY32.th32OwnerProcessID, " ThreadID: ", THREADENTRY32.th32ThreadID);
readln
end;


 
zhmax ©   (2002-04-09 15:10) [8]

Уже проверил, действительно работает.
Приношу свои извинения.
Но как быть с XP или NT4_0 ??????


 
troits ©   (2002-04-09 15:25) [9]

Для XP должен работать ToolHelp
Для NT посмотри статью , где рассматривается ф-я ZwQuerySystemInformation

http://www.rsdn.ru/qna/?baseserv/enumproc.xml


 
Fellomena   (2002-04-09 15:29) [10]

Для NT и WIN2k:

NTSTATUS NtQuerySystemInformation (
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
OUT PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength OPTIONAL);

где SystemInformationClass – код запроса, SystemInformation -указатель на
буфер для данных, SystemInformationLength – размер буфера, ReturnLength –
размер записанных в буфер данных. Если выделенный буфер мал, то в
параметре ReturnLength функция возвратит необходимый размер буфера.

Так выглядит структура информации для процессов. В
конце блока информации о процессе идет информация о потоках процесса.


typedef struct _SYSTEM_INFORMATION_CLASS {

ULONG NextEntryOffset;

ULONG NumberOfThreads;

LARGE_INTEGER SpareLi1;

LARGE_INTEGER SpareLi2;

LARGE_INTEGER SpareLi3;

LARGE_INTEGER CreateTime;

LARGE_INTEGER UserTime;

LARGE_INTEGER KernelTime;

UNICODE_STRING ImageName;

KPRIORITY BasePriority;

HANDLE UniqueProcessId;

HANDLE InheritedFromUniqueProcessId;

ULONG HandleCount;

ULONG SpareUl2;

ULONG SpareUl3;

ULONG PeakVirtualSize;

ULONG VirtualSize;

ULONG PageFaultCount;

ULONG PeakWorkingSetSize;

ULONG WorkingSetSize;

ULONG QuotaPeakPagedPoolUsage;

ULONG QuotaPagedPoolUsage;

ULONG QuotaPeakNonPagedPoolUsage;

ULONG QuotaNonPagedPoolUsage;

ULONG PagefileUsage;

ULONG PeakPagefileUsage;

ULONG PrivatePageCount;

SYSTEM_THREAD_INFORMATION TH[1];


} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;

Структура буфера, содержащего информацию о модулях такова:

typedef struct _DEBUGMODULEINFO
{
DWORD ImageBase; адрес загрузки модуля в память
DWORD ImageSize; размер файла модуля
DWORD unknown1;
USHORT DllSequenceNum; если равен 0, то это EXE-файл
USHORT NumDlls; порядковый номер модуля
DWORD GrantedAccess; допуск на доступ
CHAR Name[_MAX_PATH]; имя модуля
DWORD unknown;
}
DEBUGMODULEINFO,PDEBUGMODULEINFO;


 
zhmax ©   (2002-04-09 15:40) [11]

Спасибо большое ! я очень рад, что есть еще люди, делящиеся своими знаниями бесплатно и от души ...
спасибо !


 
Fellomena   (2002-04-09 15:46) [12]

Кстати, не советовала бы использовать под Win2000 и XP ToolHelp - у меня возникали некоторые "глюки" при попытках получения имён модулей, загруженных данным процессом.
Возможно это как-то связанно с правами доступа,... хотя не думаю, т.к. запускала из под root-а.
Ну это так... на всякий случай...


 
Виктор Щербаков ©   (2002-04-09 16:58) [13]

.
> у меня возникали некоторые "глюки" при попытках получения
> имён модулей,

А какие именно глюки???

Насчет модулей, не знаю, а вот имена exe-шника в Win2k, полученные с помощью Process32First/Process32Next не содержат путей к ним. И права доступа на это никак не влияют.


 
Fellomena   (2002-04-11 12:14) [14]

2 Виктор Щербаков © (09.04.02 16:58):
В Win2000 при определении некоторых имён модулей, загруженных выбранным процессом выводились "левые" символы, а не имена файлов.
Это имело место для некоторых процессов - не для всех.
И с путём та же история, что у тебя.



Страницы: 1 вся ветка

Текущий архив: 2002.06.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
1-40101
HitMan
2002-06-03 10:17
2002.06.13
Таблицы


1-40079
Shrek
2002-06-02 19:36
2002.06.13
Печать в Дельфи


4-40197
Thalasso
2002-04-10 10:26
2002.06.13
Hooks in Win32


14-40176
nick_vstu
2002-05-11 20:42
2002.06.13
Соединение двух компов через модэмы без телефонной линии.


14-40164
Cobalt
2002-05-07 07:10
2002.06.13
Поправки в уголовный кодекс