Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ntdddisk.h
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 #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 #include "ntddstor.h" 00036 00037 #define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN" 00038 #define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN" 00039 00040 #define IOCTL_DISK_BASE FILE_DEVICE_DISK 00041 00042 #define IOCTL_DISK_CHECK_VERIFY \ 00043 CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) 00044 00045 #define IOCTL_DISK_CONTROLLER_NUMBER \ 00046 CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) 00047 00048 #define IOCTL_DISK_CREATE_DISK \ 00049 CTL_CODE(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00050 00051 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT \ 00052 CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00053 00054 #define IOCTL_DISK_FIND_NEW_DEVICES \ 00055 CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) 00056 00057 #define IOCTL_DISK_FORMAT_TRACKS \ 00058 CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00059 00060 #define IOCTL_DISK_FORMAT_TRACKS_EX \ 00061 CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00062 00063 #define IOCTL_DISK_GET_CACHE_INFORMATION \ 00064 CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS) 00065 00066 #define IOCTL_DISK_GET_DRIVE_GEOMETRY \ 00067 CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) 00068 00069 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \ 00070 CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS) 00071 00072 #define IOCTL_DISK_GET_DRIVE_LAYOUT \ 00073 CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 00074 00075 #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \ 00076 CTL_CODE(IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS) 00077 00078 #define IOCTL_DISK_GET_MEDIA_TYPES \ 00079 CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) 00080 00081 #define IOCTL_DISK_GET_LENGTH_INFO \ 00082 CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS) 00083 00084 #define IOCTL_DISK_GET_PARTITION_INFO \ 00085 CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00086 00087 #define IOCTL_DISK_GET_PARTITION_INFO_EX \ 00088 CTL_CODE(IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS) 00089 00090 #define IOCTL_DISK_GROW_PARTITION \ 00091 CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00092 00093 #define IOCTL_DISK_INTERNAL_CLEAR_VERIFY \ 00094 CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS) 00095 00096 #define IOCTL_DISK_INTERNAL_SET_VERIFY \ 00097 CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS) 00098 00099 #define IOCTL_DISK_IS_WRITABLE \ 00100 CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) 00101 00102 #define IOCTL_DISK_PERFORMANCE \ 00103 CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) 00104 00105 #define IOCTL_DISK_PERFORMANCE_OFF \ 00106 CTL_CODE(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS) 00107 00108 #define IOCTL_DISK_REASSIGN_BLOCKS \ 00109 CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00110 00111 #define IOCTL_DISK_RESERVE \ 00112 CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) 00113 00114 #define IOCTL_DISK_SET_CACHE_INFORMATION \ 00115 CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00116 00117 #define IOCTL_DISK_SET_DRIVE_LAYOUT \ 00118 CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00119 00120 #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \ 00121 CTL_CODE(IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00122 00123 #define IOCTL_DISK_SET_PARTITION_INFO \ 00124 CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00125 00126 #define IOCTL_DISK_SET_PARTITION_INFO_EX \ 00127 CTL_CODE(IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00128 00129 #define IOCTL_DISK_UPDATE_DRIVE_SIZE \ 00130 CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00131 00132 #define IOCTL_DISK_VERIFY \ 00133 CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) 00134 00135 #define SMART_GET_VERSION \ 00136 CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) 00137 00138 #define SMART_RCV_DRIVE_DATA \ 00139 CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00140 00141 #define SMART_SEND_DRIVE_COMMAND \ 00142 CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00143 00144 00145 #define PARTITION_ENTRY_UNUSED 0x00 00146 #define PARTITION_FAT_12 0x01 00147 #define PARTITION_XENIX_1 0x02 00148 #define PARTITION_XENIX_2 0x03 00149 #define PARTITION_FAT_16 0x04 00150 #define PARTITION_EXTENDED 0x05 00151 #define PARTITION_HUGE 0x06 00152 #define PARTITION_IFS 0x07 00153 #define PARTITION_OS2BOOTMGR 0x0A 00154 #define PARTITION_FAT32 0x0B 00155 #define PARTITION_FAT32_XINT13 0x0C 00156 #define PARTITION_XINT13 0x0E 00157 #define PARTITION_XINT13_EXTENDED 0x0F 00158 #define PARTITION_PREP 0x41 00159 #define PARTITION_LDM 0x42 00160 #define PARTITION_UNIX 0x63 00161 #define VALID_NTFT 0xC0 00162 #define PARTITION_NTFT 0x80 00163 00164 #define IsFTPartition( PartitionType ) \ 00165 (((PartitionType) & PARTITION_NTFT) && \ 00166 IsRecognizedPartition(PartitionType)) 00167 00168 #define IsContainerPartition(PartitionType) \ 00169 (((PartitionType) == PARTITION_EXTENDED) || \ 00170 ((PartitionType) == PARTITION_XINT13_EXTENDED)) 00171 00172 #define IsRecognizedPartition(PartitionType) ( \ 00173 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \ 00174 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \ 00175 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \ 00176 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \ 00177 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \ 00178 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) || \ 00179 ((PartitionType) == PARTITION_FAT_12) || \ 00180 ((PartitionType) == PARTITION_FAT_16) || \ 00181 ((PartitionType) == PARTITION_HUGE) || \ 00182 ((PartitionType) == PARTITION_IFS) || \ 00183 ((PartitionType) == PARTITION_FAT32) || \ 00184 ((PartitionType) == PARTITION_FAT32_XINT13) || \ 00185 ((PartitionType) == PARTITION_XINT13)) 00186 00187 #define WMI_DISK_GEOMETRY_GUID \ 00188 {0x25007f51, 0x57c2, 0x11d1, {0xa5, 0x28, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10}} 00189 00190 typedef USHORT BAD_TRACK_NUMBER; 00191 typedef USHORT *PBAD_TRACK_NUMBER; 00192 00193 typedef enum _MEDIA_TYPE { 00194 Unknown, 00195 F5_1Pt2_512, 00196 F3_1Pt44_512, 00197 F3_2Pt88_512, 00198 F3_20Pt8_512, 00199 F3_720_512, 00200 F5_360_512, 00201 F5_320_512, 00202 F5_320_1024, 00203 F5_180_512, 00204 F5_160_512, 00205 RemovableMedia, 00206 FixedMedia, 00207 F3_120M_512, 00208 F3_640_512, 00209 F5_640_512, 00210 F5_720_512, 00211 F3_1Pt2_512, 00212 F3_1Pt23_1024, 00213 F5_1Pt23_1024, 00214 F3_128Mb_512, 00215 F3_230Mb_512, 00216 F8_256_128 00217 } MEDIA_TYPE, *PMEDIA_TYPE; 00218 00219 typedef enum _DETECTION_TYPE { 00220 DetectNone, 00221 DetectInt13, 00222 DetectExInt13 00223 } DETECTION_TYPE; 00224 00225 typedef struct _DISK_CONTROLLER_NUMBER { 00226 ULONG ControllerNumber; 00227 ULONG DiskNumber; 00228 } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER; 00229 00230 typedef struct _DISK_INT13_INFO { 00231 USHORT DriveSelect; 00232 ULONG MaxCylinders; 00233 USHORT SectorsPerTrack; 00234 USHORT MaxHeads; 00235 USHORT NumberDrives; 00236 } DISK_INT13_INFO, *PDISK_INT13_INFO; 00237 00238 typedef struct _DISK_EX_INT13_INFO { 00239 USHORT ExBufferSize; 00240 USHORT ExFlags; 00241 ULONG ExCylinders; 00242 ULONG ExHeads; 00243 ULONG ExSectorsPerTrack; 00244 ULONG64 ExSectorsPerDrive; 00245 USHORT ExSectorSize; 00246 USHORT ExReserved; 00247 } DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO; 00248 00249 typedef struct _DISK_DETECTION_INFO { 00250 ULONG SizeOfDetectInfo; 00251 DETECTION_TYPE DetectionType; 00252 _ANONYMOUS_UNION union { 00253 _ANONYMOUS_STRUCT struct { 00254 DISK_INT13_INFO Int13; 00255 DISK_EX_INT13_INFO ExInt13; 00256 } DUMMYSTRUCTNAME; 00257 } DUMMYUNIONNAME; 00258 } DISK_DETECTION_INFO, *PDISK_DETECTION_INFO; 00259 00260 typedef struct _DISK_GEOMETRY { 00261 LARGE_INTEGER Cylinders; 00262 MEDIA_TYPE MediaType; 00263 ULONG TracksPerCylinder; 00264 ULONG SectorsPerTrack; 00265 ULONG BytesPerSector; 00266 } DISK_GEOMETRY, *PDISK_GEOMETRY; 00267 00268 typedef struct _DISK_GEOMETRY_EX { 00269 DISK_GEOMETRY Geometry; 00270 LARGE_INTEGER DiskSize; 00271 UCHAR Data[1]; 00272 } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX; 00273 00274 #define DiskGeometryGetPartition(Geometry) \ 00275 ((PDISK_PARTITION_INFO)((Geometry) + 1)) 00276 00277 #define DiskGeometryGetDetect(Geometry)\ 00278 ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeometryGetPartition(Geometry) + \ 00279 DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) 00280 00281 typedef struct _PARTITION_INFORMATION { 00282 LARGE_INTEGER StartingOffset; 00283 LARGE_INTEGER PartitionLength; 00284 DWORD HiddenSectors; 00285 DWORD PartitionNumber; 00286 BYTE PartitionType; 00287 BOOLEAN BootIndicator; 00288 BOOLEAN RecognizedPartition; 00289 BOOLEAN RewritePartition; 00290 } PARTITION_INFORMATION, *PPARTITION_INFORMATION; 00291 00292 typedef struct _PARTITION_INFORMATION_GPT { 00293 GUID PartitionType; 00294 GUID PartitionId; 00295 ULONG64 Attributes; 00296 WCHAR Name [36]; 00297 } PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT; 00298 00299 typedef struct _DISK_PARTITION_INFO { 00300 ULONG SizeOfPartitionInfo; 00301 PARTITION_STYLE PartitionStyle; 00302 _ANONYMOUS_UNION union { 00303 struct { 00304 ULONG Signature; 00305 ULONG CheckSum; 00306 } Mbr; 00307 struct { 00308 GUID DiskId; 00309 } Gpt; 00310 } DUMMYUNIONNAME; 00311 } DISK_PARTITION_INFO, *PDISK_PARTITION_INFO; 00312 00313 typedef struct _DISK_PERFORMANCE { 00314 LARGE_INTEGER BytesRead; 00315 LARGE_INTEGER BytesWritten; 00316 LARGE_INTEGER ReadTime; 00317 LARGE_INTEGER WriteTime; 00318 LARGE_INTEGER IdleTime; 00319 ULONG ReadCount; 00320 ULONG WriteCount; 00321 ULONG QueueDepth; 00322 ULONG SplitCount; 00323 LARGE_INTEGER QueryTime; 00324 ULONG StorageDeviceNumber; 00325 WCHAR StorageManagerName[8]; 00326 } DISK_PERFORMANCE, *PDISK_PERFORMANCE; 00327 00328 typedef struct _PARTITION_INFORMATION_EX { 00329 PARTITION_STYLE PartitionStyle; 00330 LARGE_INTEGER StartingOffset; 00331 LARGE_INTEGER PartitionLength; 00332 ULONG PartitionNumber; 00333 BOOLEAN RewritePartition; 00334 _ANONYMOUS_UNION union { 00335 PARTITION_INFORMATION_MBR Mbr; 00336 PARTITION_INFORMATION_GPT Gpt; 00337 } DUMMYUNIONNAME; 00338 } PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX; 00339 00340 typedef struct _FORMAT_EX_PARAMETERS { 00341 MEDIA_TYPE MediaType; 00342 ULONG StartCylinderNumber; 00343 ULONG EndCylinderNumber; 00344 ULONG StartHeadNumber; 00345 ULONG EndHeadNumber; 00346 USHORT FormatGapLength; 00347 USHORT SectorsPerTrack; 00348 USHORT SectorNumber[1]; 00349 } FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS; 00350 00351 typedef struct _FORMAT_PARAMETERS { 00352 MEDIA_TYPE MediaType; 00353 ULONG StartCylinderNumber; 00354 ULONG EndCylinderNumber; 00355 ULONG StartHeadNumber; 00356 ULONG EndHeadNumber; 00357 } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; 00358 00359 typedef struct _GET_LENGTH_INFORMATION { 00360 LARGE_INTEGER Length; 00361 } GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION; 00362 00363 typedef struct _REASSIGN_BLOCKS { 00364 WORD Reserved; 00365 WORD Count; 00366 DWORD BlockNumber[1]; 00367 } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; 00368 00369 typedef struct _SET_PARTITION_INFORMATION { 00370 UCHAR PartitionType; 00371 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; 00372 00373 typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; 00374 typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; 00375 00376 typedef struct _SET_PARTITION_INFORMATION_EX { 00377 PARTITION_STYLE PartitionStyle; 00378 _ANONYMOUS_UNION union { 00379 SET_PARTITION_INFORMATION_MBR Mbr; 00380 SET_PARTITION_INFORMATION_GPT Gpt; 00381 } DUMMYUNIONNAME; 00382 } SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX; 00383 00384 typedef struct _VERIFY_INFORMATION { 00385 LARGE_INTEGER StartingOffset; 00386 DWORD Length; 00387 } VERIFY_INFORMATION, *PVERIFY_INFORMATION; 00388 00389 typedef enum { 00390 EqualPriority, 00391 KeepPrefetchedData, 00392 KeepReadData 00393 } DISK_CACHE_RETENTION_PRIORITY; 00394 00395 typedef struct _DISK_CACHE_INFORMATION { 00396 BOOLEAN ParametersSavable; 00397 BOOLEAN ReadCacheEnabled; 00398 BOOLEAN WriteCacheEnabled; 00399 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; 00400 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; 00401 USHORT DisablePrefetchTransferLength; 00402 BOOLEAN PrefetchScalar; 00403 _ANONYMOUS_UNION union { 00404 struct { 00405 USHORT Minimum; 00406 USHORT Maximum; 00407 USHORT MaximumBlocks; 00408 } ScalarPrefetch; 00409 struct { 00410 USHORT Minimum; 00411 USHORT Maximum; 00412 } BlockPrefetch; 00413 } DUMMYUNIONNAME; 00414 } DISK_CACHE_INFORMATION, *PDISK_CACHE_INFORMATION; 00415 00416 typedef struct _DISK_GROW_PARTITION { 00417 ULONG PartitionNumber; 00418 LARGE_INTEGER BytesToGrow; 00419 } DISK_GROW_PARTITION, *PDISK_GROW_PARTITION; 00420 00421 /* GETVERSIONINPARAMS.fCapabilities constants */ 00422 #define CAP_ATA_ID_CMD 1 00423 #define CAP_ATAPI_ID_CMD 2 00424 #define CAP_SMART_CMD 4 00425 00426 typedef struct _GETVERSIONINPARAMS { 00427 UCHAR bVersion; 00428 UCHAR bRevision; 00429 UCHAR bReserved; 00430 UCHAR bIDEDeviceMap; 00431 ULONG fCapabilities; 00432 ULONG dwReserved[4]; 00433 } GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS; 00434 00435 /* IDEREGS.bCommandReg constants */ 00436 #define ATAPI_ID_CMD 0xA1 00437 #define ID_CMD 0xEC 00438 #define SMART_CMD 0xB0 00439 00440 #define SMART_CYL_LOW 0x4F 00441 #define SMART_CYL_HI 0xC2 00442 00443 typedef struct _IDEREGS { 00444 UCHAR bFeaturesReg; 00445 UCHAR bSectorCountReg; 00446 UCHAR bSectorNumberReg; 00447 UCHAR bCylLowReg; 00448 UCHAR bCylHighReg; 00449 UCHAR bDriveHeadReg; 00450 UCHAR bCommandReg; 00451 UCHAR bReserved; 00452 } IDEREGS, *PIDEREGS, *LPIDEREGS; 00453 00454 #include <pshpack1.h> 00455 typedef struct _SENDCMDINPARAMS { 00456 ULONG cBufferSize; 00457 IDEREGS irDriveRegs; 00458 UCHAR bDriveNumber; 00459 UCHAR bReserved[3]; 00460 ULONG dwReserved[4]; 00461 UCHAR bBuffer[1]; 00462 } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS; 00463 #include <poppack.h> 00464 00465 /* DRIVERSTATUS.bDriverError constants */ 00466 #define SMART_NO_ERROR 0 00467 #define SMART_IDE_ERROR 1 00468 #define SMART_INVALID_FLAG 2 00469 #define SMART_INVALID_COMMAND 3 00470 #define SMART_INVALID_BUFFER 4 00471 #define SMART_INVALID_DRIVE 5 00472 #define SMART_INVALID_IOCTL 6 00473 #define SMART_ERROR_NO_MEM 7 00474 #define SMART_INVALID_REGISTER 8 00475 #define SMART_NOT_SUPPORTED 9 00476 #define SMART_NO_IDE_DEVICE 10 00477 00478 #define SMART_OFFLINE_ROUTINE_OFFLINE 0 00479 #define SMART_SHORT_SELFTEST_OFFLINE 1 00480 #define SMART_EXTENDED_SELFTEST_OFFLINE 2 00481 #define SMART_ABORT_OFFLINE_SELFTEST 127 00482 #define SMART_SHORT_SELFTEST_CAPTIVE 129 00483 #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 00484 00485 typedef struct _DRIVERSTATUS { 00486 UCHAR bDriverError; 00487 UCHAR bIDEError; 00488 UCHAR bReserved[2]; 00489 ULONG dwReserved[2]; 00490 } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS; 00491 00492 #define READ_ATTRIBUTE_BUFFER_SIZE 512 00493 #define IDENTIFY_BUFFER_SIZE 512 00494 #define READ_THRESHOLD_BUFFER_SIZE 512 00495 #define SMART_LOG_SECTOR_SIZE 512 00496 00497 #include <pshpack1.h> 00498 typedef struct _SENDCMDOUTPARAMS { 00499 ULONG cBufferSize; 00500 DRIVERSTATUS DriverStatus; 00501 UCHAR bBuffer[1]; 00502 } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS; 00503 #include <poppack.h> 00504 00505 #define READ_ATTRIBUTES 0xD0 00506 #define READ_THRESHOLDS 0xD1 00507 #define ENABLE_DISABLE_AUTOSAVE 0xD2 00508 #define SAVE_ATTRIBUTE_VALUES 0xD3 00509 #define EXECUTE_OFFLINE_DIAGS 0xD4 00510 #define SMART_READ_LOG 0xD5 00511 #define SMART_WRITE_LOG 0xd6 00512 #define ENABLE_SMART 0xD8 00513 #define DISABLE_SMART 0xD9 00514 #define RETURN_SMART_STATUS 0xDA 00515 #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB 00516 00517 #ifdef __cplusplus 00518 } 00519 #endif 00520 00521 #endif /* __NTDDDISK_H */
Generated on Tue Jul 12 2022 19:59:54 by
1.7.2