typedef struct _SYSTEM_HANDLE_INFORMATION{ ULONG ProcessId; UCHAR ObjectTypeNumber; UCHAR Flags; USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; /* ProcessId: 进程标识符 ObjectTypeNumber; 打开的对象的类型 Flags: 句柄属性标志 Handle: 句柄数值,在进程打开的句柄中唯一标识某个句柄 Object: 这个就是句柄对应的EPROCESS的地址 GrantedAccess: 句柄对象的访问权限 */ } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; ObjectTypeNumber的定义
// 枚举对象类型
typedef enum _SYSTEM_HANDLE_TYPE
{
OB_TYPE_UNKNOWN, // 0,未知类型
OB_TYPE_TYPE, // 1,类型
OB_TYPE_DIRECTORY, // 2,目录
OB_TYPE_SYMBOLIC_LINK, // 3,符号链接
OB_TYPE_TOKEN, // 4,安全
OB_TYPE_PROCESS, // 5,进程
OB_TYPE_THREAD, // 6,线程
OB_TYPE_JOB, // 7,Job
OB_TYPE_DEBUG_OBJECT, // 8,调试对象
OB_TYPE_EVENT, // 9,事件
OB_TYPE_EVENT_PAIR, // 10,事件
OB_TYPE_MUTANT, // 11,互斥体
OB_TYPE_CALLBACK, // 12,回调
OB_TYPE_SEMAPHORE, // 13,信号量
OB_TYPE_TIMER, // 14,时钟
OB_TYPE_PROFILE, // 15,Profile
OB_TYPE_KEYED_EVENT, // 16,键盘事件
OB_TYPE_WINDOWS_STATION, // 17,fixed
OB_TYPE_DESKTOP, // 18,桌面
OB_TYPE_SECTION, // 19,共享内存区
OB_TYPE_KEY, // 20,键值
OB_TYPE_PORT, // 21,端口
OB_TYPE_WAITABLE_PORT, // 22,可等待端口
OB_TYPE_ADAPTER, // 23,适配器
OB_TYPE_CONTROLLER, // 24,控制器
OB_TYPE_DEVICE, // 25,设备
OB_TYPE_DRIVER, // 26,驱动
OB_TYPE_IOCOMPLETION, // 27,fixed
OB_TYPE_FILE, // 28,内存映射文件
OB_TYPE_WMIGUID // 29,fixed
} SYSTEM_HANDLE_TYPE;
typedef enum _MEMORY_INFORMATION_CLASS
{
MemoryBasicInformation,
MemoryWorkingSetList,
MemorySectionName,
MemoryBasicVlmInformation
} MEMORY_INFORMATION_CLASS, *PMEMORY_INFORMATION_CLASS;
typedef struct _OBJECT_TYPE_INFORMATION
{
UNICODE_STRING TypeName;
ULONG TotalNumberOfHandles;
ULONG TotalNumberOfObjects;
} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
typedef struct _OBJECT_ALL_INFORMATION
{
ULONG NumberOfObjects;
OBJECT_TYPE_INFORMATION ObjectTypeInformation[1];
} OBJECT_ALL_INFORMATION, *POBJECT_ALL_INFORMATION;
使用时应注意,返回到缓冲区的首先是一个ULONG类型的数据,表示有多少数组
使用NtQuerySystemInformation函数的SystemHandleInformation=16号功能. 其相关结构定义如下: typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO{ USHORT UniqueProcessId; USHORT CreatorBackTraceIndex; UCHAR ObjectTypeIndex; UCHAR HandleAttributes; USHORT HandleValue; PVOID Object; ULONG GrantedAccess; } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO; typedef struct _SYSTEM_HANDLE_INFORMATION{ ULONG NumberOfHandles; SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1]; } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; 该功能号获取系统内所有进程的句柄放在Handles里,个数由NumberOfHandles标识, 每个句柄由UniqueProcessId来区分属于那个不同的进程.
-------《ProcessExplorer原理分析之句柄处理【原创】》