Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/function/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 带驱动器号的完整文件路径_Windows_Driver_Kernel Mode_Filter Driver - Fatal编程技术网

Windows 带驱动器号的完整文件路径

Windows 带驱动器号的完整文件路径,windows,driver,kernel-mode,filter-driver,Windows,Driver,Kernel Mode,Filter Driver,我是驱动程序开发的初学者。我正在开发一个过滤器驱动程序(内核模式)。 我想获得打开的每个文件的完整路径。 我有一个文件对象和一个IRP。 我正在使用&pFileObject->fileName显示路径。它显示完整的路径,但不显示驱动器号。 请提供一个内核级例程,告诉驱动器号。 下面是代码 #include "StdAfx.h" #include "drv_common.h" #include "ntddk.h" #include "FsFilter.h" //////////////////

我是驱动程序开发的初学者。我正在开发一个过滤器驱动程序(内核模式)。 我想获得打开的每个文件的完整路径。 我有一个文件对象和一个IRP。 我正在使用&pFileObject->fileName显示路径。它显示完整的路径,但不显示驱动器号。 请提供一个内核级例程,告诉驱动器号。 下面是代码

#include "StdAfx.h"
#include "drv_common.h"
#include "ntddk.h"
#include "FsFilter.h"


///////////////////////////////////////////////////////////////////////////////////////////    ////////
// PassThrough IRP Handler

NTSTATUS FsFilterDispatchPassThrough( __in PDEVICE_OBJECT DeviceObject, __in PIRP Irp )
{
    PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION)DeviceObject-    >DeviceExtension;

    IoSkipCurrentIrpStackLocation(Irp);
    return IoCallDriver(pDevExt->AttachedToDeviceObject, Irp);
}

///////////////////////////////////////////////////////////////////////////////////////////    ////////
// IRP_MJ_CREATE IRP Handler

NTSTATUS FsFilterDispatchCreate(
    __in PDEVICE_OBJECT DeviceObject,
    __in PIRP           Irp
    )
{
    PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;

    DbgPrint("%wZ\n", &pFileObject->FileName);

    return FsFilterDispatchPassThrough(DeviceObject, Irp);
}

正如@sergmat所建议的,您可以使用
IoVolumeDeviceToDosName
例程获取卷名。但请确保您只在
被动级别调用该路径,这可能就是您正在经历的


此外,不建议在分派例程中使用
pFileObject->FileName
。内存可能来自分页池,在
DISPATCH\u LEVEL
或更高级别无法访问。

堆栈溢出不是“plz give me The codez”网站。您需要解释您尝试了什么,展示一些实际的代码,并解释哪里出了问题。如果你证明你自己在解决问题上付出了一些努力,人们会更愿意提供帮助。科迪,我现在编辑了我的问题,你能帮我吗?我认为只指定例程就足够了…试试
IoVolumeDeviceToDosName
谢谢sergmat的帮助..使用这个例程VM崩溃。。原因是什么??