驱动老牛
![]() |
阅读:1183回复:8
create 派遣函数如何获得文件名
在CREATE派遣函数里如何获得被创建或打开的文件名称和路径?
如用NOTEPAD.EXE打开一个c:\a.txt 我怎样才能获得 c:\a.txt |
|
驱动老牛
![]() |
沙发#
发布于:2004-11-23 16:07
好的,非常感谢
|
|
板凳#
发布于:2004-11-23 02:29
文件名(没有盘符)直接从FileObject->FileName中取. 盘符需要用其他方法得到, 我前面说的方法是用来得到盘符的.
注意 1. FileObject->RelatedFileObject->FileName需要一起考虑. 2. 文件名中可能包含"\??\"需要手动处理. 3. 网络文件名需要处理(FILEMON中的处理有错误!!!) |
|
驱动老牛
![]() |
地板#
发布于:2004-11-22 13:04
我试过啊,只能得到\device\harddiskvolume1 不能得到文件名
文件名怎么得到的? 代码如下: irpSp = IoGetCurrentIrpStackLocation( Irp ); if(irpSp->FileObject&&irpSp->FileObject->DeviceObject) { if(STATUS_SUCCESS==ObQueryNameString(irpSp->FileObject->DeviceObject,pObjectInfor,300,&ReturnLength)) { KdPrint(("name is: %ws",pObjectInfor->Name.Buffer)); KdPrint(("Proces is: %ws",GetProcessPath())); } } ExFreePool(pObjectInfor); |
|
地下室#
发布于:2004-11-20 09:18
"c:"只是个用户模式下用的符号连接, 你把设备名传到用户模式下去比较就可以了.
取物理设备对象: fileobject->device 取物理设备名: ObQueryNameString 把这个名字传到用户模式, 和QueryDosDevice的结果比较就可以得到盘符了. |
|
驱动老牛
![]() |
5楼#
发布于:2004-11-19 17:19
还是搞不懂,那个函数没做什么呀
|
|
6楼#
发布于:2004-11-17 09:03
能否给个例子? filemon里有实现这个IRP请求的函数,filemonQueryFile( ... ),正好满足你的要求。 |
|
|
驱动老牛
![]() |
7楼#
发布于:2004-11-16 13:31
能否给个例子?
谢谢! |
|
8楼#
发布于:2004-11-16 13:14
文件名
FileObject FileName 路径 ,需要构造个 FileInfo 得 IRP 好像 FileMon中有 |
|
|