diff options
Diffstat (limited to 'psutil/arch/windows/process_info.c')
-rw-r--r-- | psutil/arch/windows/process_info.c | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/psutil/arch/windows/process_info.c b/psutil/arch/windows/process_info.c index 946a01cb..3b3c677e 100644 --- a/psutil/arch/windows/process_info.c +++ b/psutil/arch/windows/process_info.c @@ -483,6 +483,7 @@ psutil_get_process_data(long pid, BOOL theyAreWow64; #endif DWORD access = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ; + NTSTATUS status; hProcess = psutil_handle_from_pid(pid, access); if (hProcess == NULL) @@ -491,15 +492,16 @@ psutil_get_process_data(long pid, #ifdef _WIN64 /* 64 bit case. Check if the target is a 32 bit process running in WoW64 * mode. */ - if (! NT_SUCCESS(psutil_NtQueryInformationProcess( - hProcess, - ProcessWow64Information, - &ppeb32, - sizeof(LPVOID), - NULL))) - { - PyErr_SetFromOSErrnoWithSyscall( - "NtQueryInformationProcess(ProcessWow64Information)"); + status = psutil_NtQueryInformationProcess( + hProcess, + ProcessWow64Information, + &ppeb32, + sizeof(LPVOID), + NULL); + + if (!NT_SUCCESS(status)) { + psutil_SetFromNTStatusErr( + status, "NtQueryInformationProcess(ProcessWow64Information)"); goto error; } @@ -633,18 +635,20 @@ psutil_get_process_data(long pid, PEB_ peb; RTL_USER_PROCESS_PARAMETERS_ procParameters; - if (! NT_SUCCESS(psutil_NtQueryInformationProcess( - hProcess, - ProcessBasicInformation, - &pbi, - sizeof(pbi), - NULL))) - { - PyErr_SetFromOSErrnoWithSyscall( - "NtQueryInformationProcess(ProcessBasicInformation)"); + status = psutil_NtQueryInformationProcess( + hProcess, + ProcessBasicInformation, + &pbi, + sizeof(pbi), + NULL); + + if (!NT_SUCCESS(status)) { + psutil_SetFromNTStatusErr( + status, "NtQueryInformationProcess(ProcessBasicInformation)"); goto error; } + // read peb if (!ReadProcessMemory(hProcess, pbi.PebBaseAddress, @@ -767,10 +771,12 @@ psutil_cmdline_query_proc(long pid, WCHAR **pdata, SIZE_T *psize) { NULL, 0, &bufLen); + if (status != STATUS_BUFFER_OVERFLOW && \ status != STATUS_BUFFER_TOO_SMALL && \ status != STATUS_INFO_LENGTH_MISMATCH) { - PyErr_SetFromOSErrnoWithSyscall("NtQueryInformationProcess(0)"); + psutil_SetFromNTStatusErr( + status, "NtQueryInformationProcess(ProcessBasicInformation)"); goto error; } @@ -789,8 +795,9 @@ psutil_cmdline_query_proc(long pid, WCHAR **pdata, SIZE_T *psize) { bufLen, &bufLen ); - if (! NT_SUCCESS(status)) { - PyErr_SetFromOSErrnoWithSyscall("NtQueryInformationProcess(withlen)"); + if (!NT_SUCCESS(status)) { + psutil_SetFromNTStatusErr( + status, "NtQueryInformationProcess(ProcessCommandLineInformation)"); goto error; } @@ -971,9 +978,9 @@ psutil_get_proc_info(DWORD pid, PSYSTEM_PROCESS_INFORMATION *retProcess, } } - if (status != 0) { - PyErr_Format( - PyExc_RuntimeError, "NtQuerySystemInformation() syscall failed"); + if (! NT_SUCCESS(status)) { + psutil_SetFromNTStatusErr( + status, "NtQuerySystemInformation(SystemProcessInformation)"); goto error; } |