关于https://github.com/microsoft/Windows-driver-samples/tree/master/serial/VirtualSerial2中的示例。
在queue.c中,当应用程序从我的虚拟驱动程序请求数据时会调用EvIoRead。没有数据时,将执行以下代码:
OID
EvtIoRead(
_In_ WDFQUEUE Queue,
_In_ WDFREQUEST Request,
_In_ size_t Length
)
{
....
if (bytesCopied > 0) {
//
// Data was read from buffer succesfully
//
WdfRequestCompleteWithInformation(Request, status, bytesCopied);
return;
}
else {
//
// No data to read. Queue the request for later processing.
//
status = WdfRequestForwardToIoQueue(Request,
queueContext->ReadQueue);
}
}
WdfRequestForwardToIoQueue
被调用。但是,我不确定在有新数据时该怎么办。如何触发EvtIoRead
再次被调用?
答案 0 :(得分:0)
只需回答,希望对您有所帮助。 在读取时,您已完成WdfRequestForwardToIoQueue来将请求排队。这次应用程序ReadFile应该处于等待状态。在驱动程序中准备好数据后,使排队的上一个请求排队并将数据复制到该请求。