为什么WdfRequest GetFile对象总是返回null?

时间:2014-05-28 11:31:58

标签: c driver wdk

我在文件系统过滤器驱动程序中使用下一个EvtIoWrite回调函数:

VOID
MyDriverEvtIoWrite(
    IN WDFQUEUE Queue,
    IN WDFREQUEST Request,
    IN size_t UnusedLength
)
{
WDFFILEOBJECT file;

    file = WdfRequestGetFileObject(Request);
    if (file != NULL)
    {
      KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "File is not null!\n"));
    }
}

我得到了永远的null文件对象,从未看到“文件不为空!”信息。为什么呢?


根据WdfRequestGetFileObject method

  

返回值

     

WdfRequestGetFileObject返回框架文件对象的句柄,   如果框架已为指定的请求创建了文件对象。   否则,此方法返回NULL。 (司机通常会测试一个   仅当NULL设置WdfFileObjectCanBeOptional位时才返回NULL   WDF_FILEOBJECT_CONFIG结构中的标志。)如果发生错误检查   驱动程序提供无效的对象句柄。备注

     

WdfRequestGetFileObject方法返回NULL,如果:

     

您的驱动程序>没有调用WdfDeviceInitSetFileObjectConfig并指定了一个   WDF_FILEOBJECT_CLASS值导致框架创建文件   对象。

     

另一个驱动程序发送了读取,写入或I / O控制请求   没有先发送请求类型的驱动程序   WdfRequestTypeCreate。

但我尊重这个规则。这里是MyDriverEvtDeviceAdd函数。

NTSTATUS
MyDriverEvtDeviceAdd(
    IN WDFDRIVER        Driver,
    IN PWDFDEVICE_INIT  DeviceInit
    )
{
WDF_FILEOBJECT_CONFIG_INIT(
        &fileConfig,
        AAVolProcessFileCreate,
        WDF_NO_EVENT_CALLBACK,
        WDF_NO_EVENT_CALLBACK // not interested in Cleanup 
        );

    fileConfig.FileObjectClass = WdfFileObjectWdfCanUseFsContext;

    WDF_OBJECT_ATTRIBUTES  attributes;

    WDF_OBJECT_ATTRIBUTES_INIT(&attributes);

    WdfDeviceInitSetFileObjectConfig(DeviceInit,
        &fileConfig,
        &attributes);
}

0 个答案:

没有答案