Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
为什么WdfRequestGetFileObject总是返回null?_C_Driver_Wdk - Fatal编程技术网

为什么WdfRequestGetFileObject总是返回null?

为什么WdfRequestGetFileObject总是返回null?,c,driver,wdk,C,Driver,Wdk,我正在文件系统筛选器驱动程序中使用下一个EVTIOSWRITE回调函数: VOID MyDriverEvtIoWrite( IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t UnusedLength ) { WDFFILEOBJECT file; file = WdfRequestGetFileObject(Request); if (file != NULL) { KdPrint

我正在文件系统筛选器驱动程序中使用下一个EVTIOSWRITE回调函数:

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"));
    }
}
我得到了所有的空文件对象,从来没有看到“文件不是空的!”消息。为什么?


根据

返回值

WdfRequestGetFileObject返回框架文件对象的句柄, 如果框架为指定的请求创建了文件对象。 否则,此方法将返回NULL。(驾驶员通常会测试车辆的安全性。) 仅当设置WDFFileObjectCanBe可选位时返回空值 WDF_FILEOBJECT_CONFIG结构中的标记。)如果 驱动程序提供的对象句柄无效。评论

如果出现以下任一情况,WdfRequestGetFileObject方法将返回NULL:

您的驱动程序>尚未调用WdfDeviceInitSetFileObjectConfig并指定 WDF_FILEOBJECT_类值,该值导致框架创建文件 对象

另一个驱动程序向发送读、写或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);
}

最好检查是否调用了此函数。。。本文介绍了WdfRequestGetFileObject可以返回NULL的可能原因。@ALexFaber我尊重这些规则。。但那没用。。我更新了postIs it文件系统迷你过滤器驱动程序?不要认为WDF可以用于微筛选器驱动程序。@Rohan它是传统的卷筛选器,而不是微筛选器。我认为原因是您的是筛选器驱动程序,因此您没有创建实际的底层驱动程序,因此在
MyDriverEvtDeviceAdd
中执行操作将不适用于底层设备,而适用于您的设备(例如,您的控制设备)。