与微软的ndisprot的样品开始我尝试写一个NDIS协议驱动程序。 从用户空间我尝试读取和写入设备同时(出两个线程)。 由于我没有收到任何数据包,ReadFile的系统调用块。 我无法完成在这种状态下WriteFile的系统调用。
CHAR NdisProtDevice[] = "\\\\.\\\\NDISprot";
CHAR * pNdisProtDevice = &NdisProtDevice[0];
this.iHandle = CreateFile(pNdisProtDevice,
GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Blocks, because no frames arrive
bSuccess = (BOOLEAN)ReadFile(Handle,
(LPVOID)pReadBuf,
PacketLength,
&BytesRead,
NULL);
...
// Called some seconds later from another thread, while ReadFile still blocking...
bSuccess = (BOOLEAN)WriteFile(Handle,
pWriteBuf,
PacketLength,
&BytesWritten,
NULL);
我加了一些调试信息,发现与IRP_MJ_WRITE(NdisprotWrite)相关的驱动程序功能被连叫! 用户空间应用和所述设备\ Device \ NDISprot驱动程序块并发访问之间的东西。
我怎么能并发读写的文件?