Embed:
(wiki syntax)
Show/hide line numbers
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