Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntddstor.h Source File

ntddstor.h

00001 /*
00002  * ntddstor.h
00003  *
00004  * Storage class 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 __NTDDSTOR_H
00024 #define __NTDDSTOR_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 IOCTL_STORAGE_BASE                FILE_DEVICE_MASS_STORAGE
00037 
00038 #define IOCTL_STORAGE_CHECK_VERIFY \
00039   CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
00040 
00041 #define IOCTL_STORAGE_CHECK_VERIFY2 \
00042   CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
00043 
00044 #define IOCTL_STORAGE_EJECT_MEDIA \
00045   CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
00046 
00047 #define IOCTL_STORAGE_EJECTION_CONTROL \
00048   CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
00049 
00050 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
00051   CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
00052 
00053 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
00054   CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
00055 
00056 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
00057   CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
00058 
00059 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
00060   CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
00061 
00062 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
00063   CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
00064 
00065 #define IOCTL_STORAGE_LOAD_MEDIA \
00066   CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
00067 
00068 #define IOCTL_STORAGE_LOAD_MEDIA2 \
00069   CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
00070 
00071 #define IOCTL_STORAGE_MCN_CONTROL \
00072   CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
00073 
00074 #define IOCTL_STORAGE_MEDIA_REMOVAL \
00075   CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
00076 
00077 #define IOCTL_STORAGE_PREDICT_FAILURE \
00078   CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
00079 
00080 #define IOCTL_STORAGE_QUERY_PROPERTY \
00081   CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
00082 
00083 #define IOCTL_STORAGE_RELEASE \
00084   CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
00085 
00086 #define IOCTL_STORAGE_RESERVE \
00087   CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
00088 
00089 #define IOCTL_STORAGE_RESET_BUS \
00090   CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00091 
00092 #define IOCTL_STORAGE_RESET_DEVICE \
00093   CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00094 
00095 
00096 DEFINE_GUID(GUID_DEVINTERFACE_DISK,
00097   0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00098 
00099 DEFINE_GUID(GUID_DEVINTERFACE_CDROM,
00100   0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00101 
00102 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,
00103   0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00104 
00105 DEFINE_GUID(GUID_DEVINTERFACE_TAPE,
00106   0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00107 
00108 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,
00109   0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00110 
00111 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,
00112   0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00113 
00114 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,
00115   0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00116 
00117 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,
00118   0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00119 
00120 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,
00121   0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00122 
00123 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,
00124   0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
00125 
00126 
00127 typedef enum _STORAGE_MEDIA_TYPE {
00128   DDS_4mm = 0x20,
00129   MiniQic,
00130   Travan,
00131   QIC,
00132   MP_8mm,
00133   AME_8mm,
00134   AIT1_8mm,
00135   DLT,
00136   NCTP,
00137   IBM_3480,
00138   IBM_3490E,
00139   IBM_Magstar_3590,
00140   IBM_Magstar_MP,
00141   STK_DATA_D3,
00142   SONY_DTF,
00143   DV_6mm,
00144   DMI,
00145   SONY_D2,
00146   CLEANER_CARTRIDGE,
00147   CD_ROM,
00148   CD_R,
00149   CD_RW,
00150   DVD_ROM,
00151   DVD_R,
00152   DVD_RW,
00153   MO_3_RW,
00154   MO_5_WO,
00155   MO_5_RW,
00156   MO_5_LIMDOW,
00157   PC_5_WO,
00158   PC_5_RW,
00159   PD_5_RW,
00160   ABL_5_WO,
00161   PINNACLE_APEX_5_RW,
00162   SONY_12_WO,
00163   PHILIPS_12_WO,
00164   HITACHI_12_WO,
00165   CYGNET_12_WO,
00166   KODAK_14_WO,
00167   MO_NFR_525,
00168   NIKON_12_RW,
00169   IOMEGA_ZIP,
00170   IOMEGA_JAZ,
00171   SYQUEST_EZ135,
00172   SYQUEST_EZFLYER,
00173   SYQUEST_SYJET,
00174   AVATAR_F2,
00175   MP2_8mm,
00176   DST_S,
00177   DST_M,
00178   DST_L,
00179   VXATape_1,
00180   VXATape_2,
00181   STK_9840,
00182   LTO_Ultrium,
00183   LTO_Accelis,
00184   DVD_RAM,
00185   AIT_8mm,
00186   ADR_1,
00187   ADR_2
00188 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
00189 
00190 typedef enum _STORAGE_BUS_TYPE {
00191     BusTypeUnknown = 0x00,
00192     BusTypeScsi,
00193     BusTypeAtapi,
00194     BusTypeAta,
00195     BusType1394,
00196     BusTypeSsa,
00197     BusTypeFibre,
00198     BusTypeUsb,
00199     BusTypeRAID,
00200     BusTypeMaxReserved = 0x7F
00201 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
00202 
00203 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
00204 #define MEDIA_ERASEABLE                   0x00000001
00205 #define MEDIA_WRITE_ONCE                  0x00000002
00206 #define MEDIA_READ_ONLY                   0x00000004
00207 #define MEDIA_READ_WRITE                  0x00000008
00208 #define MEDIA_WRITE_PROTECTED             0x00000100
00209 #define MEDIA_CURRENTLY_MOUNTED           0x80000000
00210 
00211 typedef struct _DEVICE_MEDIA_INFO {
00212   union {
00213     struct {
00214       LARGE_INTEGER  Cylinders;
00215       STORAGE_MEDIA_TYPE  MediaType;
00216       ULONG  TracksPerCylinder;
00217       ULONG  SectorsPerTrack;
00218       ULONG  BytesPerSector;
00219       ULONG  NumberMediaSides;
00220       ULONG  MediaCharacteristics; 
00221     } DiskInfo;
00222     struct {
00223       LARGE_INTEGER  Cylinders;
00224       STORAGE_MEDIA_TYPE  MediaType;
00225       ULONG  TracksPerCylinder;
00226       ULONG  SectorsPerTrack;
00227       ULONG  BytesPerSector;
00228       ULONG  NumberMediaSides;
00229       ULONG  MediaCharacteristics; 
00230     } RemovableDiskInfo;
00231     struct {
00232       STORAGE_MEDIA_TYPE  MediaType;
00233       ULONG  MediaCharacteristics; 
00234       ULONG  CurrentBlockSize;
00235       STORAGE_BUS_TYPE  BusType;
00236       union {
00237         struct {
00238           UCHAR  MediumType;
00239           UCHAR  DensityCode;
00240         } ScsiInformation;
00241       } BusSpecificData;
00242     } TapeInfo;
00243   } DeviceSpecific;
00244 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
00245 
00246 typedef struct _GET_MEDIA_TYPES {
00247   ULONG  DeviceType;
00248   ULONG  MediaInfoCount;
00249   DEVICE_MEDIA_INFO  MediaInfo[1];
00250 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
00251 
00252 typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
00253   ULONG  Version;
00254   ULONG  Size;
00255   ULONG  MaximumTransferLength;
00256   ULONG  MaximumPhysicalPages;
00257   ULONG  AlignmentMask;
00258   BOOLEAN  AdapterUsesPio;
00259   BOOLEAN  AdapterScansDown;
00260   BOOLEAN  CommandQueueing;
00261   BOOLEAN  AcceleratedTransfer;
00262   STORAGE_BUS_TYPE  BusType;
00263   USHORT  BusMajorVersion;
00264   USHORT  BusMinorVersion;
00265 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
00266 
00267 typedef struct _STORAGE_BUS_RESET_REQUEST {
00268   UCHAR  PathId;
00269 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
00270 
00271 typedef struct _STORAGE_DESCRIPTOR_HEADER {
00272   ULONG  Version;
00273   ULONG  Size;
00274 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
00275 
00276 typedef struct _STORAGE_DEVICE_DESCRIPTOR {
00277   ULONG  Version;
00278   ULONG  Size;
00279   UCHAR  DeviceType;
00280   UCHAR  DeviceTypeModifier;
00281   BOOLEAN  RemovableMedia;
00282   BOOLEAN  CommandQueueing;
00283   ULONG  VendorIdOffset;
00284   ULONG  ProductIdOffset;
00285   ULONG  ProductRevisionOffset;
00286   ULONG  SerialNumberOffset;
00287   STORAGE_BUS_TYPE  BusType;
00288   ULONG  RawPropertiesLength;
00289   UCHAR  RawDeviceProperties[1];
00290 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
00291 
00292 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
00293   ULONG  Version;
00294   ULONG  Size;
00295   ULONG  NumberOfIdentifiers;
00296   UCHAR  Identifiers[1];
00297 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
00298 
00299 typedef struct _STORAGE_DEVICE_NUMBER {
00300   DEVICE_TYPE  DeviceType;
00301   ULONG  DeviceNumber;
00302   ULONG  PartitionNumber;
00303 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
00304 
00305 typedef struct _STORAGE_PREDICT_FAILURE {
00306   ULONG  PredictFailure;
00307   UCHAR  VendorSpecific[512];
00308 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
00309 
00310 typedef enum _STORAGE_PROPERTY_ID {
00311   StorageDeviceProperty = 0,
00312   StorageAdapterProperty,
00313   StorageDeviceIdProperty
00314 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
00315 
00316 typedef enum _STORAGE_QUERY_TYPE {
00317   PropertyStandardQuery = 0, 
00318   PropertyExistsQuery, 
00319   PropertyMaskQuery, 
00320   PropertyQueryMaxDefined 
00321 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
00322 
00323 typedef struct _STORAGE_PROPERTY_QUERY {
00324   STORAGE_PROPERTY_ID  PropertyId;
00325   STORAGE_QUERY_TYPE  QueryType;
00326   UCHAR  AdditionalParameters[1];
00327 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
00328 
00329 #ifdef __cplusplus
00330 }
00331 #endif
00332 
00333 #endif /* __NTDDSTOR_H */