File indexing completed on 2025-03-23 04:28:12
0001 #ifndef WINSPTI_H 0002 #define WINSPTI_H 0003 /* 0004 * 0005 * winspti.h 0006 * SPDX-FileCopyrightText: 2007 Jeremy C. Andrus <jeremy@jeremya.com> 0007 * 0008 * This file is part of the K3b project. 0009 * SPDX-FileCopyrightText: 1998-2007 Sebastian Trueg <trueg@k3b.org> 0010 * 0011 * Parts of this file are inspired (and copied) from various source 0012 * files in the cdrdao project (C) J. Schilling, Andreas Mueller 0013 * and many others. 0014 * 0015 * SPDX-License-Identifier: GPL-2.0-or-later 0016 * See the file "COPYING" for the exact licensing terms. 0017 */ 0018 0019 /*------------------------------------------------------------------------------ 0020 winspti.h 0021 ------------------------------------------------------------------------------*/ 0022 #include <windows.h> 0023 0024 #define SENSE_LEN_SPTI 36 /* Sense length for ASPI is only 14 */ 0025 #define NUM_MAX_NTSCSI_DRIVES 26 /* a: ... z: */ 0026 #define NUM_FLOPPY_DRIVES 2 0027 #define NUM_MAX_NTSCSI_HA NUM_MAX_NTSCSI_DRIVES 0028 0029 #define NTSCSI_HA_INQUIRY_SIZE 36 0030 0031 #define SCSI_CMD_INQUIRY 0x12 0032 0033 typedef struct 0034 { 0035 BYTE ha; /* SCSI Bus # */ 0036 BYTE tgt; /* SCSI Target # */ 0037 BYTE lun; /* SCSI Lun # */ 0038 BYTE PortNumber; /* SCSI Card # (\\.\SCSI%d) */ 0039 BYTE PathId; /* SCSI Bus/Channel # on card n */ 0040 BYTE driveLetter; /* Win32 drive letter (e.g. c:) */ 0041 BOOL bUsed; /* Win32 drive letter is used */ 0042 HANDLE hDevice; /* Win32 handle for ioctl() */ 0043 BYTE inqData[NTSCSI_HA_INQUIRY_SIZE]; 0044 } SPTI_Drive; 0045 0046 typedef struct { 0047 USHORT Length; 0048 UCHAR ScsiStatus; 0049 UCHAR PathId; 0050 UCHAR TargetId; 0051 UCHAR Lun; 0052 UCHAR CdbLength; 0053 UCHAR SenseInfoLength; 0054 UCHAR DataIn; 0055 ULONG DataTransferLength; 0056 ULONG TimeOutValue; 0057 ULONG DataBufferOffset; 0058 ULONG SenseInfoOffset; 0059 UCHAR Cdb[16]; 0060 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; 0061 0062 0063 typedef struct { 0064 USHORT Length; 0065 UCHAR ScsiStatus; 0066 UCHAR PathId; 0067 UCHAR TargetId; 0068 UCHAR Lun; 0069 UCHAR CdbLength; 0070 UCHAR SenseInfoLength; 0071 UCHAR DataIn; 0072 ULONG DataTransferLength; 0073 ULONG TimeOutValue; 0074 PVOID DataBuffer; 0075 ULONG SenseInfoOffset; 0076 UCHAR Cdb[16]; 0077 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; 0078 0079 0080 typedef struct { 0081 SCSI_PASS_THROUGH spt; 0082 ULONG Filler; 0083 UCHAR ucSenseBuf[SENSE_LEN_SPTI]; 0084 UCHAR ucDataBuf[512]; 0085 } SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS; 0086 0087 0088 typedef struct { 0089 SCSI_PASS_THROUGH_DIRECT spt; 0090 ULONG Filler; 0091 UCHAR ucSenseBuf[SENSE_LEN_SPTI]; 0092 } SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; 0093 0094 0095 0096 typedef struct { 0097 UCHAR NumberOfLogicalUnits; 0098 UCHAR InitiatorBusId; 0099 ULONG InquiryDataOffset; 0100 } SCSI_BUS_DATA, *PSCSI_BUS_DATA; 0101 0102 0103 typedef struct { 0104 BYTE SD_Error; 0105 BYTE SD_Segment; 0106 BYTE SD_SenseKey; 0107 DWORD SD_Information; 0108 BYTE SD_AS_Length; 0109 DWORD SD_CommandInformation; 0110 BYTE SD_ASC; 0111 BYTE SD_ASCQ; 0112 BYTE SD_FieldReplaceableUnit; 0113 BYTE SD_SpecificKey1; 0114 BYTE SD_SpecificKey2; 0115 BYTE SD_SpecificKey3; 0116 BYTE SD_Data[14]; 0117 } SCSI_SENSE_DATA, *PSCSI_SENSE_DATA; 0118 0119 0120 0121 typedef struct { 0122 UCHAR NumberOfBusses; 0123 SCSI_BUS_DATA BusData[1]; 0124 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; 0125 0126 0127 typedef struct { 0128 UCHAR PathId; 0129 UCHAR TargetId; 0130 UCHAR Lun; 0131 BOOLEAN DeviceClaimed; 0132 ULONG InquiryDataLength; 0133 ULONG NextInquiryDataOffset; 0134 UCHAR InquiryData[1]; 0135 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; 0136 0137 0138 typedef struct { 0139 ULONG Length; 0140 UCHAR PortNumber; 0141 UCHAR PathId; 0142 UCHAR TargetId; 0143 UCHAR Lun; 0144 } SCSI_ADDRESS, *PSCSI_ADDRESS; 0145 0146 0147 /* 0148 * method codes 0149 */ 0150 #define METHOD_BUFFERED 0 0151 #define METHOD_IN_DIRECT 1 0152 #define METHOD_OUT_DIRECT 2 0153 #define METHOD_NEITHER 3 0154 0155 /* 0156 * file access values 0157 */ 0158 #define FILE_ANY_ACCESS 0 0159 #define FILE_READ_ACCESS 0x0001 0160 #define FILE_WRITE_ACCESS 0x0002 0161 0162 0163 #define IOCTL_SCSI_BASE 0x00000004 0164 0165 /* 0166 * constants for DataIn member of SCSI_PASS_THROUGH* structures 0167 */ 0168 #define SCSI_IOCTL_DATA_OUT 0 0169 #define SCSI_IOCTL_DATA_IN 1 0170 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 0171 0172 /* 0173 * Standard IOCTL define 0174 */ 0175 #define CTL_CODE(DevType, Function, Method, Access) \ 0176 (((DevType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 0177 0178 #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 0179 #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 0180 #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) 0181 #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) 0182 #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 0183 #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS) 0184 0185 #endif // WINSPTI_H