Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntdddisk.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
1.7.6.1
|