как в NT перечислить потоки? в 2к: Thread32First...
От: SVV Беларусь  
Дата: 14.07.04 10:43
Оценка:
Привет всем,

есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?
Re: как в NT перечислить потоки? в 2к: Thread32First...
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 14.07.04 11:03
Оценка:
Здравствуйте, SVV, Вы писали:

SVV>Привет всем,


SVV>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?

теже
CreateToolhelp32Snapshot
OpenThread
Thread32First
Thread32Next
ZwOpenThread
ZwQuerySystemInformation
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: как в NT перечислить потоки? в 2к: Thread32First...
От: SVV Беларусь  
Дата: 14.07.04 11:10
Оценка:
Здравствуйте, Denis, Вы писали:

D>Здравствуйте, SVV, Вы писали:


SVV>>Привет всем,


SVV>>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?

D>теже
D>CreateToolhelp32Snapshot
D>OpenThread
D>Thread32First
D>Thread32Next
D>ZwOpenThread
D>ZwQuerySystemInformation

CreateToolhelp32Snapshot:
Included in Windows XP, Windows 2000 Professional, Windows Me, Windows 98, and Windows 95
OpenThread:
Included in Windows XP, Windows 2000 Professional, and Windows Me
Thread32First
Thread32Next:
Included in Windows XP, Windows 2000 Professional, Windows Me, Windows 98, and Windows 95
т.е. в Nt работать не будет.

ZwOpenThread
ZwQuerySystemInformation
по этим функциям информации нет...
Re[2]: как в NT перечислить потоки? в 2к: Thread32First...
От: Alexmoon Украина  
Дата: 14.07.04 11:11
Оценка:
Здравствуйте, Denis, Вы писали:

D>Здравствуйте, SVV, Вы писали:


SVV>>Привет всем,


SVV>>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?

D>теже
D>CreateToolhelp32Snapshot
D>OpenThread
D>Thread32First
D>Thread32Next
D>ZwOpenThread
D>ZwQuerySystemInformation

в Win NT 4.0?
Re: как в NT перечислить потоки? в 2к: Thread32First...
От: Alexmoon Украина  
Дата: 14.07.04 11:13
Оценка: 2 (1)
Здравствуйте, SVV, Вы писали:

SVV>Привет всем,


SVV>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?


Возьми на сайте Майкрософт WMI Core for Windows NT 4.0 and Windows 9x и попробуй перечислить все объекты Win32_Thread.
Re[3]: как в NT перечислить потоки? в 2к: Thread32First...
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 14.07.04 11:19
Оценка:
A>в Win NT 4.0?

