0

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

4

1 回答 1

0

只是回答希望它会对某人有所帮助。在读取时,您已完成 WdfRequestForwardToIoQueue 以对请求进行排队。这次应用程序 ReadFile 应处于等待状态。当驱动程序中的数据准备好时,获取排队的先前请求并将数据复制到该请求。

于 2020-03-27T08:43:58.767 回答