1/* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License as 4 * published by the Free Software Foundation; either version 2 of 5 * the License, or (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 15 * MA 02111-1307 USA 16 */ 17#ifndef SG_PT_WIN32_H 18#define SG_PT_WIN32_H 19/* 20 * The information in this file was obtained from scsi-wnt.h by 21 * Richard Stemmer, rs@epost.de . He in turn gives credit to 22 * Jay A. Key (for scsipt.c). 23 * The plscsi program (by Pat LaVarre <p.lavarre@ieee.org>) has 24 * also been used as a reference. 25 * Much of the information in this header can also be obtained 26 * from msdn.microsoft.com . 27 */ 28 29#include <windows.h> 30 31#define SCSI_MAX_SENSE_LEN 64 32#define SCSI_MAX_CDB_LEN 16 33#define SCSI_MAX_INDIRECT_DATA 8192 34 35typedef struct { 36 USHORT Length; 37 UCHAR ScsiStatus; 38 UCHAR PathId; 39 UCHAR TargetId; 40 UCHAR Lun; 41 UCHAR CdbLength; 42 UCHAR SenseInfoLength; 43 UCHAR DataIn; 44 ULONG DataTransferLength; 45 ULONG TimeOutValue; 46 ULONG DataBufferOffset; 47 ULONG SenseInfoOffset; 48 UCHAR Cdb[SCSI_MAX_CDB_LEN]; 49} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; 50 51 52typedef struct { 53 USHORT Length; 54 UCHAR ScsiStatus; 55 UCHAR PathId; 56 UCHAR TargetId; 57 UCHAR Lun; 58 UCHAR CdbLength; 59 UCHAR SenseInfoLength; 60 UCHAR DataIn; 61 ULONG DataTransferLength; 62 ULONG TimeOutValue; 63 PVOID DataBuffer; 64 ULONG SenseInfoOffset; 65 UCHAR Cdb[SCSI_MAX_CDB_LEN]; 66} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; 67 68 69typedef struct { 70 SCSI_PASS_THROUGH spt; 71 /* plscsi shows a follow on 16 bytes allowing 32 byte cdb */ 72 ULONG Filler; 73 UCHAR ucSenseBuf[SCSI_MAX_SENSE_LEN]; 74 UCHAR ucDataBuf[SCSI_MAX_INDIRECT_DATA]; 75} SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS; 76 77 78typedef struct { 79 SCSI_PASS_THROUGH_DIRECT spt; 80 ULONG Filler; 81 UCHAR ucSenseBuf[SCSI_MAX_SENSE_LEN]; 82} SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; 83 84 85 86typedef struct { 87 UCHAR NumberOfLogicalUnits; 88 UCHAR InitiatorBusId; 89 ULONG InquiryDataOffset; 90} SCSI_BUS_DATA, *PSCSI_BUS_DATA; 91 92 93typedef struct { 94 UCHAR NumberOfBusses; 95 SCSI_BUS_DATA BusData[1]; 96} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; 97 98 99typedef struct { 100 UCHAR PathId; 101 UCHAR TargetId; 102 UCHAR Lun; 103 BOOLEAN DeviceClaimed; 104 ULONG InquiryDataLength; 105 ULONG NextInquiryDataOffset; 106 UCHAR InquiryData[1]; 107} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; 108 109 110typedef struct { 111 ULONG Length; 112 UCHAR PortNumber; 113 UCHAR PathId; 114 UCHAR TargetId; 115 UCHAR Lun; 116} SCSI_ADDRESS, *PSCSI_ADDRESS; 117 118 119/* 120 * method codes 121 */ 122#define METHOD_BUFFERED 0 123#define METHOD_IN_DIRECT 1 124#define METHOD_OUT_DIRECT 2 125#define METHOD_NEITHER 3 126 127/* 128 * file access values 129 */ 130#define FILE_ANY_ACCESS 0 131#define FILE_READ_ACCESS 0x0001 132#define FILE_WRITE_ACCESS 0x0002 133 134 135#define IOCTL_SCSI_BASE 0x00000004 136 137/* 138 * constants for DataIn member of SCSI_PASS_THROUGH* structures 139 */ 140#define SCSI_IOCTL_DATA_OUT 0 141#define SCSI_IOCTL_DATA_IN 1 142#define SCSI_IOCTL_DATA_UNSPECIFIED 2 143 144/* 145 * Standard IOCTL define 146 */ 147#define CTL_CODE(DevType, Function, Method, Access) \ 148 (((DevType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 149 150#define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 151#define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 152#define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) 153#define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) 154#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 155#define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS) 156 157#endif 158