有关虚拟串行端口Windows驱动程序的问题

时间:2019-12-22 17:52:16

标签: winapi driver umdf

关于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再次被调用?

1 个答案:

答案 0 :(得分:0)

只需回答,希望对您有所帮助。 在读取时,您已完成WdfRequestForwardToIoQueue来将请求排队。这次应用程序ReadFile应该处于等待状态。在驱动程序中准备好数据后,使排队的上一个请求排队并将数据复制到该请求。