【问题标题】:Full file path with drive letter带驱动器号的完整文件路径
【发布时间】:2013-03-17 09:58:51
【问题描述】:

我是驱动程序开发的初学者。我正在开发一个过滤器驱动程序(内核模式)。 我想获取每个打开的文件的完整路径。 我有一个文件对象和一个 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);
}

【问题讨论】:

  • Stack Overflow 不是一个“请给我代码”的网站。你需要解释你尝试过的东西,展示一些实际的代码,并解释哪里出了问题。如果您证明自己已经为解决问题付出了一些努力,人们会更愿意提供帮助。
  • Cody 我已经编辑了我的问题,你能帮帮我吗
  • 科迪我认为只指定例程就足够了......
  • 感谢 sergmat 的帮助。在使用此例程时,VM 崩溃了。这可能是什么原因??

标签: windows driver kernel-mode filter-driver


【解决方案1】:

正如@sergmat 建议的那样,您可以使用IoVolumeDeviceToDosName 例程来获取卷名。但请确保您只在PASSIVE_LEVEL 拨打该路线,这可能就是您所遇到的情况。

另外,不推荐在调度例程中使用pFileObject->FileName。内存可能来自DISPATCH_LEVEL 或更高版本中无法访问的分页池。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多