如何为较低的过滤磁盘驱动程序的内部设备控制请求正确注册完成例程?

How to properly register a completion routine for an internal device control request for a lower filter disk driver?

我目前正在编写一个较低的过滤磁盘驱动程序来捕获 SCSI 命令,并测量每个命令的性能。目前,我的驱动程序能够捕获 SCSI 请求,并将其传递给下一个驱动程序。但是,当我尝试注册一个完成例程时,我得到以下状态:0xc0000010(STATUS_INVALID_DEVICE_REQUEST).

没有完成例程的工作代码:

WDF_REQUEST_SEND_OPTIONS_INIT(&options, WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET);
WdfRequestSend(Request, Target, &options);

带有完成例程的失败代码:

WdfRequestFormatRequestUsingCurrentType(Request);
WdfRequestSetCompletionRoutine(Request, CompletionRoutine, CompletionContext);
WdfRequestSend(Request, Target, WDF_NO_SEND_OPTIONS);

如有任何帮助,我们将不胜感激。谢谢

备注:

根据关于 NTDEV 的讨论,事实证明如果 CompletionRoutineNULL,您必须使用 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 选项。