NTSTATUS HookFsd(LPCWSTR DrvName)
{
//....获得ntfs的driver object
g_OldNtfsDriCtl = drvobj->MajorFunction[IRP_MJ_DIRECTORY_CONTROL];
//保存原始的dispatch 地址
drvobj->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = MyNtfsDriCtl ;
//用自己的dispatch 地址替换原始地址
//,,,,,
}
NTSTATUS MyNtfsDriCtl(PDEVICE_OBJECT devobj , PIRP pIrp)
{
NTSTATUS stat ;
//一些初始化处理.....
__asm
{
push pIrp
push devobj
call g_OldNtfsDriCtl
mov stat ,eax
}
//首先调用原始函数,以便得到结果
//下面进行处理,hack CompletionRoutine,或者是直接修改 UserBuffer的数据
//...
}


网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)