能力值:
( LV12,RANK:300 )
2 楼
拜托我不是在原帖回你了吗,用得着再发新帖吗?再说了论坛里搜索一下这个问题就有答案了……
能力值:
( LV2,RANK:10 )
3 楼
下面的代码可以在应该可以在lz的程序中稳定运行 PFILE_OBJECT FileObject;
POBJECT_NAME_INFORMATION wcFilePath;
if (NT_SUCCESS(ObReferenceObjectByHandle(FileHandle,0,NULL,KernelMode,&FileObject,NULL)))//获取文件对象
{
if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)//获取文件对象所对应的文件Dos设备名称,即是全路径
{
DbgPrint("%ws\r\n",wcFilePath->Name.Buffer);
ExFreePool(wcFilePath);
}
ObDereferenceObject(FileObject);
} 上面的代码证明是不对的。十分对不住lz
}
能力值:
( LV12,RANK:420 )
4 楼
IoQueryFileDosDeviceName
哇,我很怕怕,我看到了好多蓝屏和死机。
能力值:
( LV2,RANK:10 )
5 楼
回楼上:的确IoQueryFileDosDeviceName任意BSOD,但是我在自己的inlinehookntCreateProcessEx和ntcreatesection中调用还是比较稳定的。不过在hook tcpip.sys的派遣函数时,必蓝屏(PsReferenceProcessFilePointer+IoQueryFileDosDeviceName还是很稳定的)。
我也是小菜,回复的内容不当,请高手见谅
能力值:
( LV2,RANK:10 )
6 楼
谢谢 ejoyc 我去试试哈
能力值:
( LV2,RANK:10 )
7 楼
哎 菜就是菜啊 RING0学习东西太多了 请问如何得到PFILE_OBJECT FileObject;这个文件的句柄啊
能力值:
( LV12,RANK:300 )
8 楼
http://bbs.pediy.com/showthread.php?t=102087第10楼……看来你是个绝对不回头看的人,我明明说了在你的原帖回过了。
能力值:
( LV2,RANK:10 )
9 楼
http://bbs.pediy.com/showthread.php?p=432627这是sudami曾经的帖子 惭愧!轩辕小聪解释得很到位!是我看错了lz的帖子!的确我的方法无法工作。向lz和轩辕小聪道歉。
能力值:
( LV2,RANK:10 )
10 楼
lz,下面的代码可以工作了。至少在win2003sp2ent上稳定运行。
PFILE_OBJECT FileObject;
PVOID SectionObject;
POBJECT_NAME_INFORMATION wcFilePath;
if (NT_SUCCESS(ObReferenceObjectByHandle(SectionHandle,0,NULL,KernelMode,&SectionObject,NULL)))//获取文件对象
{
_try
{
FileObject = (PFILE_OBJECT)(*((ULONG *)SectionObject + 5)); // PSEGMENT
FileObject = *(PFILE_OBJECT *)FileObject; // CONTROL_AREA
FileObject = *(PFILE_OBJECT *)((ULONG)FileObject + 36); // FILE_OBJECT
ObReferenceObjectByPointer((PVOID)FileObject, 0, NULL, KernelMode);
if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)//获取文件对象所对应的文件Dos设备名称,即是全路径
{
DbgPrint("%ws \r\n",wcFilePath->Name.Buffer);
ExFreePool(wcFilePath);//IoQueryFileDosDeviceName获取的OBJECT_NAME_INFORMATION 需要手动释放
}
else
{
KdPrint(("[ScanFunc] MmCreatePeb is called by [Path=%ws]\r\n",FileObject->FileName.Buffer));
}
ObDereferenceObject(FileObject);
}
_except(EXCEPTION_EXECUTE_HANDLER)
{
DbgPrint("catch error\r\n");
}
ObDereferenceObject(SectionObject);
}