Как правильно зарегистрировать процедуру завершения для внутреннего запроса управления устройством для драйвера нижнего фильтра?

В настоящее время я пишу драйвер диска нижнего фильтра для захвата команд 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);

Любая помощь будет оценена по достоинству. Спасибо.

ЗАМЕТКИ:

  • WdfRequestSend() — это сбойная процедура.
  • Код с подпрограммой завершения работает для драйвера диска с верхним фильтром.

person tchau.dev    schedule 19.06.2015    source источник


Ответы (1)


Согласно этому обсуждению на NTDEV, оказывается, что если CompletionRoutine равно NULL, вы необходимо использовать опцию WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET.

person tchau.dev    schedule 19.06.2015