为什么WdfRequestGetFileObject总是返回null?
我正在文件系统筛选器驱动程序中使用下一个EVTIOSWRITE回调函数:为什么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
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
中执行操作将不适用于底层设备,而适用于您的设备(例如,您的控制设备)。