【发布时间】:2010-12-18 21:46:49
【问题描述】:
我正在编写一个通过命名管道与用户级应用程序通信的驱动程序。 用户态应用程序通过调用 CreateNamedPipe() 创建命名管道,然后通过调用 IOCTL 将管道名称传递给驱动程序。然后驱动程序通过调用 ZwCreateFile() 打开管道。
然后,用户态应用程序会执行一个循环,从管道读取请求、处理请求并将结果写回管道,即:
while(1) {
ReadFromPipe
ProcessRequest
WriteToPipe
}
驱动基本上是把请求写入管道,然后直接读回答案:
WriteRequestToPipe
ReadAnswerFromPipe
我的问题是,如果 ReadAnswerFromPipe 在应用程序中发生 WriteToPipe 之前发生在驱动程序中,则 ReadAnswerFromPipe 永远不会返回。 所以基本上在做
WriteRequestToPipe
Sleep(10 seconds)
ReadAnswerFromPipe
解决问题。
为什么我会看到这个?
澄清:我正在使用两个不同的单向管道,尽管应用程序最终成功调用了 WriteToPipe,但 ReadAnswerFromPipe 调用永远不会返回...
【问题讨论】:
-
能否附上相关代码sn-ps?
标签: c windows driver named-pipes drivers