Показать сообщение отдельно

  #2  
Старый 15.10.2009, 21:25
Hiro Protagonist
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
С нами: 8795069

Репутация: 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;
} 
както так )
 
Ответить с цитированием