句柄表和pspcidtable

首先要先BS一下自己.一直以为进程的句柄表和PspCidTable是一样的.结果因为概念上的理解错误导致偶浪费了不少时间.多亏好心的FC的耐心指导算是明白一些.
总结一下FC教偶的: PspCidTable与进程句柄表没有直接关系.它只是借用了句柄表的结构.它里面存的内容是 eprocess 或者 ethread 的地址.

提供一些参考资源:
http://hi.baidu.com/gz1x/blog/item/d99aeefa4d1c92ddb48f31b9.html
http://www.rootkit.com/vault/petersilberman/FUTo_enhanced.zip

另外教主大虾在blog上说了下一篇他就会讲PspCidTable 大家记得去看哦.
偶对了提供几个结构声明和定义希望能给将要学习句柄表的童鞋带来帮助


#define WORD USHORT
typedef struct _EX_PUSH_LOCK
{
     union
     {
          ULONG Locked: 1;
          ULONG Waiting: 1;
          ULONG Waking: 1;
          ULONG MultipleShared: 1;
          ULONG Shared: 28;
          ULONG Value;
          PVOID Ptr;
     };
} EX_PUSH_LOCK, *PEX_PUSH_LOCK;

typedef struct _HANDLE_TRACE_DB_ENTRY
{
     CLIENT_ID ClientId;
     PVOID Handle;
     ULONG Type;
     VOID * StackTrace[16];
} HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY;


typedef struct _HANDLE_TABLE_ENTRY_INFO
{
     ULONG AuditMask;
} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;

typedef struct _HANDLE_TABLE_ENTRY
{
     union
     {
          PVOID Object;
          ULONG ObAttributes;
          PHANDLE_TABLE_ENTRY_INFO InfoTable;
          ULONG Value;
     };
     union
     {
          ULONG GrantedAccess;
          struct
          {
               WORD GrantedAccessIndex;
               WORD CreatorBackTraceIndex;
          };
          LONG NextFreeTableEntry;
     };
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;


typedef struct _HANDLE_TRACE_DEBUG_INFO
{
     LONG RefCount;
     ULONG TableSize;
     ULONG BitMaskFlags;
     FAST_MUTEX CloseCompactionLock;
     ULONG CurrentStackIndex;
     HANDLE_TRACE_DB_ENTRY TraceDb[1];
} HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO;


typedef struct _HANDLE_TABLE
{
     ULONG   TableCode;
     PEPROCESS QuotaProcess;
     PVOID UniqueProcessId;
     EX_PUSH_LOCK HandleLock;
     LIST_ENTRY HandleTableList;
     EX_PUSH_LOCK HandleContentionEvent;
     PHANDLE_TRACE_DEBUG_INFO DebugInfo;
     LONG ExtraInfoPages;
     ULONG Flags;
     ULONG StrictFIFO: 1;
     LONG FirstFreeHandle;
     PHANDLE_TABLE_ENTRY LastFreeHandleEntry;
     LONG HandleCount;
     ULONG NextHandleNeedingPool;
} HANDLE_TABLE, *PHANDLE_TABLE;

有个枚举句柄表的API:
extern
NTKERNELAPI
BOOLEAN


ExEnumHandleTable (
    __in PHANDLE_TABLE                      HandleTable,
    __in EX_ENUMERATE_HANDLE_ROUTINE     EnumHandleProcedure,//回调函数返回FALSE表示继续枚举
    __in PVOID     EnumParameter,
    __out_opt PHANDLE Handle
     );

回调函数的原形:
typedef BOOLEAN (__stdcall*EX_ENUMERATE_HANDLE_ROUTINE)(PHANDLE_TABLE_ENTRY arg1,ULONG arg2,PVOID arg3 );

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值