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原理分析之句柄处理【原创】》
本文详细解析了Windows系统中句柄的内部结构和工作原理,包括SYSTEM_HANDLE_INFORMATION和SYSTEM_HANDLE_TABLE_ENTRY_INFO等关键数据结构,以及如何通过NtQuerySystemInformation函数获取系统内所有进程的句柄信息。


被折叠的 条评论
为什么被折叠?



