rainysky1224
驱动牛犊
驱动牛犊
  • 注册日期2003-02-16
  • 最后登录2004-10-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1339回复:1

关于DeviceIoControl中的控制码问题,斑竹请进

楼主#
更多 发布于:2003-02-21 18:11
好几位同行都在讨论DeviceIoControl函数。
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
);

关于其中dwIoControlCode参数的值,在我的MSDN中(版本较老),
IOCTL_****的有14种,其中IOCTL_DISK_****的8种(除去已被别的码替代的),IOCTL_SERIAL_****的一种,IOCTL_STORAGE_****的5种。
这些都是 Public IOCTLs ;在我机器上安装了VC++6.0,其中
WINIOCTL.H中,定义了更多的控制码。其中IOCTL_STORAGE_****的
有12种。我现在希望能够对移动闪盘操作,经过研究,应该用
IOCTL_SCSI_*****系列控制码。比如说,我想得到设备地址,
发控制码IOCTL_SCSI_GET_ADDRESS,作为第二个参数,配合这个控制码,需要一个SCSI_GET_ADDRESS的结构体作为接受返回值。

我的问题是在我的VC里,找不到已定义的IOCTL_SCSI_****,
而这个系列的控制码是标准的,不是用户可定义的。

据了解,在ntddscsi.h文件中有定义,如何找到这个头文件。
需要安装新版本的VC吗?还是有什么补丁?









just do it
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-02-21 22:01
#define IOCTL_SCSI_GET_ADDRESS      CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_SCSI_BASE             FILE_DEVICE_CONTROLLER

装2KDDK就有了。98DDK也有。
游客

返回顶部