我正在编写一个通过命名管道与用户级应用程序通信的驱动程序。用户态应用程序通过调用 CreateNamedPipe() 创建命名管道,然后通过调用 IOCTL 将管道名称传递给驱动程序。然后驱动程序通过调用 ZwCreateFile() 打开管道。
用户态应用程序然后点击一个循环,从管道读取请求,处理请求并将结果写回管道,即:
while(1) {
ReadFromPipe
ProcessRequest
WriteToPipe
}
驱动程序基本上将请求写入管道,然后直接读回答案:
WriteRequestToPipe
ReadAnswerFromPipe
我的问题是,如果 ReadAnswerFromPipe 在应用程序中发生 WriteToPipe 之前发生在驱动程序中,则 ReadAnswerFromPipe 永远不会返回。所以基本上在做
WriteRequestToPipe
Sleep(10 seconds)
ReadAnswerFromPipe
解决问题。
为什么我会看到这个?
澄清:我正在使用两个不同的单向管道,尽管应用程序最终成功调用了 WriteToPipe,但 ReadAnswerFromPipe 调用永远不会返回......