подборка была специально по НТ/2000 — если 2000, то те что занешь, если нет то:
  do
    {
        pBuffer = malloc(cbBuffer);

        Status = ZwQuerySystemInformation.Get()(SystemProcessesAndThreadsInformation, pBuffer, cbBuffer, NULL);
              
        if (Status == STATUS_INFO_LENGTH_MISMATCH)
        {
            free(pBuffer);
            cbBuffer *= 2;
        }

    }
    while(Status == STATUS_INFO_LENGTH_MISMATCH);


    PSYSTEM_PROCESS_INFORMATION pInfo =         (PSYSTEM_PROCESS_INFORMATION)pBuffer;

    for (;;)
    {
        if(pInfo->ProcessId == GetCurrentProcessId())
        {
            ULONG ThreadCount = pInfo->ThreadCount;
            PSYSTEM_THREAD_INFORMATION pThreads;
            pThreads = ((PSYSTEM_PROCESS_INFORMATION_NT4)pInfo)->Threads;

            for (ULONG i = 0; i < ThreadCount; i++)
            {


Копирайт Ivan, и что -то от AlexFedotov
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: как в NT перечислить потоки? в 2к: Thread32First...
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 14.07.04 11:21
Оценка: 1 (1)
SVV>ZwOpenThread
SVV>ZwQuerySystemInformation
SVV>по этим функциям информации нет...

так потому я их там и написал =), это спросто было для случая 2000(3)/НТ
... << Rsdn@Home 1.1.4 beta 1 >>
точно, вот где а Alexa
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 14.07.04 11:25
Оценка: 2 (1)
всё спрятано =)
http://www.alexfedotov.com/samples/threads.asp
... << Rsdn@Home 1.1.4 beta 1 >>
Re: как в NT перечислить потоки? в 2к: Thread32First...
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.07.04 11:27
Оценка: +1
SVV>Привет всем,

SVV>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?


Посмотрите Nt(Zw)QuerySystemInformation, класс — SystemProcessesAndThreadsInformation. Обратите внимание на различие структуры в NT и 2k.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: как в NT перечислить потоки? в 2к: Thread32First...
От: SVV Беларусь  
Дата: 14.07.04 12:34
Оценка:
Здравствуйте, Andrew S, Вы писали:

SVV>>Привет всем,


SVV>>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?


AS>Посмотрите Nt(Zw)QuerySystemInformation, класс — SystemProcessesAndThreadsInformation. Обратите внимание на различие структуры в NT и 2k.


а где смотреть описание 'Nt(Zw)QuerySystemInformation'? в msdn нет...
Re[3]: как в NT перечислить потоки? в 2к: Thread32First...
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 14.07.04 12:35
Оценка:
SVV>а где смотреть описание 'Nt(Zw)QuerySystemInformation'? в msdn нет...
вообще такие вещи смтрят в Гарри Неббете.
но конкретно она есть по ссылке, которую я на дал тут на Alex Fedov's site
... << Rsdn@Home 1.1.4 beta 1 >>
Re[4]: как в NT перечислить потоки? в 2к: Thread32First...
От: _low_level_hacker_  
Дата: 14.07.04 15:53
Оценка:
SVV>>а где смотреть описание 'Nt(Zw)QuerySystemInformation'? в msdn нет...
D>вообще такие вещи смтрят в Гарри Неббете.

Опс, линком на книгу Гарри Неббета поделишся если есть конечно?
Или может кто знает где скачать в электронном виде.
Спасибо.
Re[5]: как в NT перечислить потоки? в 2к: Thread32First...
От: _low_level_hacker_  
Дата: 14.07.04 15:57
Оценка:
___>Опс, линком на книгу Гарри Неббета поделишся если есть конечно?
___>Или может кто знает где скачать в электронном виде.
___>Спасибо.

Прошу прощения на Гарри Неббета не нужно
перепутал с Peter Viscorola. Если у кого есть поделитись этим линком плиз.
Re[2]: как в NT перечислить потоки? в 2к: Thread32First...
От: SVV Беларусь  
Дата: 08.09.04 14:07
Оценка:
Здравствуйте, Alexmoon, Вы писали:

...
A>Возьми на сайте Майкрософт WMI Core for Windows NT 4.0 and Windows 9x и попробуй перечислить все объекты Win32_Thread.

Пришло время и опять стало актуальным перечисление потоков. С помощью WMI перечисляются все потоки, а мне нужно только для конкретного процесса. Получая указатель IWbemClassObject на объект потока, можно получить его доп. свойства, но все равно я не знаю как по ним отсеять лишние потоки.

Одно из свойств: ProcessHandle — наверняка это Handle процесса, в котором крутится поток, но как по хэндлу получить ID (процесса, потока)?
Re: как в NT перечислить потоки? в 2к: Thread32First...
От: lubichevav  
Дата: 08.09.04 14:21
Оценка:
Здравствуйте, SVV

А как насчет EnumProcesses?
Re[2]: как в NT перечислить потоки? в 2к: Thread32First...
От: SVV Беларусь  
Дата: 08.09.04 14:46
Оценка:
Здравствуйте, lubichevav, Вы писали:

L>Здравствуйте, SVV


L>А как насчет EnumProcesses?


Требования немножко изменились, надо чтобы способ работал в 9x/nt/2k/xp
К тому же перечислить надо не процессы, а потоки...
Re: как в NT перечислить потоки? в 2к: Thread32First...
От: Chez Россия  
Дата: 14.04.05 06:24
Оценка:
Здравствуйте, SVV, Вы писали:

SVV>Привет всем,


SVV>есть необходимость перечислить все потоки процесса. Для 9x/2k/xp понятно как, использовать Thread32First/Thread32Next, а как в NT?

CreateToolhelp32Snapshot

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:silent

Re[4]: как в NT перечислить потоки? в 2к: Thread32First...
От: MShura  
Дата: 14.04.05 09:19
Оценка: :)
Здравствуйте, Denis, Вы писали:

A>>в Win NT 4.0?


D>подборка была специально по НТ/2000 — если 2000, то те что занешь, если нет то:

D>
D>  do
D>    {
D>        pBuffer = malloc(cbBuffer);

D>        Status = ZwQuerySystemInformation.Get()(SystemProcessesAndThreadsInformation, pBuffer, cbBuffer, NULL);
              
D>        if (Status == STATUS_INFO_LENGTH_MISMATCH)
D>        {
D>            free(pBuffer);
D>            cbBuffer *= 2;
D>        }

D>    }
D>    while(Status == STATUS_INFO_LENGTH_MISMATCH);


D>    PSYSTEM_PROCESS_INFORMATION pInfo =         (PSYSTEM_PROCESS_INFORMATION)pBuffer;

D>    for (;;)
D>    {
D>        if(pInfo->ProcessId == GetCurrentProcessId())
D>        {
D>            ULONG ThreadCount = pInfo->ThreadCount;
D>            PSYSTEM_THREAD_INFORMATION pThreads;
D>            pThreads = ((PSYSTEM_PROCESS_INFORMATION_NT4)pInfo)->Threads;

D>            for (ULONG i = 0; i < ThreadCount; i++)
D>            {
D>


D>Копирайт Ivan, и что -то от AlexFedotov


Какой копирайт?
Этот код почему-то очень похож на код из книг Gary Nebbett, которая вышла, как только вышел Win2000.
А когда был опубликован код Ivan или AlexFedotov?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.