SYSTEM_HANDLE_INFORMATION

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

EhLib 8.0 Build 8.0.023 Pro Edition FullSource for D7-XE8 亲测可用,含全部源码及 Demo The Library contains components and classes for Borland Delphi versions 7, 9, Developer Studio 2006, Delphi 2007, Embarcadero RAD Studio 2009-XE8, Lazarus. TABLE OF CONTENTS ----------------- Overview Installation Library Installation Help Demonstration Programs Registering and Prices Other information About author Where to start. ------------------- Read about EhLib for Lazarus in the file - Lazarus\readme.txt Start overview of the library with the main Demo project .\Demos\Bin\MainDemo.Exe. (Compiled Demo files are available in the Evaluation version of the library) Then you can read a summary of the new features and changes in the file history-eng.html. More detail about new features can be found in the file - About EhLib 8 Eng.doc To install a new version of the library in the IDE, use the installation program in .\Installer\EhLibInstaller.exe Overview -------- The Library contains several components and objects. TDBGridEh component TDBGridEh provides all functionality of TDBGrid and adds several new features as follows: Allows to select records, columns and rectangle areas. Special titles that can correspond to several/all columns. Footer that is able to show sum/count/other field values. Automatic column resizing to set grid width equal client width. Ability to change row and title height. Allows automatic broken of a single line long title and data row to a multiline. Title can act as button and, optionally show a sort marker. Automatically sortmarking. Ability to truncate long text with ellipsis. Lookup list can show several fields. Incremental search in lookup fields. Frozen columns. DateTime picker support for TDateField and TDateTimeField. Allows to show bitmaps from TImageList depending on field value. Allows to hide and track horizontal or vertical scrollbars. Allows to hide columns. Allows to show 3D fr
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值