PSPCidTable枚举进程

  目前网上流传的一些通过PSPCidTable的代码似乎有些问题,以下是我真实使用的一些代码,需要具体的可以向我索要:)

针对XP动态的三层句柄表实现,2000就是固定的三层了,不多说了。

    说明一下,PspCidTable仍然不能突破FUTO的限制,不过本人写的一个简单的测试代码是通过EPROCESS 的这个偏移就可以试实现:int OFFSET_MMSUPPORT_WORKINGSETEXPANSIONLINKS;//+0x024 WorkingSetExpansionLinks : _LIST_ENTRY [ 0x898d323c - 0x89850834 ]

这个是获取最底层的代码,二三层可以直接调用此函数即可。

NTSTATUS GetLowTableEntry(ULONG tableEntry,PMY_SINGLE_LINK pHead)
{
ULONG object,objectHeader,type,NextFreeTableEntry;
ULONG nPerPage2 = PAGE_SIZE/sizeof(HANDLE_TABLE_ENTRY);//最底层表所能容纳的最大表项数目
ANSI_STRING processName;
UNICODE_STRING sTem;
ULONG nLen = 0;
RtlInitUnicodeString(&sTem,L"System");

for (ULONG i=0;i<nPerPage2;i++)
{
if (!MmIsAddressValid((PULONG)(tableEntry + i * 8)))
{
continue;
}
if(!MmIsAddressValid((PULONG)(tableEntry+i*8+0x04)))
{
continue;
}
NextFreeTableEntry=*(PULONG)(tableEntry+i*8+0x04);
if(NextFreeTableEntry != 0x0)//正常的_HANDLE_TABLE_ENTRY中NextFreeTableEntry为0x0
{
continue;
}
object = *(PULONG)(tableEntry + i*8);
if (object == 0)
{
continue;
}
object=((object | 0x80000000)& 0xfffffff8);
RecordProcess(object,pHead);
}
return STATUS_SUCCESS;
}

posted @ 2012-03-16 18:12  trxdy  阅读(338)  评论(0编辑  收藏  举报