打印

DeviceIoControl()函数的理解

[复制链接]
4572|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nanguamache|  楼主 | 2012-5-10 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DeviceIoControl()是主机应用程序与设备驱动进行通讯的函数,在MSDN中该函数的定义为:
BOOL DeviceIoControl(
  HANDLE
hDevice,              // handle to device of interest
  DWORD dwIoControlCode,       // control code of operation to perform
  LPVOID lpInBuffer,           // pointer to buffer to supply input data
  DWORD nInBufferSize,         // size, in bytes, of input buffer
  LPVOID lpOutBuffer,          // pointer to buffer to receive output data
  DWORD nOutBufferSize,        // size, in bytes, of output buffer
  LPDWORD
lpBytesReturned,     // pointer to variable to receive byte count
  LPOVERLAPPED lpOverlapped    // pointer to structure for asynchronous operation
);
其中:
lpInBuffer ,应用程序传递给驱动程序的数据缓冲区地址。
nInBufferSize ,应用程序传递给驱动程序的数据缓冲区大小,字节数。

lpOutBuffer ,驱动程序返回给应用程序的数据缓冲区地址。

nOutBufferSize ,驱动程序返回给应用程序的数据缓冲区大小,字节数

而在与usb设备进行数据传输时,使用该函数的含义为:
DWORD  ioctl_val=IOCTL_EZUSB_BULK_READ;  //设置从设备中读数据
  Bresult=DeviceIoControl ( hDevice , ioctl_val ,  //从设备读数据
  &bulkControl ,      //端点号
  sizeof ( BULK_TRANSFER_CONTROL),  //传入参数的大小
  buffer ,  //读数据的缓冲区
  length ,  //读数据的长度
  (unsigned long *)&nBytes , //驱动返回的数据的实际长度
  NULL);
我所不理解的是为什么在usb传输中,应用程序给驱动程序的数据缓冲区地址和大小怎么变成了端点号和传入参数大小了呢?

相关帖子

沙发
dqyubsh| | 2012-5-11 12:34 | 只看该作者
这是个通用函数,读写都是一个,靠dwIoControlCode来区分。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

53

帖子

0

粉丝