PDA

Просмотр полной версии : С/С++ - Как получить список всех хендлов системы


GenTao
15.10.2009, 19:09
Необходим работающий пример

Hiro Protagonist
15.10.2009, 21:25
#undef UNICODE
#undef _UNICODE

#include <windows.h>
#include <stdio.h>
#include "ntdll.h" //в сети найдешь.

#define MAX_PATH 1000

SYSTEM_HANDLE_INFORMATION *GetHandlezInfo(void);

void main(void)
{

SYSTEM_HANDLE_INFORMATION *shiHz;
int i;
HANDLE hProcess, hand;
shiHz = GetHandlezInfo();
if(shiHz)
{
for(i = 0; i < shiHz->uCount; ++i)
{

hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, shiHz->aSH[i].uIdProcess);
if(hProcess)
{
if(DuplicateHandle(hProcess, shiHz->aSH[i].Handle, GetCurrentProcess(), &hand, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
printf("%d\n", hand);
}
CloseHandle(hProcess);
}



}
free(shiHz);

}

getch();
return;


}

SYSTEM_HANDLE_INFORMATION *GetHandlezInfo(void)
{
HMODULE hNtDll;
SYSTEM_HANDLE_INFORMATION *shiHandleInfo = NULL;
//Размер структуры с одним хэндлом (16 - размер структуры описывающий хэндл)
DWORD dwLen = sizeof(SYSTEM_HANDLE_INFORMATION) + 16;
DWORD dwRetLen;

hNtDll = GetModuleHandle("ntdll.dll");
_ZwQuerySystemInformation = GetProcAddress(hNtDll, "ZwQuerySystemInformation");

//Этот класс требует для возврата необходимого размера, чтобы ему передалась структура по размеру готовая вместить
//один или более хэндлов
shiHandleInfo = malloc(dwLen);
_ZwQuerySystemInformation(SystemHandleInformation, shiHandleInfo, dwLen, &dwLen);
shiHandleInfo = realloc(shiHandleInfo, dwLen);
if(_ZwQuerySystemInformation(SystemHandleInformati on, shiHandleInfo, dwLen, &dwLen) == STATUS_SUCCESS)
return shiHandleInfo;
else
return NULL;
}



както так )

GenTao
15.10.2009, 21:56
Ухх..а список дочерних окон ? Если известен родительский дескриптор.

GenTao
15.10.2009, 22:02
Не пойму,какие два параметра последних передавать:(

Ну,реально гемор:

int main () {

HWND s;
HWND s1;
s = FindWindow(NULL,"[qip] - 292514125");
s1 = FindWindowEx(s,NULL,
system("PAUSE");

}

Хотел в цикле прогнать список дочерних и вывести хендл каждого.

lpszClass – класс элемента управления;
lpszWindow – имя, если NULL тогда поиск всех элементов класса lpszClass.

Вообще БРЕД,какие ещё элементы... мне окна нужны,только и всего.

Ra$cal
15.10.2009, 23:15
почитай чтоли книжки, чтобы не задавать настолько глупых вопросов. даже в мсдне вполне достаточно инфы по теме что такое классы, что такое элементы управления.

Gar|k
16.10.2009, 18:28
2 GenTao мда... коректно задавай вопрос ) я тоже хотел скинуть пример с ZwQuerySystemInformation т.к хендлы системные это совсем другое понятие...

по теме... фтыкай http://msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx

sn0w
19.10.2009, 15:52
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

мсдн смотри