ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntdddisk.h
Go to the documentation of this file.
00001 /*
00002  * ntdddisk.h
00003  *
00004  * Disk 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 _NTDDDISK_H_
00024 #define _NTDDDISK_H_
00025 
00026 /* Helper macro to enable gcc's extension.  */
00027 #ifndef __GNU_EXTENSION
00028 #ifdef __GNUC__
00029 #define __GNU_EXTENSION __extension__
00030 #else
00031 #define __GNU_EXTENSION
00032 #endif
00033 #endif
00034 
00035 #include "ntddstor.h"
00036 
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040 
00041 #define DD_DISK_DEVICE_NAME               "\\Device\\UNKNOWN"
00042 #define DD_DISK_DEVICE_NAME_U             L"\\Device\\UNKNOWN"
00043 
00044 #define IOCTL_DISK_BASE                   FILE_DEVICE_DISK
00045 
00046 #define IOCTL_DISK_CHECK_VERIFY \
00047   CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
00048 
00049 #define IOCTL_DISK_CONTROLLER_NUMBER \
00050   CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
00051 
00052 #define IOCTL_DISK_CREATE_DISK \
00053   CTL_CODE(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00054 
00055 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT \
00056   CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00057 
00058 #define IOCTL_DISK_FIND_NEW_DEVICES \
00059   CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
00060 
00061 #define IOCTL_DISK_FORMAT_TRACKS \
00062   CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00063 
00064 #define IOCTL_DISK_FORMAT_TRACKS_EX \
00065   CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00066 
00067 #define IOCTL_DISK_GET_CACHE_INFORMATION \
00068   CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS)
00069 
00070 #define IOCTL_DISK_GET_DRIVE_GEOMETRY \
00071   CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
00072 
00073 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \
00074   CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
00075 
00076 #define IOCTL_DISK_GET_DRIVE_LAYOUT \
00077   CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
00078 
00079 #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \
00080   CTL_CODE(IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS)
00081 
00082 #define IOCTL_DISK_GET_MEDIA_TYPES \
00083   CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
00084 
00085 #define IOCTL_DISK_GET_LENGTH_INFO \
00086   CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS)
00087 
00088 #define IOCTL_DISK_GET_PARTITION_INFO \
00089   CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
00090 
00091 #define IOCTL_DISK_GET_PARTITION_INFO_EX \
00092   CTL_CODE(IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS)
00093 
00094 #define IOCTL_DISK_GROW_PARTITION \
00095   CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00096 
00097 #define IOCTL_DISK_HISTOGRAM_STRUCTURE \
00098   CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)
00099 
00100 #define IOCTL_DISK_HISTOGRAM_DATA \
00101   CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)
00102 
00103 #define IOCTL_DISK_HISTOGRAM_RESET \
00104   CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)
00105 
00106 #define IOCTL_DISK_INTERNAL_CLEAR_VERIFY \
00107   CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS)
00108 
00109 #define IOCTL_DISK_INTERNAL_SET_VERIFY \
00110   CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
00111 
00112 #define IOCTL_DISK_IS_WRITABLE \
00113   CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
00114 
00115 #define IOCTL_DISK_LOGGING \
00116   CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)
00117 
00118 #define IOCTL_DISK_PERFORMANCE \
00119   CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
00120 
00121 #define IOCTL_DISK_PERFORMANCE_OFF \
00122   CTL_CODE(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS)
00123 
00124 #define IOCTL_DISK_REASSIGN_BLOCKS \
00125   CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00126 
00127 #define IOCTL_DISK_REQUEST_DATA \
00128   CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
00129 
00130 #define IOCTL_DISK_REQUEST_STRUCTURE \
00131   CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)
00132 
00133 #define IOCTL_DISK_MEDIA_REMOVAL \
00134   CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
00135 
00136 #define IOCTL_DISK_EJECT_MEDIA \
00137   CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
00138 
00139 #define IOCTL_DISK_LOAD_MEDIA \
00140   CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
00141 
00142 #define IOCTL_DISK_RESERVE \
00143   CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
00144 
00145 #define IOCTL_DISK_RELEASE \
00146   CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
00147 
00148 #define IOCTL_DISK_FIND_NEW_DEVICES \
00149   CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
00150 
00151 #define IOCTL_DISK_SET_CACHE_INFORMATION \
00152   CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00153 
00154 //
00155 // NTDDI_WIN2003 was an older define used in the early beta builds, which
00156 // Microsoft forgot to fix in a few headers.
00157 // NTDDI_WS03 is the correct term.
00158 //
00159 #if (NTDDI_VERSION < NTDDI_WS03)
00160 #define IOCTL_DISK_GET_WRITE_CACHE_STATE \
00161   CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS)
00162 #else
00163 #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE \
00164   CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS)
00165 #endif
00166 
00167 #define IOCTL_DISK_SET_DRIVE_LAYOUT \
00168   CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00169 
00170 #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \
00171   CTL_CODE(IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00172 
00173 #define IOCTL_DISK_SET_PARTITION_INFO \
00174   CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00175 
00176 #define IOCTL_DISK_SET_PARTITION_INFO_EX \
00177   CTL_CODE(IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00178 
00179 #define IOCTL_DISK_UPDATE_DRIVE_SIZE \
00180   CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00181 
00182 #define IOCTL_DISK_VERIFY \
00183   CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
00184 
00185 #define SMART_GET_VERSION \
00186   CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
00187 
00188 #define SMART_RCV_DRIVE_DATA \
00189   CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00190 
00191 #define SMART_SEND_DRIVE_COMMAND \
00192   CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00193 
00194 #if(_WIN32_WINNT >= 0x0500)
00195 #define IOCTL_DISK_UPDATE_DRIVE_SIZE        CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00196 #define IOCTL_DISK_GROW_PARTITION           CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00197 #define IOCTL_DISK_GET_CACHE_INFORMATION    CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS)
00198 #define IOCTL_DISK_SET_CACHE_INFORMATION    CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00199 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT      CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00200 #define IOCTL_DISK_UPDATE_PROPERTIES        CTL_CODE(IOCTL_DISK_BASE, 0x0050, METHOD_BUFFERED, FILE_ANY_ACCESS)
00201 #define IOCTL_DISK_FORMAT_DRIVE             CTL_CODE(IOCTL_DISK_BASE, 0x00f3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
00202 #define IOCTL_DISK_SENSE_DEVICE             CTL_CODE(IOCTL_DISK_BASE, 0x00f8, METHOD_BUFFERED, FILE_ANY_ACCESS)
00203 #endif
00204 
00205 #define PARTITION_ENTRY_UNUSED            0x00
00206 #define PARTITION_FAT_12                  0x01
00207 #define PARTITION_XENIX_1                 0x02
00208 #define PARTITION_XENIX_2                 0x03
00209 #define PARTITION_FAT_16                  0x04
00210 #define PARTITION_EXTENDED                0x05
00211 #define PARTITION_HUGE                    0x06
00212 #define PARTITION_IFS                     0x07
00213 #define PARTITION_OS2BOOTMGR              0x0A
00214 #define PARTITION_FAT32                   0x0B
00215 #define PARTITION_FAT32_XINT13            0x0C
00216 #define PARTITION_XINT13                  0x0E
00217 #define PARTITION_XINT13_EXTENDED         0x0F
00218 #define PARTITION_PREP                    0x41
00219 #define PARTITION_LDM                     0x42
00220 #define PARTITION_UNIX                    0x63
00221 #define VALID_NTFT                        0xC0
00222 #define PARTITION_NTFT                    0x80
00223 
00224 #define IsFTPartition( PartitionType ) \
00225   (((PartitionType) & PARTITION_NTFT) && \
00226   IsRecognizedPartition(PartitionType))
00227 
00228 #define IsContainerPartition(PartitionType) \
00229   (((PartitionType) == PARTITION_EXTENDED) || \
00230   ((PartitionType) == PARTITION_XINT13_EXTENDED))
00231 
00232 #define IsRecognizedPartition(PartitionType) ( \
00233     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \
00234     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \
00235     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \
00236     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \
00237     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \
00238     (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) || \
00239     ((PartitionType) == PARTITION_FAT_12) || \
00240     ((PartitionType) == PARTITION_FAT_16) || \
00241     ((PartitionType) == PARTITION_HUGE) || \
00242     ((PartitionType) == PARTITION_IFS) || \
00243     ((PartitionType) == PARTITION_FAT32) || \
00244     ((PartitionType) == PARTITION_FAT32_XINT13) || \
00245     ((PartitionType) == PARTITION_XINT13))
00246 
00247 #define WMI_DISK_GEOMETRY_GUID \
00248   {0x25007f51, 0x57c2, 0x11d1, {0xa5, 0x28, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10}}
00249 
00250 typedef USHORT BAD_TRACK_NUMBER;
00251 typedef USHORT *PBAD_TRACK_NUMBER;
00252 
00253 typedef enum _MEDIA_TYPE {
00254   Unknown,
00255   F5_1Pt2_512,
00256   F3_1Pt44_512,
00257   F3_2Pt88_512,
00258   F3_20Pt8_512,
00259   F3_720_512,
00260   F5_360_512,
00261   F5_320_512,
00262   F5_320_1024,
00263   F5_180_512,
00264   F5_160_512,
00265   RemovableMedia,
00266   FixedMedia,
00267   F3_120M_512,
00268   F3_640_512,
00269   F5_640_512,
00270   F5_720_512,
00271   F3_1Pt2_512,
00272   F3_1Pt23_1024,
00273   F5_1Pt23_1024,
00274   F3_128Mb_512,
00275   F3_230Mb_512,
00276   F8_256_128
00277 } MEDIA_TYPE, *PMEDIA_TYPE;
00278 
00279 typedef enum _DETECTION_TYPE {
00280   DetectNone,
00281   DetectInt13,
00282   DetectExInt13
00283 } DETECTION_TYPE;
00284 
00285 typedef struct _DISK_CONTROLLER_NUMBER {
00286   ULONG  ControllerNumber;
00287   ULONG  DiskNumber;
00288 } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
00289 
00290 typedef struct _DISK_INT13_INFO {
00291   USHORT  DriveSelect;
00292   ULONG  MaxCylinders;
00293   USHORT  SectorsPerTrack;
00294   USHORT  MaxHeads;
00295   USHORT  NumberDrives;
00296 } DISK_INT13_INFO, *PDISK_INT13_INFO;
00297 
00298 typedef struct _DISK_EX_INT13_INFO {
00299   USHORT  ExBufferSize;
00300   USHORT  ExFlags;
00301   ULONG  ExCylinders;
00302   ULONG  ExHeads;
00303   ULONG  ExSectorsPerTrack;
00304   ULONG64  ExSectorsPerDrive;
00305   USHORT  ExSectorSize;
00306   USHORT  ExReserved;
00307 } DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO;
00308 
00309 typedef struct _DISK_DETECTION_INFO {
00310   ULONG  SizeOfDetectInfo;
00311   DETECTION_TYPE  DetectionType;
00312   _ANONYMOUS_UNION union {
00313     _ANONYMOUS_STRUCT struct {
00314       DISK_INT13_INFO  Int13;
00315       DISK_EX_INT13_INFO  ExInt13;
00316     } DUMMYSTRUCTNAME;
00317   } DUMMYUNIONNAME;
00318 } DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;
00319 
00320 typedef struct _DISK_GEOMETRY {
00321   LARGE_INTEGER  Cylinders;
00322   MEDIA_TYPE  MediaType;
00323   ULONG  TracksPerCylinder;
00324   ULONG  SectorsPerTrack;
00325   ULONG  BytesPerSector;
00326 } DISK_GEOMETRY, *PDISK_GEOMETRY;
00327 
00328 typedef struct _DISK_GEOMETRY_EX {
00329   DISK_GEOMETRY  Geometry;
00330   LARGE_INTEGER  DiskSize;
00331   UCHAR  Data[1];
00332 } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;
00333 
00334 #define DiskGeometryGetPartition(Geometry) \
00335    ((PDISK_PARTITION_INFO)((Geometry) + 1))
00336 
00337 #define DiskGeometryGetDetect(Geometry)\
00338  ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeometryGetPartition(Geometry) + \
00339   DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo)))
00340 
00341 typedef struct _PARTITION_INFORMATION {
00342   LARGE_INTEGER  StartingOffset;
00343   LARGE_INTEGER  PartitionLength;
00344   ULONG  HiddenSectors;
00345   ULONG  PartitionNumber;
00346   UCHAR  PartitionType;
00347   BOOLEAN  BootIndicator;
00348   BOOLEAN  RecognizedPartition;
00349   BOOLEAN  RewritePartition;
00350 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
00351 
00352 typedef struct _PARTITION_INFORMATION_GPT {
00353   GUID  PartitionType;
00354   GUID  PartitionId;
00355   ULONG64  Attributes;
00356   WCHAR Name  [36];
00357 } PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;
00358 
00359 typedef enum _PARTITION_STYLE {
00360   PARTITION_STYLE_MBR,
00361   PARTITION_STYLE_GPT,
00362   PARTITION_STYLE_RAW
00363 } PARTITION_STYLE;
00364 
00365 typedef struct _DISK_PARTITION_INFO {
00366   ULONG  SizeOfPartitionInfo;
00367   PARTITION_STYLE  PartitionStyle;
00368   _ANONYMOUS_UNION union {
00369     struct {
00370       ULONG  Signature;
00371       ULONG  CheckSum;
00372     } Mbr;
00373     struct {
00374       GUID  DiskId;
00375     } Gpt;
00376   } DUMMYUNIONNAME;
00377 } DISK_PARTITION_INFO, *PDISK_PARTITION_INFO;
00378 
00379 typedef struct _DISK_PERFORMANCE {
00380   LARGE_INTEGER  BytesRead;
00381   LARGE_INTEGER  BytesWritten;
00382   LARGE_INTEGER  ReadTime;
00383   LARGE_INTEGER  WriteTime;
00384   LARGE_INTEGER  IdleTime;
00385   ULONG  ReadCount;
00386   ULONG  WriteCount;
00387   ULONG  QueueDepth;
00388   ULONG  SplitCount;
00389   LARGE_INTEGER  QueryTime;
00390   ULONG  StorageDeviceNumber;
00391   WCHAR  StorageManagerName[8];
00392 } DISK_PERFORMANCE, *PDISK_PERFORMANCE;
00393 
00394 typedef struct _PARTITION_INFORMATION_MBR {
00395   UCHAR  PartitionType;
00396   BOOLEAN  BootIndicator;
00397   BOOLEAN  RecognizedPartition;
00398   ULONG  HiddenSectors;
00399 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
00400 
00401 typedef struct _PARTITION_INFORMATION_EX {
00402   PARTITION_STYLE  PartitionStyle;
00403   LARGE_INTEGER  StartingOffset;
00404   LARGE_INTEGER  PartitionLength;
00405   ULONG  PartitionNumber;
00406   BOOLEAN  RewritePartition;
00407   _ANONYMOUS_UNION union {
00408     PARTITION_INFORMATION_MBR  Mbr;
00409     PARTITION_INFORMATION_GPT  Gpt;
00410   } DUMMYUNIONNAME;
00411 } PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX;
00412 
00413 typedef struct _DRIVE_LAYOUT_INFORMATION {
00414   ULONG  PartitionCount;
00415   ULONG  Signature;
00416   PARTITION_INFORMATION  PartitionEntry[1];
00417 } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
00418 
00419 typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
00420   ULONG  Signature;
00421 } DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
00422 
00423 typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
00424   GUID  DiskId;
00425   LARGE_INTEGER  StartingUsableOffset;
00426   LARGE_INTEGER  UsableLength;
00427   ULONG  MaxPartitionCount;
00428 } DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
00429 
00430 typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
00431   ULONG  PartitionStyle;
00432   ULONG  PartitionCount;
00433   __GNU_EXTENSION union {
00434     DRIVE_LAYOUT_INFORMATION_MBR  Mbr;
00435     DRIVE_LAYOUT_INFORMATION_GPT  Gpt;
00436   };
00437   PARTITION_INFORMATION_EX  PartitionEntry[1];
00438 } DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX;
00439 
00440 typedef struct _FORMAT_EX_PARAMETERS {
00441   MEDIA_TYPE  MediaType;
00442   ULONG  StartCylinderNumber;
00443   ULONG  EndCylinderNumber;
00444   ULONG  StartHeadNumber;
00445   ULONG  EndHeadNumber;
00446   USHORT  FormatGapLength;
00447   USHORT  SectorsPerTrack;
00448   USHORT  SectorNumber[1];
00449 } FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;
00450 
00451 typedef struct _FORMAT_PARAMETERS {
00452   MEDIA_TYPE  MediaType;
00453   ULONG  StartCylinderNumber;
00454   ULONG  EndCylinderNumber;
00455   ULONG  StartHeadNumber;
00456   ULONG  EndHeadNumber;
00457 } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;
00458 
00459 typedef struct _GET_LENGTH_INFORMATION {
00460   LARGE_INTEGER  Length;
00461 } GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
00462 
00463 typedef struct _REASSIGN_BLOCKS {
00464   USHORT  Reserved;
00465   USHORT  Count;
00466   ULONG  BlockNumber[1];
00467 } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;
00468 
00469 typedef struct _SET_PARTITION_INFORMATION {
00470   UCHAR  PartitionType;
00471 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
00472 
00473 typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR;
00474 typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT;
00475 
00476 typedef struct _SET_PARTITION_INFORMATION_EX {
00477   PARTITION_STYLE  PartitionStyle;
00478   _ANONYMOUS_UNION union {
00479     SET_PARTITION_INFORMATION_MBR  Mbr;
00480     SET_PARTITION_INFORMATION_GPT  Gpt;
00481   } DUMMYUNIONNAME;
00482 } SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX;
00483 
00484 typedef struct _VERIFY_INFORMATION {
00485   LARGE_INTEGER  StartingOffset;
00486   ULONG  Length;
00487 } VERIFY_INFORMATION, *PVERIFY_INFORMATION;
00488 
00489 /* GETVERSIONINPARAMS.fCapabilities constants */
00490 #define CAP_ATA_ID_CMD                    1
00491 #define CAP_ATAPI_ID_CMD                  2
00492 #define CAP_SMART_CMD                     4
00493 
00494 typedef struct _GETVERSIONINPARAMS {
00495     UCHAR  bVersion;
00496     UCHAR  bRevision;
00497     UCHAR  bReserved;
00498     UCHAR  bIDEDeviceMap;
00499     ULONG  fCapabilities;
00500     ULONG  dwReserved[4];
00501 } GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS;
00502 
00503 /* IDEREGS.bCommandReg constants */
00504 #define ATAPI_ID_CMD                      0xA1
00505 #define ID_CMD                            0xEC
00506 #define SMART_CMD                         0xB0
00507 
00508 #define SMART_CYL_LOW                     0x4F
00509 #define SMART_CYL_HI                      0xC2
00510 
00511 typedef struct _IDEREGS {
00512     UCHAR  bFeaturesReg;
00513     UCHAR  bSectorCountReg;
00514     UCHAR  bSectorNumberReg;
00515     UCHAR  bCylLowReg;
00516     UCHAR  bCylHighReg;
00517     UCHAR  bDriveHeadReg;
00518     UCHAR  bCommandReg;
00519     UCHAR  bReserved;
00520 } IDEREGS, *PIDEREGS, *LPIDEREGS;
00521 
00522 #include <pshpack1.h>
00523 typedef struct _SENDCMDINPARAMS {
00524     ULONG  cBufferSize;
00525     IDEREGS  irDriveRegs;
00526     UCHAR  bDriveNumber;
00527     UCHAR  bReserved[3];
00528     ULONG  dwReserved[4];
00529     UCHAR  bBuffer[1];
00530 } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
00531 #include <poppack.h>
00532 
00533 /* DRIVERSTATUS.bDriverError constants */
00534 #define SMART_NO_ERROR                    0
00535 #define SMART_IDE_ERROR                   1
00536 #define SMART_INVALID_FLAG                2
00537 #define SMART_INVALID_COMMAND             3
00538 #define SMART_INVALID_BUFFER              4
00539 #define SMART_INVALID_DRIVE               5
00540 #define SMART_INVALID_IOCTL               6
00541 #define SMART_ERROR_NO_MEM                7
00542 #define SMART_INVALID_REGISTER            8
00543 #define SMART_NOT_SUPPORTED               9
00544 #define SMART_NO_IDE_DEVICE               10
00545 
00546 #define SMART_OFFLINE_ROUTINE_OFFLINE     0
00547 #define SMART_SHORT_SELFTEST_OFFLINE      1
00548 #define SMART_EXTENDED_SELFTEST_OFFLINE   2
00549 #define SMART_ABORT_OFFLINE_SELFTEST      127
00550 #define SMART_SHORT_SELFTEST_CAPTIVE      129
00551 #define SMART_EXTENDED_SELFTEST_CAPTIVE   130
00552 
00553 typedef struct _DRIVERSTATUS {
00554     UCHAR  bDriverError;
00555     UCHAR  bIDEError;
00556     UCHAR  bReserved[2];
00557     ULONG  dwReserved[2];
00558 } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
00559 
00560 #define READ_ATTRIBUTE_BUFFER_SIZE        512
00561 #define IDENTIFY_BUFFER_SIZE              512
00562 #define READ_THRESHOLD_BUFFER_SIZE        512
00563 #define SMART_LOG_SECTOR_SIZE             512
00564 
00565 #include <pshpack1.h>
00566 typedef struct _SENDCMDOUTPARAMS {
00567     ULONG  cBufferSize;
00568     DRIVERSTATUS  DriverStatus;
00569     UCHAR  bBuffer[1];
00570 } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
00571 #include <poppack.h>
00572 
00573 #define READ_ATTRIBUTES                   0xD0
00574 #define READ_THRESHOLDS                   0xD1
00575 #define ENABLE_DISABLE_AUTOSAVE           0xD2
00576 #define SAVE_ATTRIBUTE_VALUES             0xD3
00577 #define EXECUTE_OFFLINE_DIAGS             0xD4
00578 #define SMART_READ_LOG                    0xD5
00579 #define SMART_WRITE_LOG                   0xd6
00580 #define ENABLE_SMART                      0xD8
00581 #define DISABLE_SMART                     0xD9
00582 #define RETURN_SMART_STATUS               0xDA
00583 #define ENABLE_DISABLE_AUTO_OFFLINE       0xDB
00584 
00585 typedef struct _MAPPED_ADDRESS {
00586     struct _MAPPED_ADDRESS *NextMappedAddress;
00587     PVOID MappedAddress;
00588     ULONG NumberOfBytes;
00589     LARGE_INTEGER IoAddress;
00590     ULONG BusNumber;
00591 } MAPPED_ADDRESS, *PMAPPED_ADDRESS;
00592 
00593 
00594 
00595 #if(_WIN32_WINNT >= 0x0500)
00596 
00597 typedef struct _CREATE_DISK_GPT 
00598 {
00599     GUID DiskId;
00600     ULONG MaxPartitionCount;
00601 } CREATE_DISK_GPT, *PCREATE_DISK_GPT;
00602 
00603 typedef struct _CREATE_DISK_MBR 
00604 {
00605     ULONG Signature;
00606 } CREATE_DISK_MBR, *PCREATE_DISK_MBR;
00607 
00608 
00609 typedef struct _CREATE_DISK 
00610 {
00611     PARTITION_STYLE PartitionStyle;
00612     union {
00613         CREATE_DISK_MBR Mbr;
00614         CREATE_DISK_GPT Gpt;
00615     };
00616 } CREATE_DISK, *PCREATE_DISK;
00617 
00618 
00619 typedef enum {
00620     EqualPriority,
00621     KeepPrefetchedData,
00622     KeepReadData
00623 } DISK_CACHE_RETENTION_PRIORITY;
00624 
00625 typedef enum _DISK_WRITE_CACHE_STATE {
00626     DiskWriteCacheNormal,
00627     DiskWriteCacheForceDisable,
00628     DiskWriteCacheDisableNotSupported
00629 } DISK_WRITE_CACHE_STATE, *PDISK_WRITE_CACHE_STATE;
00630 
00631 
00632 typedef struct _DISK_CACHE_INFORMATION
00633 {
00634     BOOLEAN ParametersSavable;
00635     BOOLEAN ReadCacheEnabled;
00636     BOOLEAN WriteCacheEnabled;
00637     DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
00638     DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
00639     USHORT DisablePrefetchTransferLength;
00640     BOOLEAN PrefetchScalar;
00641     union {
00642         struct {
00643             USHORT Minimum;
00644             USHORT Maximum;
00645             USHORT MaximumBlocks;
00646         } ScalarPrefetch;
00647 
00648         struct {
00649             USHORT Minimum;
00650             USHORT Maximum;
00651         } BlockPrefetch;
00652     };
00653 
00654 } DISK_CACHE_INFORMATION, *PDISK_CACHE_INFORMATION;
00655 
00656 typedef struct _DISK_GROW_PARTITION {
00657     ULONG PartitionNumber;
00658     LARGE_INTEGER BytesToGrow;
00659 } DISK_GROW_PARTITION, *PDISK_GROW_PARTITION;
00660 #endif
00661 
00662 
00663 #ifdef __cplusplus
00664 }
00665 #endif
00666 
00667 #endif /* _NTDDDISK_H_ */

Generated on Mon May 28 2012 04:31:51 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.