superrobust
驱动牛犊
驱动牛犊
  • 注册日期2003-01-04
  • 最后登录2007-08-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1007回复:3

DS中读操作如何正确的把实际读的字节数返回给应用程序

楼主#
更多 发布于:2003-10-17 15:54
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。
不知道上面的做法可以得到正确的实际从设备读回的字节数吗
everything is developing
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-17 17:11
应用程序有点问题,n的值你不用改吗?
答得好的话,请兄弟们加点分,那是对我的肯定
superrobust
驱动牛犊
驱动牛犊
  • 注册日期2003-01-04
  • 最后登录2007-08-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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);
...
}
我不知道驱动程序那部分返回实际读得字节数有没有问题
everything is developing
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-17 17:42
想知道有没有问题,试下就知道了,这里的n的值要改的,改成一个数字就可以了
答得好的话,请兄弟们加点分,那是对我的肯定
游客

返回顶部