vc--利用DeviceIoControl向storage发送命令

来源:互联网 发布:www.atv444.com新域名 编辑:程序博客网 时间:2024/04/28 05:19

#include <windows.h>

#include <Setupapi.h>

#include <string.h>

#include <stddef.h>

#include <ntddscsi.h>

#include <winioctl.h>

#include "usbhead.h"

 

 

typedef struct

{

SCSI_PASS_THROUGH Spt;

BYTE Sense[18];

BYTE Data[36];

} SISC_CMD;

 

 

BOOL  bSuccess ;

DWORD nBytes = 0 ;

SISC_CMD  cmd ;

 

cmd.Spt.Length = sizeof(cmd.Spt);

cmd.Spt.SenseInfoLength = sizeof(cmd.Sense);

cmd.Spt.DataTransferLength = sizeof(cmd.Data);

cmd.Spt.SenseInfoOffset = sizeof( SCSI_PASS_THROUGH ) ;//offsetof(cmd, Sense);

cmd.Spt.DataBufferOffset = sizeof( SCSI_PASS_THROUGH )  + 18 ;//offsetof(cmd, Data);

cmd.Spt.TimeOutValue = 30;

cmd.Spt.DataIn = SCSI_IOCTL_DATA_IN;

cmd.Spt.CdbLength = 6;

cmd.Spt.Cdb[0] = 0x12; // inquiry opcode

cmd.Spt.Cdb[1] = 0x00;

cmd.Spt.Cdb[2] = 0x00;

cmd.Spt.Cdb[3] = 0x00;

cmd.Spt.Cdb[4] = sizeof(cmd.Data);

cmd.Spt.Cdb[5] = 0x00;

 

bSuccess = ::DeviceIoControl(hDevice,

IOCTL_SCSI_PASS_THROUGH,

&cmd, 

sizeof(cmd),

&cmd, 

sizeof(cmd),

&nBytes,

(LPOVERLAPPED)NULL);

 

return false ;

 

 

本文发送的 inquiry 命令 其他命令换掉0x12就可以了

原创粉丝点击