阅读:1007回复:3
DS中读操作如何正确的把实际读的字节数返回给应用程序
DO_Direct_IO方式,希望返回实际从设备读的字节数给应用程序。
下面是相关代码,烦劳指点一下 NTSTATUS Pci9052Device::Read(KIrp I) {... KMemory Mem(I.Mdl()); PUCHAR pBuffer=(PUCHAR) Mem.MapToSystemSpace(); ULONG dwTotalSize = I.ReadSize(CURRENT); ULONG dwBytesRead = 0;//要返回的实际字节数 m_MemoryRange2.inb(0,pBuffer,dwTotalSize); //下段代码是我加的,想通过判断执行上面一条读指令后pBuffer //每个字节是否为空来确定实际从设备读回的字节数。 for(ULONG i=0; i<dwTotalSize; i++) { if(pBuffer==NULL) { dwBytesRead=i; break;} dwBytesRead+=dwBytesRead; } I.Information() = dwBytesRead; return I.PnpComplete(this, status); } 应用程序 ... ReadFile(hDevice, buf, n, &nRead, NULL); printf(\"%d bytes read from device (%d requested).\\n\",nRead, n); ... 那么nRead的值就等于dwBytesRead。 不知道上面的做法可以得到正确的实际从设备读回的字节数吗 |
|
|
沙发#
发布于:2003-10-17 17:11
应用程序有点问题,n的值你不用改吗?
|
|
|
板凳#
发布于:2003-10-17 17:31
哎,我一时懒,没贴完。应用是这样的
main() {... int val=10; doRead(val); ...} void doRead(int n) { char *buf; ULONG nRead; buf = (char *) malloc(n); ReadFile(hDevice, buf, n, &nRead, NULL); printf(\"%d bytes read from device (%d requested).\\n\", nRead, n); ... } 我不知道驱动程序那部分返回实际读得字节数有没有问题 |
|
|
地板#
发布于:2003-10-17 17:42
想知道有没有问题,试下就知道了,这里的n的值要改的,改成一个数字就可以了
|
|
|