cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1575回复:2

应用程序和驱动程序进行通信的问题(DeviceIoControl)

楼主#
更多 发布于:2003-07-19 12:43
应用程序和驱动程序进行通信的问题(DeviceIoControl)
问题如下:(为了突出问题,我只从程序中取出了相关的一段。)
应用程序中调用DeviceIoControl:
USHORT bufInput[100];
for(int i=0;i<100;i++)
    bufInput=100-i;
if (!DeviceIoControl(hDevice,
UPLOAD_TO_DSP,
bufInput,
100,
NULL,
0,
&nOutput,
NULL)
  )
{
printf(\"ERROR: DeviceIoControl returns %0x.\", GetLastError());
Exit(1);
}

传递了100个数到驱动程序中。

驱动程序:
NTSTATUS status = STATUS_SUCCESS;
ULONG     StartPos = 0;
ULONG     wLength = 0 ;

ULONG    *pBuffer = NULL;
pBuffer = (PULONG)I.IoctlBuffer();
if(pBuffer == NULL)
{
I.Information() = 0;
status = STATUS_BUFFER_TOO_SMALL;
}
else
{
            StartPos = 0x80; //中断向量首地址
wLength  = I.IoctlInputBufferSize();
m_Ctl_MemoryRange.outw(PCI_DSP_HPIC_OFFSET,0x0303);
m_Ctl_MemoryRange.outd(PCI_DSP_HPIA_OFFSET,StartPos);
///这里的个数应该怎么设定?传递过来的是什么类型?
for(ULONG i=0;i<wLength/2;i++)
{ m_Ctl_MemoryRange.outd(PCI_DSP_HPID0_OFFSET,pBuffer );
DbgPrint(\"Current Data is %x \\n\", pBuffer );

           }          
      }

return status;

这个程序通过softice
在驱动里面看到只有应用程序数组中的第一个数:100得到了传递,其余所有数都变成了0。(即没有传递!)为什么呢 ?
我将DeviceIoControl()中的第三个参量取指针、取地址都试过了,还是只有一个值得到了传递!究竟是什么问题呢?如何解决?请帮帮忙!谢谢!






 

[编辑 -  7/19/03 by  cb615cb]

[编辑 -  7/19/03 by  cb615cb]
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-19 15:39
用deviceiocontrol做关键词在本版搜索一下。
may be you can get something
cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-19 12:51
发的位置怎么到这里了?应该是到ABC初学者的!还不许我转移!
游客

返回顶部