Winapi 虚拟串行端口Windows驱动程序问题
关于中的样本 在queue.c中,当应用程序从我的虚拟驱动程序请求数据时,会调用EvIoRead。当没有数据时,执行以下代码:Winapi 虚拟串行端口Windows驱动程序问题,winapi,driver,umdf,Winapi,Driver,Umdf,关于中的样本 在queue.c中,当应用程序从我的虚拟驱动程序请求数据时,会调用EvIoRead。当没有数据时,执行以下代码: OID EvtIoRead( _In_ WDFQUEUE Queue, _In_ WDFREQUEST Request, _In_ size_t Length ) { .... if (bytesCopied > 0) { // // Data was read from buffer s
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);
}
}
调用
wdfrequestforwardtooqueue
。然而,我不确定当有新数据时该怎么办。如何触发再次调用EvtIoRead
?只是希望它能对某人有所帮助。
在读取时,您已经完成了WDFrequestForwardtoIQUE以对请求进行排队。此时应用程序读取文件应处于等待状态。当驱动程序中的数据准备就绪时,将上一个请求排队并将数据复制到该请求。您不能尝试再次调用
EvtIoRead
——这是错误的。当有人试图从您的驱动程序读取数据时调用此回调。如果您没有数据-您没有完成请求,但在获得新数据时将其放入io队列(wdFrequestForwardToOqueue
)-您需要从io队列提取请求并完成它在示例中-当新数据-通过WdfIoQueueRetrieveNextRequest从队列中删除请求(queueContext->ReadQueue,&savedRequest);
并通过wdfrequestforwardtooqueue(savedRequest,Queue)放回处理
-此时EvtIoRead
使用此请求调用,但实际上在调用wdfioqueretrievenextrequest
后,您需要复制数据以请求并完成它wdfrequestcomplete with information
。