HANDLE hDevice = CreateFile( strYouDiscPath/* like list: \\.\e: */, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_OVERLAPPED, NULL );
SCSI_PASS_THROUGH_DIRECT sptd = { 0 };
memset( &sptd, 0, sizeof( SCSI_PASS_THROUGH_DIRECT ));
sptd.Length = sizeof( SCSI_PASS_THROUGH_DIRECT );
sptd.PathId = 0;
sptd.TargetId = 0;
sptd.Lun = 0;
sptd.CdbLength = 16;
sptd.SenseInfoLength = 0;
sptd.SenseInfoOffset = 0;
sptd.DataIn = SCSI_IOCTL_DATA_OUT;
sptd.DataTransferLength = 0;
sptd.TimeOutValue = 5;
sptd.DataBuffer = NULL;
sptd.Cdb[ 0 ] = 0X30; // 你的命令十六进制值
if( DeviceIoControl( hDevice, IOCTL_SCSI_PASS_THROUGH_DIRECT, &sptd, sizeof( SCSI_PASS_THROUGH_DIRECT ), NULL, 0, &dwByteReturned, NULL ))
{
Log( _T(" SCSI send command to device OK. %d\r\n") );
}
else
{
DWORD dwRet = GetLastError();
LogTrace( _T(" SCSI send command to device fail. Error: %d \r\n"), GetLastError() );
}
CloseHandle( hDevice );
SCSI_PASS_THROUGH_DIRECT sptd = { 0 };
memset( &sptd, 0, sizeof( SCSI_PASS_THROUGH_DIRECT ));
sptd.Length = sizeof( SCSI_PASS_THROUGH_DIRECT );
sptd.PathId = 0;
sptd.TargetId = 0;
sptd.Lun = 0;
sptd.CdbLength = 16;
sptd.SenseInfoLength = 0;
sptd.SenseInfoOffset = 0;
sptd.DataIn = SCSI_IOCTL_DATA_OUT;
sptd.DataTransferLength = 0;
sptd.TimeOutValue = 5;
sptd.DataBuffer = NULL;
sptd.Cdb[ 0 ] = 0X30; // 你的命令十六进制值
if( DeviceIoControl( hDevice, IOCTL_SCSI_PASS_THROUGH_DIRECT, &sptd, sizeof( SCSI_PASS_THROUGH_DIRECT ), NULL, 0, &dwByteReturned, NULL ))
{
Log( _T(" SCSI send command to device OK. %d\r\n") );
}
else
{
DWORD dwRet = GetLastError();
LogTrace( _T(" SCSI send command to device fail. Error: %d \r\n"), GetLastError() );
}
CloseHandle( hDevice );