Форум: "WinAPI";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
ВнизКак получить идентификаторы потоков одного процесса под 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c