驱动之路_通过zw函数获取nt函数指针地址

DWORD GetFunctionAddressBySsdt(WCHAR *zwFunctionName,DWORD index)
{
    PSERVICE_DESCRIPTOR_TABLE sdt;//ssdt 表
    DWORD zwFunctionAddress;      //应该是老的方法的地址吧
    if(zwFunctionName!=NULL)      //不等于NULL才进去
    {
        UNICODE_STRING functionName;  
        RtlInitUnicodeString(&functionName,zwFunctionName);//给局部变量赋值

        zwFunctionAddress=(DWORD)MmGetSystemRoutineAddress(&functionName);//获取SSDT表的函数地址,这里获取的就是zw系列的函数

        if(zwFunctionAddress==0)
        {
            //如果获取失败
            KdPrint(("get zw Function address fialed\n"));
            return 0;
        }

        index=*(DWORD*)(zwFunctionAddress+1);//+1是为了得到索引号,可以通过windbg查看源码u ZwXXXX
    }
    sdt=KeServiceDescriptorTable;
    return sdt->ServiceTable[index];//这个才是得到了SSDT表的函数地址
}

 

posted @ 2013-09-18 16:49  宝贝,我永远都在  阅读(309)  评论(0)    收藏  举报