我遇到了函數GetProcessHandleCount()的奇怪行爲。 起初,我把所有進程的快照系統,因爲它是在MSDN描述:GetProcessHandleCount的值不正確
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)。
我的代碼有什麼問題?謝謝。
特別是如果枚舉進程沒有足夠的權限來查詢目標進程的句柄計數。我不確定任務管理器是否以與其他程序相同的權限運行。 –
幸運的是,還有另外一個winapi函數 - GetPerformanceInfo。有用。 –