Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntddscsi.h Source File

ntddscsi.h

00001 /*
00002  * ntddscsi.h
00003  *
00004  * SCSI port IOCTL interface.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __NTDDSCSI_H
00024 #define __NTDDSCSI_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 
00036 #define DD_SCSI_DEVICE_NAME               "\\Device\\ScsiPort"
00037 #define DD_SCSI_DEVICE_NAME_U             L"\\Device\\ScsiPort"
00038 
00039 #define IOCTL_SCSI_BASE                   FILE_DEVICE_CONTROLLER
00040 
00041 #define IOCTL_SCSI_GET_INQUIRY_DATA \
00042   CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
00043 
00044 #define IOCTL_SCSI_GET_CAPABILITIES \
00045   CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
00046 
00047 #define IOCTL_SCSI_GET_ADDRESS \
00048   CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
00049 
00050 #define IOCTL_SCSI_MINIPORT \
00051   CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00052 
00053 #define IOCTL_SCSI_PASS_THROUGH \
00054   CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00055 
00056 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \
00057   CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00058 
00059 #define IOCTL_SCSI_RESCAN_BUS \
00060   CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
00061 
00062 
00063 DEFINE_GUID(ScsiRawInterfaceGuid, \
00064   0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00065 
00066 DEFINE_GUID(WmiScsiAddressGuid, \
00067   0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00068 
00069 typedef struct _SCSI_PASS_THROUGH {
00070   USHORT  Length;
00071   UCHAR  ScsiStatus;
00072   UCHAR  PathId;
00073   UCHAR  TargetId;
00074   UCHAR  Lun;
00075   UCHAR  CdbLength;
00076   UCHAR  SenseInfoLength;
00077   UCHAR  DataIn;
00078   ULONG  DataTransferLength;
00079   ULONG  TimeOutValue;
00080   ULONG_PTR DataBufferOffset;
00081   ULONG  SenseInfoOffset;
00082   UCHAR  Cdb[16];
00083 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
00084 
00085 typedef struct _SCSI_PASS_THROUGH_DIRECT {
00086   USHORT  Length;
00087   UCHAR  ScsiStatus;
00088   UCHAR  PathId;
00089   UCHAR  TargetId;
00090   UCHAR  Lun;
00091   UCHAR  CdbLength;
00092   UCHAR  SenseInfoLength;
00093   UCHAR  DataIn;
00094   ULONG  DataTransferLength;
00095   ULONG  TimeOutValue;
00096   PVOID  DataBuffer;
00097   ULONG  SenseInfoOffset;
00098   UCHAR  Cdb[16];
00099 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
00100 
00101 typedef struct _SRB_IO_CONTROL { 
00102   ULONG  HeaderLength; 
00103   UCHAR  Signature[8]; 
00104   ULONG  Timeout; 
00105   ULONG  ControlCode; 
00106   ULONG  ReturnCode; 
00107   ULONG  Length; 
00108 } SRB_IO_CONTROL, *PSRB_IO_CONTROL; 
00109 
00110 typedef struct _SCSI_ADDRESS {
00111     ULONG  Length;
00112     UCHAR  PortNumber;
00113     UCHAR  PathId;
00114     UCHAR  TargetId;
00115     UCHAR  Lun;
00116 } SCSI_ADDRESS, *PSCSI_ADDRESS;
00117 
00118 typedef struct _SCSI_BUS_DATA {
00119     UCHAR  NumberOfLogicalUnits;
00120     UCHAR  InitiatorBusId;
00121     ULONG  InquiryDataOffset;
00122 }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
00123 
00124 typedef struct _SCSI_ADAPTER_BUS_INFO {
00125     UCHAR  NumberOfBuses;
00126     SCSI_BUS_DATA  BusData[1];
00127 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
00128 
00129 typedef struct _IO_SCSI_CAPABILITIES {
00130     ULONG  Length;
00131     ULONG  MaximumTransferLength;
00132     ULONG  MaximumPhysicalPages;
00133     ULONG  SupportedAsynchronousEvents;
00134     ULONG  AlignmentMask;
00135     BOOLEAN  TaggedQueuing;
00136     BOOLEAN  AdapterScansDown;
00137     BOOLEAN  AdapterUsesPio;
00138 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
00139 
00140 typedef struct _SCSI_INQUIRY_DATA {
00141     UCHAR  PathId;
00142     UCHAR  TargetId;
00143     UCHAR  Lun;
00144     BOOLEAN  DeviceClaimed;
00145     ULONG  InquiryDataLength;
00146     ULONG  NextInquiryDataOffset;
00147     UCHAR  InquiryData[1];
00148 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
00149 
00150 #define SCSI_IOCTL_DATA_OUT               0
00151 #define SCSI_IOCTL_DATA_IN                1
00152 #define SCSI_IOCTL_DATA_UNSPECIFIED       2
00153 
00154 typedef struct _DUMP_POINTERS {
00155     PADAPTER_OBJECT  AdapterObject;
00156     PVOID  MappedRegisterBase;
00157     PVOID  DumpData;
00158     PVOID  CommonBufferVa;
00159     LARGE_INTEGER  CommonBufferPa;
00160     ULONG  CommonBufferSize;
00161     BOOLEAN  AllocateCommonBuffers;
00162     BOOLEAN  UseDiskDump;
00163     UCHAR  Spare1[2];
00164     PVOID  DeviceObject;
00165 } DUMP_POINTERS, *PDUMP_POINTERS;
00166 
00167 #ifdef __cplusplus
00168 }
00169 #endif
00170 
00171 #endif /* __NTDDSCSI_H */