Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
8-40123
WASYA
2002-01-21 09:03
2002.06.13
BMP->JPG


4-40199
kvcomp
2002-03-05 16:25
2002.06.13
Как сгенерировать нажатие клавиши?


3-39943
kserg@ukr.net
2002-05-13 19:31
2002.06.13
Вопрос по выборке с датами MSSQL


3-39970
BoBka
2002-05-22 06:44
2002.06.13
DBGrid1.Options???


1-40104
Jony
2002-05-31 17:49
2002.06.13
Смена иконки формы в Run-Time





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский