#include <tlhelp32.h>
HANDLE hSnapshot;
PROCESSENTRY32 pe;
HANDLE hProcess;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
//не срослось;
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
{
CloseHandle(hSnapshot);
//опять не срослось;
}
do
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
//hProcess - HANDLE процесса
}
while (Process32Next(hSnapshot, &pe));
Процессы и их handle
Подскажите. Как можно узнать handle всех процессов, существующих в системе?
Буду с нетерпением ждать ответов и советов.
Цитата:
Originally posted by SkyHawk
Народ! Доброе время суток!
Подскажите. Как можно узнать handle всех процессов, существующих в системе?
Буду с нетерпением ждать ответов и советов.
Народ! Доброе время суток!
Подскажите. Как можно узнать handle всех процессов, существующих в системе?
Буду с нетерпением ждать ответов и советов.
Код:
Цитата:
Originally posted by SkyHawk
Народ! Доброе время суток!
Подскажите. Как можно узнать handle всех процессов, существующих в системе?
Буду с нетерпением ждать ответов и советов.
Народ! Доброе время суток!
Подскажите. Как можно узнать handle всех процессов, существующих в системе?
Буду с нетерпением ждать ответов и советов.
Также есть PdhEnumObjectItems.
Цитата:
Originally posted by _const_
Код:
#include <tlhelp32.h>
HANDLE hSnapshot;
PROCESSENTRY32 pe;
HANDLE hProcess;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
//не срослось;
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
{
CloseHandle(hSnapshot);
//опять не срослось;
}
do
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
//hProcess - HANDLE процесса
}
while (Process32Next(hSnapshot, &pe));
HANDLE hSnapshot;
PROCESSENTRY32 pe;
HANDLE hProcess;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
//не срослось;
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
{
CloseHandle(hSnapshot);
//опять не срослось;
}
do
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
//hProcess - HANDLE процесса
}
while (Process32Next(hSnapshot, &pe));
Цитата:
Originally posted by SkyHawk
Спасибо за помощь. Разобрался. Правда, возникла одна загвоздка. Хэндлы системных процессов не определяются. Подскажите, почему, и как побороть данную неприятность.
Цитата:
Originally posted by SkyHawk
Спасибо за помощь. Разобрался. Правда, возникла одна загвоздка. Хэндлы системных процессов не определяются. Подскажите, почему, и как побороть данную неприятность.
Спасибо за помощь. Разобрался. Правда, возникла одна загвоздка. Хэндлы системных процессов не определяются. Подскажите, почему, и как побороть данную неприятность.
Чтобы получить все хендлы надо иметь соответствующие привелегии (почитай в МСДН). Вот собствено что надо замутить чтобы их получить
Код:
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = true? SE_PRIVILEGE_ENABLED: 0;
AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = true? SE_PRIVILEGE_ENABLED: 0;
AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
Цитата:
Originally posted by Matush
Чтобы получить все хендлы надо иметь соответствующие привелегии (почитай в МСДН). Вот собствено что надо замутить чтобы их получить
Чтобы получить все хендлы надо иметь соответствующие привелегии (почитай в МСДН). Вот собствено что надо замутить чтобы их получить
Код:
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = true? SE_PRIVILEGE_ENABLED: 0;
AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = true? SE_PRIVILEGE_ENABLED: 0;
AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
Каюсь, но Си не знаю.
Можно на Делфях?
Цитата:
Originally posted by SkyHawk
Извиняюсь...
Каюсь, но Си не знаю.
Можно на Делфях?
Извиняюсь...
Каюсь, но Си не знаю.
Можно на Делфях?
Делфи не секу, но АПИ оно и в африке АПИ. Думаю для Тебя не будет сильной проблемой реализовать это код на делфи.
Цитата:
Originally posted by Matush
Делфи не секу, но АПИ оно и в африке АПИ. Думаю для Тебя не будет сильной проблемой реализовать это код на делфи.
Делфи не секу, но АПИ оно и в африке АПИ. Думаю для Тебя не будет сильной проблемой реализовать это код на делфи.
Ну что-же. Попробую. Спасибо. Скоро сообщу, как получится.
Цитата:
Originally posted by SkyHawk
Спасибо за помощь. Разобрался. Правда, возникла одна загвоздка. Хэндлы системных процессов не определяются. Подскажите, почему, и как побороть данную неприятность.
Спасибо за помощь. Разобрался. Правда, возникла одна загвоздка. Хэндлы системных процессов не определяются. Подскажите, почему, и как побороть данную неприятность.
А ты не думал, что некоторые хендлы могут указывать не только на процесс,а и на службу??!!
Цитата:
Originally posted by Ember
А ты не думал, что некоторые хендлы могут указывать не только на процесс,а и на службу??!!
А ты не думал, что некоторые хендлы могут указывать не только на процесс,а и на службу??!!
А что, служба процессом не является?:)
Цитата:
Originally posted by _const_
А что, служба процессом не является?:)
А что, служба процессом не является?:)
и то верно :)
Цитата:
Originally posted by Ember
и то верно :)
и то верно :)
Кстати, неплохая идея. Надо разобраться...