阅读:1339回复:1
关于DeviceIoControl中的控制码问题,斑竹请进
好几位同行都在讨论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吗?还是有什么补丁? |
|
|
沙发#
发布于: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也有。 |
|