1. Как узнать загрузку процессора конкретным процессом? Я думал так: вызвать ZwQuerySystemInformation с классом 0x05 два раза посчитать разности KernelTime, UserTime и т.д. Но так фигня какая-то выходит: Idle-98%, System-02%. 2. Как получить список загруженных процессом модулей не используя Toolhelp, PSAPI, RtlQueryDebugProcessInformation? 3. Как получить gdi объекты используемые процессом?
На второй ворпрос ответ в ZwQuerySystemInformation c флагом SystemProcessesAndThreadsInformation. В Неббете есть пример реализации ToolHelp через эту технику.
А вот ещё вопрос: Есть такой код Код (Text): BOOL ReadProcessPeb(DWORD dwProcessId, PPEB pPeb) { PROCESS_BASIC_INFORMATION pbi; BOOL bSuccess = FALSE; HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, dwProcessId); if(hProcess != INVALID_HANDLE_VALUE) { ZwQueryInformationProcess(hProcess, 0, &pbi, sizeof(pbi), NULL); ReadProcessMemory(hProcess, pbi.PebBaseAddress, pPeb, sizeof(PEB), NULL); CloseHandle(hProcess); bSuccess = GetLastError() == ERROR_SUCCESS; } return bSuccess; } И в принципе рабочий но на некоторых сервисах(svchost.exe wdfmgr.exe) требует чтобы были включены debug привилегии, не смотря на то что процесс открываеться, почему?