7 // Force the compiler to NOT add padding bytes
10 typedef struct _SCSI_PASS_THROUGH {
17 uint8_t SenseInfoLength;
19 uint32_t DataTransferLength;
20 uint32_t TimeOutValue;
21 uint32_t DataBufferOffset;
22 uint32_t SenseInfoOffset;
24 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
26 typedef struct _SCSI_PASS_THROUGH_DIRECT {
33 uint8_t SenseInfoLength;
35 uint32_t DataTransferLength;
36 uint32_t TimeOutValue;
38 uint32_t SenseInfoOffset;
40 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
42 typedef struct _SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER {
43 SCSI_PASS_THROUGH_DIRECT Spt;
45 uint8_t SenseBuf[32]; // Note: Ensure your code uses SenseBuf, not SenseBuffer
46 } SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER;
50 // Manually define SCSI constants if headers are missing
52 #ifndef IOCTL_SCSI_PASS_THROUGH_DIRECT
53 #define IOCTL_SCSI_PASS_THROUGH_DIRECT 0x4D014
56 #ifndef IOCTL_SCSI_PASS_THROUGH
57 #define IOCTL_SCSI_PASS_THROUGH 0x0004D004
60 #ifndef SCSI_IOCTL_DATA_OUT
61 #define SCSI_IOCTL_DATA_OUT 0
64 #ifndef SCSI_IOCTL_DATA_IN
65 #define SCSI_IOCTL_DATA_IN 1
68 #ifndef SCSI_IOCTL_DATA_UNSPECIFIED
69 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
72 #ifndef FSCTL_LOCK_VOLUME
73 #define FSCTL_LOCK_VOLUME 0x00090018
75 #ifndef FSCTL_DISMOUNT_VOLUME
76 #define FSCTL_DISMOUNT_VOLUME 0x00090020
79 #ifndef FSCTL_UNLOCK_VOLUME
80 #define FSCTL_UNLOCK_VOLUME 0x0009001c