Index: third_party/psutil/psutil/arch/mswindows/process_handles.c |
diff --git a/third_party/psutil/psutil/arch/mswindows/process_handles.c b/third_party/psutil/psutil/arch/mswindows/process_handles.c |
deleted file mode 100644 |
index 0fc4a3f3f7301807b8fbba23da08df353c584a8d..0000000000000000000000000000000000000000 |
--- a/third_party/psutil/psutil/arch/mswindows/process_handles.c |
+++ /dev/null |
@@ -1,304 +0,0 @@ |
-/* |
- * $Id: process_handles.c 1142 2011-10-05 18:45:49Z g.rodola $ |
- * |
- * Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved. |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- * |
- */ |
- |
-#ifndef UNICODE |
-#define UNICODE |
-#endif |
- |
-#include <Python.h> |
-#include <windows.h> |
-#include <stdio.h> |
-#include "process_handles.h" |
- |
-#ifndef NT_SUCCESS |
- #define NT_SUCCESS(x) ((x) >= 0) |
-#endif |
-#define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 |
- |
-#define SystemHandleInformation 16 |
-#define ObjectBasicInformation 0 |
-#define ObjectNameInformation 1 |
-#define ObjectTypeInformation 2 |
- |
- |
-typedef LONG NTSTATUS; |
- |
-typedef struct _UNICODE_STRING { |
- USHORT Length; |
- USHORT MaximumLength; |
- PWSTR Buffer; |
-} UNICODE_STRING, *PUNICODE_STRING; |
- |
-typedef NTSTATUS (NTAPI *_NtQuerySystemInformation)( |
- ULONG SystemInformationClass, |
- PVOID SystemInformation, |
- ULONG SystemInformationLength, |
- PULONG ReturnLength |
- ); |
- |
-typedef NTSTATUS (NTAPI *_NtDuplicateObject)( |
- HANDLE SourceProcessHandle, |
- HANDLE SourceHandle, |
- HANDLE TargetProcessHandle, |
- PHANDLE TargetHandle, |
- ACCESS_MASK DesiredAccess, |
- ULONG Attributes, |
- ULONG Options |
- ); |
- |
-typedef NTSTATUS (NTAPI *_NtQueryObject)( |
- HANDLE ObjectHandle, |
- ULONG ObjectInformationClass, |
- PVOID ObjectInformation, |
- ULONG ObjectInformationLength, |
- PULONG ReturnLength |
- ); |
- |
-typedef struct _SYSTEM_HANDLE |
-{ |
- ULONG ProcessId; |
- BYTE ObjectTypeNumber; |
- BYTE Flags; |
- USHORT Handle; |
- PVOID Object; |
- ACCESS_MASK GrantedAccess; |
-} SYSTEM_HANDLE, *PSYSTEM_HANDLE; |
- |
-typedef struct _SYSTEM_HANDLE_INFORMATION |
-{ |
- ULONG HandleCount; |
- SYSTEM_HANDLE Handles[1]; |
-} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; |
- |
-typedef enum _POOL_TYPE |
-{ |
- NonPagedPool, |
- PagedPool, |
- NonPagedPoolMustSucceed, |
- DontUseThisType, |
- NonPagedPoolCacheAligned, |
- PagedPoolCacheAligned, |
- NonPagedPoolCacheAlignedMustS |
-} POOL_TYPE, *PPOOL_TYPE; |
- |
-typedef struct _OBJECT_TYPE_INFORMATION |
-{ |
- UNICODE_STRING Name; |
- ULONG TotalNumberOfObjects; |
- ULONG TotalNumberOfHandles; |
- ULONG TotalPagedPoolUsage; |
- ULONG TotalNonPagedPoolUsage; |
- ULONG TotalNamePoolUsage; |
- ULONG TotalHandleTableUsage; |
- ULONG HighWaterNumberOfObjects; |
- ULONG HighWaterNumberOfHandles; |
- ULONG HighWaterPagedPoolUsage; |
- ULONG HighWaterNonPagedPoolUsage; |
- ULONG HighWaterNamePoolUsage; |
- ULONG HighWaterHandleTableUsage; |
- ULONG InvalidAttributes; |
- GENERIC_MAPPING GenericMapping; |
- ULONG ValidAccess; |
- BOOLEAN SecurityRequired; |
- BOOLEAN MaintainHandleCount; |
- USHORT MaintainTypeList; |
- POOL_TYPE PoolType; |
- ULONG PagedPoolUsage; |
- ULONG NonPagedPoolUsage; |
-} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; |
- |
-PVOID GetLibraryProcAddress(PSTR LibraryName, PSTR ProcName) |
-{ |
- return GetProcAddress(GetModuleHandleA(LibraryName), ProcName); |
-} |
- |
- |
-PyObject* |
-get_open_files(long pid, HANDLE processHandle) |
-{ |
- _NtQuerySystemInformation NtQuerySystemInformation = |
- GetLibraryProcAddress("ntdll.dll", "NtQuerySystemInformation"); |
- _NtDuplicateObject NtDuplicateObject = |
- GetLibraryProcAddress("ntdll.dll", "NtDuplicateObject"); |
- _NtQueryObject NtQueryObject = |
- GetLibraryProcAddress("ntdll.dll", "NtQueryObject"); |
- |
- NTSTATUS status; |
- PSYSTEM_HANDLE_INFORMATION handleInfo; |
- ULONG handleInfoSize = 0x10000; |
- |
- ULONG i; |
- ULONG fileNameLength; |
- PyObject *filesList = Py_BuildValue("[]"); |
- PyObject *arg = NULL; |
- PyObject *fileFromWchar = NULL; |
- |
- |
- |
- handleInfo = (PSYSTEM_HANDLE_INFORMATION)malloc(handleInfoSize); |
- |
- /* NtQuerySystemInformation won't give us the correct buffer size, |
- so we guess by doubling the buffer size. */ |
- while ((status = NtQuerySystemInformation( |
- SystemHandleInformation, |
- handleInfo, |
- handleInfoSize, |
- NULL |
- )) == STATUS_INFO_LENGTH_MISMATCH) |
- handleInfo = (PSYSTEM_HANDLE_INFORMATION)realloc(handleInfo, handleInfoSize *= 2); |
- |
- /* NtQuerySystemInformation stopped giving us STATUS_INFO_LENGTH_MISMATCH. */ |
- if (!NT_SUCCESS(status)) { |
- //printf("NtQuerySystemInformation failed!\n"); |
- return NULL; |
- } |
- |
- for (i = 0; i < handleInfo->HandleCount; i++) |
- { |
- SYSTEM_HANDLE handle = handleInfo->Handles[i]; |
- HANDLE dupHandle = NULL; |
- POBJECT_TYPE_INFORMATION objectTypeInfo; |
- PVOID objectNameInfo; |
- UNICODE_STRING objectName; |
- ULONG returnLength; |
- |
- /* Check if this handle belongs to the PID the user specified. */ |
- if (handle.ProcessId != pid) |
- continue; |
- |
- /* Skip handles with the following access codes as the next call |
- to NtDuplicateObject() or NtQueryObject() might hang forever. */ |
- if((handle.GrantedAccess == 0x0012019f) |
- || (handle.GrantedAccess == 0x001a019f) |
- || (handle.GrantedAccess == 0x00120189) |
- || (handle.GrantedAccess == 0x00100000)) { |
- continue; |
- } |
- |
- /* Duplicate the handle so we can query it. */ |
- if (!NT_SUCCESS(NtDuplicateObject( |
- processHandle, |
- handle.Handle, |
- GetCurrentProcess(), |
- &dupHandle, |
- 0, |
- 0, |
- 0 |
- ))) |
- { |
- //printf("[%#x] Error!\n", handle.Handle); |
- continue; |
- } |
- |
- /* Query the object type. */ |
- objectTypeInfo = (POBJECT_TYPE_INFORMATION)malloc(0x1000); |
- if (!NT_SUCCESS(NtQueryObject( |
- dupHandle, |
- ObjectTypeInformation, |
- objectTypeInfo, |
- 0x1000, |
- NULL |
- ))) |
- { |
- //printf("[%#x] Error!\n", handle.Handle); |
- CloseHandle(dupHandle); |
- continue; |
- } |
- |
- objectNameInfo = malloc(0x1000); |
- if (!NT_SUCCESS(NtQueryObject( |
- dupHandle, |
- ObjectNameInformation, |
- objectNameInfo, |
- 0x1000, |
- &returnLength |
- ))) |
- { |
- /* Reallocate the buffer and try again. */ |
- objectNameInfo = realloc(objectNameInfo, returnLength); |
- if (!NT_SUCCESS(NtQueryObject( |
- dupHandle, |
- ObjectNameInformation, |
- objectNameInfo, |
- returnLength, |
- NULL |
- ))) |
- { |
- /* We have the type name, so just display that.*/ |
- /* |
- printf( |
- "[%#x] %.*S: (could not get name)\n", |
- handle.Handle, |
- objectTypeInfo->Name.Length / 2, |
- objectTypeInfo->Name.Buffer |
- ); |
- */ |
- free(objectTypeInfo); |
- free(objectNameInfo); |
- CloseHandle(dupHandle); |
- continue; |
- |
- } |
- } |
- |
- /* Cast our buffer into an UNICODE_STRING. */ |
- objectName = *(PUNICODE_STRING)objectNameInfo; |
- |
- /* Print the information! */ |
- if (objectName.Length) |
- { |
- /* The object has a name. Make sure it is a file otherwise |
- ignore it */ |
- fileNameLength = objectName.Length / 2; |
- if (wcscmp(objectTypeInfo->Name.Buffer, L"File") == 0) { |
- //printf("%.*S\n", objectName.Length / 2, objectName.Buffer); |
- fileFromWchar = PyUnicode_FromWideChar(objectName.Buffer, |
- fileNameLength); |
- #if PY_MAJOR_VERSION >= 3 |
- arg = Py_BuildValue("N", PyUnicode_AsUTF8String(fileFromWchar)); |
- #else |
- arg = Py_BuildValue("N", PyUnicode_FromObject(fileFromWchar)); |
- #endif |
- Py_XDECREF(fileFromWchar); |
- PyList_Append(filesList, arg); |
- Py_XDECREF(arg); |
- } |
- /* |
- printf( |
- "[%#x] %.*S: %.*S\n", |
- handle.Handle, |
- objectTypeInfo->Name.Length / 2, |
- objectTypeInfo->Name.Buffer, |
- objectName.Length / 2, |
- objectName.Buffer |
- ); |
- */ |
- } |
- else |
- { |
- /* Print something else. */ |
- /* |
- printf( |
- "[%#x] %.*S: (unnamed)\n", |
- handle.Handle, |
- objectTypeInfo->Name.Length / 2, |
- objectTypeInfo->Name.Buffer |
- ); |
- */ |
- ;; |
- } |
- free(objectTypeInfo); |
- free(objectNameInfo); |
- CloseHandle(dupHandle); |
- } |
- free(handleInfo); |
- CloseHandle(processHandle); |
- return filesList; |
-} |
- |