1 /** 2 * @file ntddscsi.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */ 25 #ifndef __NTDDSCSI_H 26 #define __NTDDSCSI_H 27 #pragma GCC system_header 28 #include <_mingw.h> 29 30 /* 31 * SCSI port IOCTL interface. 32 */ 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 #include "ntddk.h" 39 40 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort" 41 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort" 42 43 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER 44 45 #define IOCTL_SCSI_GET_INQUIRY_DATA \ 46 CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) 47 48 #define IOCTL_SCSI_GET_CAPABILITIES \ 49 CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) 50 51 #define IOCTL_SCSI_GET_ADDRESS \ 52 CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS) 53 54 #define IOCTL_SCSI_MINIPORT \ 55 CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 56 57 #define IOCTL_SCSI_PASS_THROUGH \ 58 CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 59 60 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \ 61 CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 62 63 #define IOCTL_SCSI_RESCAN_BUS \ 64 CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS) 65 66 67 DEFINE_GUID(ScsiRawInterfaceGuid, \ 68 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 69 70 DEFINE_GUID(WmiScsiAddressGuid, \ 71 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 72 73 typedef struct _SCSI_PASS_THROUGH { 74 USHORT Length; 75 UCHAR ScsiStatus; 76 UCHAR PathId; 77 UCHAR TargetId; 78 UCHAR Lun; 79 UCHAR CdbLength; 80 UCHAR SenseInfoLength; 81 UCHAR DataIn; 82 ULONG DataTransferLength; 83 ULONG TimeOutValue; 84 ULONG_PTR DataBufferOffset; 85 ULONG SenseInfoOffset; 86 UCHAR Cdb[16]; 87 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; 88 89 typedef struct _SCSI_PASS_THROUGH_DIRECT { 90 USHORT Length; 91 UCHAR ScsiStatus; 92 UCHAR PathId; 93 UCHAR TargetId; 94 UCHAR Lun; 95 UCHAR CdbLength; 96 UCHAR SenseInfoLength; 97 UCHAR DataIn; 98 ULONG DataTransferLength; 99 ULONG TimeOutValue; 100 PVOID DataBuffer; 101 ULONG SenseInfoOffset; 102 UCHAR Cdb[16]; 103 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; 104 105 typedef struct _SRB_IO_CONTROL { 106 ULONG HeaderLength; 107 UCHAR Signature[8]; 108 ULONG Timeout; 109 ULONG ControlCode; 110 ULONG ReturnCode; 111 ULONG Length; 112 } SRB_IO_CONTROL, *PSRB_IO_CONTROL; 113 114 typedef struct _SCSI_ADDRESS { 115 ULONG Length; 116 UCHAR PortNumber; 117 UCHAR PathId; 118 UCHAR TargetId; 119 UCHAR Lun; 120 } SCSI_ADDRESS, *PSCSI_ADDRESS; 121 122 typedef struct _SCSI_BUS_DATA { 123 UCHAR NumberOfLogicalUnits; 124 UCHAR InitiatorBusId; 125 ULONG InquiryDataOffset; 126 }SCSI_BUS_DATA, *PSCSI_BUS_DATA; 127 128 typedef struct _SCSI_ADAPTER_BUS_INFO { 129 UCHAR NumberOfBuses; 130 SCSI_BUS_DATA BusData[1]; 131 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; 132 133 typedef struct _IO_SCSI_CAPABILITIES { 134 ULONG Length; 135 ULONG MaximumTransferLength; 136 ULONG MaximumPhysicalPages; 137 ULONG SupportedAsynchronousEvents; 138 ULONG AlignmentMask; 139 BOOLEAN TaggedQueuing; 140 BOOLEAN AdapterScansDown; 141 BOOLEAN AdapterUsesPio; 142 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES; 143 144 typedef struct _SCSI_INQUIRY_DATA { 145 UCHAR PathId; 146 UCHAR TargetId; 147 UCHAR Lun; 148 BOOLEAN DeviceClaimed; 149 ULONG InquiryDataLength; 150 ULONG NextInquiryDataOffset; 151 UCHAR InquiryData[1]; 152 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; 153 154 #define SCSI_IOCTL_DATA_OUT 0 155 #define SCSI_IOCTL_DATA_IN 1 156 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 157 158 typedef struct _DUMP_POINTERS { 159 PADAPTER_OBJECT AdapterObject; 160 PVOID MappedRegisterBase; 161 PVOID DumpData; 162 PVOID CommonBufferVa; 163 LARGE_INTEGER CommonBufferPa; 164 ULONG CommonBufferSize; 165 BOOLEAN AllocateCommonBuffers; 166 BOOLEAN UseDiskDump; 167 UCHAR Spare1[2]; 168 PVOID DeviceObject; 169 } DUMP_POINTERS, *PDUMP_POINTERS; 170 171 #ifdef __cplusplus 172 } 173 #endif 174 175 #endif /* __NTDDSCSI_H */ 176