findhandle.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <windows.h>
  2. #define NT_SUCCESS(x) ((x) >= 0)
  3. #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004
  4. #define SystemHandleInformation 16
  5. #define ObjectBasicInformation 0
  6. #define ObjectNameInformation 1
  7. #define ObjectTypeInformation 2
  8. #define QUERY_PROC 0x08
  9. #define QUERY_THREAD 0x10
  10. //GetHandles
  11. typedef NTSTATUS (NTAPI * NtQuerySystemInformation_t)(ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength);
  12. typedef NTSTATUS (NTAPI * NtDuplicateObject_t)(HANDLE SourceProcessHandle, HANDLE SourceHandle, HANDLE TargetProcessHandle, PHANDLE TargetHandle, ACCESS_MASK DesiredAccess, ULONG Attributes, ULONG Options);
  13. typedef NTSTATUS (NTAPI * NtQueryObject_t)(HANDLE ObjectHandle, ULONG ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength);
  14. WINBASEAPI void* __cdecl MSVCRT$malloc(size_t _Size);
  15. WINBASEAPI void* __cdecl MSVCRT$realloc(void* _Memory, size_t _NewSize);
  16. DECLSPEC_IMPORT HANDLE WINAPI KERNEL32$OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
  17. DECLSPEC_IMPORT DWORD WINAPI KERNEL32$K32GetProcessImageFileNameA(HANDLE hProcess, LPSTR lpImageFileName, DWORD nSize);
  18. DECLSPEC_IMPORT HANDLE WINAPI KERNEL32$GetCurrentProcess();
  19. DECLSPEC_IMPORT HANDLE WINAPI KERNEL32$GetCurrentProcessId();
  20. DECLSPEC_IMPORT BOOL WINAPI KERNEL32$CloseHandle (HANDLE hObject);
  21. DECLSPEC_IMPORT LPWSTR WINAPI KERNEL32$StrStrIW(LPCWSTR lpFirst, LPCWSTR lpSrch);
  22. DECLSPEC_IMPORT PCWSTR WINAPI SHLWAPI$StrStrIW(PCWSTR pszFirst, PCWSTR pszSrch);
  23. WINBASEAPI void __cdecl MSVCRT$free(void* _Memory);
  24. DECLSPEC_IMPORT DWORD WINAPI KERNEL32$GetProcessId(HANDLE Process);
  25. DECLSPEC_IMPORT DWORD WINAPI KERNEL32$GetProcessIdOfThread(HANDLE Thread);
  26. WINBASEAPI int __cdecl MSVCRT$sprintf_s(char *_Dst,size_t _SizeInBytes,const char *_Format,...);
  27. WINBASEAPI int __cdecl MSVCRT$swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
  28. DECLSPEC_IMPORT LPCSTR WINAPI SHLWAPI$PathFindFileNameA(LPCSTR pszPath);
  29. WINBASEAPI int __cdecl MSVCRT$printf(const char * _Format,...);
  30. WINBASEAPI int __cdecl MSVCRT$strcmp(const char *str1, const char *str2);
  31. //BeaconPrintToStreamW + BeaconOutputStreamW
  32. #define MAX_STRING 8192
  33. INT g_iGarbage = 1;
  34. LPSTREAM g_lpStream = (LPSTREAM)1;
  35. LPWSTR g_lpwPrintBuffer = (LPWSTR)1;
  36. DECLSPEC_IMPORT HRESULT WINAPI OLE32$CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm);
  37. WINBASEAPI void *__cdecl MSVCRT$calloc(size_t number, size_t size);
  38. WINBASEAPI int __cdecl MSVCRT$_vsnwprintf_s(wchar_t *buffer, size_t sizeOfBuffer, size_t count, const wchar_t *format, va_list argptr);
  39. WINBASEAPI size_t __cdecl MSVCRT$wcslen(const wchar_t *_Str);
  40. WINBASEAPI void __cdecl MSVCRT$memset(void *dest, int c, size_t count);
  41. WINBASEAPI HANDLE WINAPI KERNEL32$GetProcessHeap();
  42. WINBASEAPI LPVOID WINAPI KERNEL32$HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
  43. WINBASEAPI void __cdecl MSVCRT$free(void *memblock);
  44. WINBASEAPI BOOL WINAPI KERNEL32$HeapFree(HANDLE, DWORD, PVOID);
  45. DECLSPEC_IMPORT int WINAPI KERNEL32$MultiByteToWideChar(UINT CodePage, DWORD dwFlags, _In_NLS_string_(cbMultiByte)LPCCH lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar);
  46. typedef struct _UNICODE_STRING {
  47. USHORT Length;
  48. USHORT MaximumLength;
  49. PWSTR Buffer;
  50. } UNICODE_STRING, *PUNICODE_STRING;
  51. typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {
  52. USHORT UniqueProcessId;
  53. USHORT CreatorBackTraceIndex;
  54. UCHAR ObjectTypeIndex;
  55. UCHAR HandleAttributes;
  56. USHORT HandleValue;
  57. PVOID Object;
  58. ULONG GrantedAccess;
  59. } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
  60. typedef struct _SYSTEM_HANDLE_INFORMATION {
  61. ULONG NumberOfHandles;
  62. SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
  63. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
  64. typedef enum _POOL_TYPE {
  65. NonPagedPool,
  66. PagedPool,
  67. NonPagedPoolMustSucceed,
  68. DontUseThisType,
  69. NonPagedPoolCacheAligned,
  70. PagedPoolCacheAligned,
  71. NonPagedPoolCacheAlignedMustS
  72. } POOL_TYPE, *PPOOL_TYPE;
  73. typedef struct _OBJECT_TYPE_INFORMATION {
  74. UNICODE_STRING Name;
  75. ULONG TotalNumberOfObjects;
  76. ULONG TotalNumberOfHandles;
  77. ULONG TotalPagedPoolUsage;
  78. ULONG TotalNonPagedPoolUsage;
  79. ULONG TotalNamePoolUsage;
  80. ULONG TotalHandleTableUsage;
  81. ULONG HighWaterNumberOfObjects;
  82. ULONG HighWaterNumberOfHandles;
  83. ULONG HighWaterPagedPoolUsage;
  84. ULONG HighWaterNonPagedPoolUsage;
  85. ULONG HighWaterNamePoolUsage;
  86. ULONG HighWaterHandleTableUsage;
  87. ULONG InvalidAttributes;
  88. GENERIC_MAPPING GenericMapping;
  89. ULONG ValidAccess;
  90. BOOLEAN SecurityRequired;
  91. BOOLEAN MaintainHandleCount;
  92. USHORT MaintainTypeList;
  93. POOL_TYPE PoolType;
  94. ULONG PagedPoolUsage;
  95. ULONG NonPagedPoolUsage;
  96. } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;