【转】SYSTEM_HANDLE_INFORMATION

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原理分析之句柄处理【原创】

posted @ 2015-01-04 08:37  Lthis  阅读(2300)  评论(0编辑  收藏  举报