2017-02-09 7 views
1

Как видно из названия предложить у меня есть проблемы с помощью следующего кода:Как передать другой запрос в стек?

EvtDeviceIoWrite(
    IN WDFQUEUE Queue, 
    IN WDFREQUEST Request, 
    IN size_t Length 
) { 
WDF_OBJECT_ATTRIBUTES_INIT(&attributes); 
attributes.ParentObject = WdfIoQueueGetDevice(Queue); 
status = WdfRequestCreate(&attributes, WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)), &newRequest); 
if (!NT_SUCCESS(status)) { 
    KdPrint(("Serial: failed 0x%x\n", status)); 
    WdfRequestComplete(Request, status); 
    return; 
} 
WDF_OBJECT_ATTRIBUTES_INIT(&attributes); 
attributes.ParentObject = newRequest; 
status = WdfMemoryCreate(&attributes, NonPagedPool, 'MyPl', 10, &newmem, &newbuf); 
if (!NT_SUCCESS(status)) { 
    KdPrint(("Serial: failed 0x%x\n", status)); 
    WdfRequestComplete(Request, status); 
    return; 
} 

WDF_REQUEST_SEND_OPTIONS_INIT(&options, 
    WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET); 
ret = WdfRequestSend(newRequest, WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)), &options); 
} 
if (ret == FALSE) { 
    status = WdfRequestGetStatus(newRequest); 
    KdPrint(("WdfRequestSend failed: 0x%x\n", status)); 
    WdfRequestComplete(Request, status); 
} 

Я не могу отправить newRequest вниз по стеку ... значение RET является «FALSE» и статус STATUS_INVALID_DEVICE_STATE. Как сделать устройство в правильном состоянии?

Я сделал все правильно, так как link предлагает. Итак, суммируя, я не могу отправить запрос в локальный стек IO, Target IO находится не в правильном состоянии, и я не знаю, как заставить его работать?

ответ

0
WDF_OBJECT_ATTRIBUTES_INIT(&attributes); 
attributes.ParentObject = WdfIoQueueGetDevice(Queue); 
status = WdfRequestCreate(&attributes, WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)), &newRequest); 
if (!NT_SUCCESS(status)) { 
    KdPrint(("Serial: failed 0x%x\n", status)); 
    WdfRequestComplete(Request, status); 
    return; 
} 
WDF_OBJECT_ATTRIBUTES_INIT(&attributes); 
attributes.ParentObject = newRequest; 
status = WdfMemoryCreate(&attributes, NonPagedPool, 'MyPl', 10, &newMem, &newBuf); 
if (!NT_SUCCESS(status)) { 
    KdPrint(("Serial: failed 0x%x\n", status)); 
    WdfRequestComplete(Request, status); 
    return; 
} 
/*Proessing request */ 


/*End Processing request */ 
WdfRequestFormatRequestUsingCurrentType(newRequest); 
WdfIoTargetFormatRequestForWrite(WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)), newRequest, newMem, NULL , NULL); 
ret = WdfRequestSend(newRequest, WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)), NULL); 

if (ret == FALSE) { 
    status = WdfRequestGetStatus(newRequest); 
    KdPrint(("WdfRequestSend failed: 0x%x\n", status)); 

} 
WdfRequestComplete(Request, status); 

Это как его достичь.

 Смежные вопросы

  • Нет связанных вопросов^_^