
15.10.2009, 21:25
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
PHP код:
#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(SystemHandleInformation, shiHandleInfo, dwLen, &dwLen) == STATUS_SUCCESS)
return shiHandleInfo;
else
return NULL;
}
както так )
|
|
|