Я столкнулся со странным поведением функции GetProcessHandleCount ().Сначала я делаю снимок всех процессов в системе, как описано в msdn:
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
pe32.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( hProcessSnap, &pe32 ) )
{
CloseHandle( hProcessSnap );
return 0;
}
Затем я делаю снимок процессов и подсчитываю открытые дескрипторы, используя функцию GetProcessHandleCount:
int count_of_handles=0;
DWORD dwHandleCount=0;
do {
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION,FALSE,pe32.th32ProcessID);
GetProcessHandleCount(hProcess,&dwHandleCount);
count_of_handles+=dwHandleCount;
if( hProcess != NULL )
CloseHandle( hProcess );
} while( Process32Next( hProcessSnap, &pe32 ) );
Я проверил эту программу в Windows 7 x64.Программа отображала count_of_handles ~ 16000, но на самом деле это значение было ~ 100 000 (если верить диспетчеру задач Windows).
Затем я выполнил эту программу в Windows XP x32 (от VMWare), а count_of_handles было ~ 9000 (но в действительностибыло ~ 8000).
Что не так с моим кодом?Спасибо.