27#ifndef __GNU_EXTENSION
29#define __GNU_EXTENSION __extension__
31#define __GNU_EXTENSION
41#define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN"
42#define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN"
44#define IOCTL_DISK_BASE FILE_DEVICE_DISK
46#define IOCTL_DISK_ARE_VOLUMES_READY \
47 CTL_CODE(IOCTL_DISK_BASE, 0x0087, METHOD_BUFFERED, FILE_READ_ACCESS)
49#define IOCTL_DISK_CHECK_VERIFY \
50 CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
52#define IOCTL_DISK_CONTROLLER_NUMBER \
53 CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
55#define IOCTL_DISK_CREATE_DISK \
56 CTL_CODE(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
58#define IOCTL_DISK_DELETE_DRIVE_LAYOUT \
59 CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
61#define IOCTL_DISK_FIND_NEW_DEVICES \
62 CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
64#define IOCTL_DISK_FORMAT_DRIVE \
65 CTL_CODE(IOCTL_DISK_BASE, 0x00f3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
67#define IOCTL_DISK_FORMAT_TRACKS \
68 CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
70#define IOCTL_DISK_FORMAT_TRACKS_EX \
71 CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
73#define IOCTL_DISK_GET_CACHE_INFORMATION \
74 CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS)
76#define IOCTL_DISK_GET_CACHE_SETTING \
77 CTL_CODE(IOCTL_DISK_BASE, 0x0038, METHOD_BUFFERED, FILE_READ_ACCESS)
79#define IOCTL_DISK_GET_CLUSTER_INFO \
80 CTL_CODE(IOCTL_DISK_BASE, 0x0085, METHOD_BUFFERED, FILE_ANY_ACCESS)
82#define IOCTL_DISK_GET_DISK_ATTRIBUTES \
83 CTL_CODE(IOCTL_DISK_BASE, 0x003c, METHOD_BUFFERED, FILE_ANY_ACCESS)
85#define IOCTL_DISK_GET_DRIVE_GEOMETRY \
86 CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
88#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \
89 CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
91#define IOCTL_DISK_GET_DRIVE_LAYOUT \
92 CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
94#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \
95 CTL_CODE(IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS)
97#define IOCTL_DISK_GET_MEDIA_TYPES \
98 CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
100#define IOCTL_DISK_GET_LENGTH_INFO \
101 CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS)
103#define IOCTL_DISK_GET_PARTITION_ATTRIBUTES \
104 CTL_CODE(IOCTL_DISK_BASE, 0x003a, METHOD_BUFFERED, FILE_ANY_ACCESS)
106#define IOCTL_DISK_GET_PARTITION_INFO \
107 CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
109#define IOCTL_DISK_GET_PARTITION_INFO_EX \
110 CTL_CODE(IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS)
112#define IOCTL_DISK_GET_PERFORMANCE_INFO \
113 CTL_CODE(IOCTL_DISK_BASE, 0x0089, METHOD_BUFFERED, FILE_ANY_ACCESS)
115#define IOCTL_DISK_GET_SAN_SETTINGS \
116 CTL_CODE(IOCTL_DISK_BASE, 0x0080, METHOD_BUFFERED, FILE_READ_ACCESS)
118#define IOCTL_DISK_GET_SNAPSHOT_INFO \
119 CTL_CODE(IOCTL_DISK_BASE, 0x0082, METHOD_BUFFERED, FILE_READ_ACCESS)
121#define IOCTL_DISK_GROW_PARTITION \
122 CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
124#define IOCTL_DISK_HISTOGRAM_STRUCTURE \
125 CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)
127#define IOCTL_DISK_HISTOGRAM_DATA \
128 CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)
130#define IOCTL_DISK_HISTOGRAM_RESET \
131 CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)
133#define IOCTL_DISK_INTERNAL_CLEAR_VERIFY \
134 CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS)
136#define IOCTL_DISK_INTERNAL_SET_VERIFY \
137 CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
139#define IOCTL_DISK_INTERNAL_SET_NOTIFY \
140 CTL_CODE(IOCTL_DISK_BASE, 0x0102, METHOD_BUFFERED, FILE_ANY_ACCESS)
142#define IOCTL_DISK_IS_CLUSTERED \
143 CTL_CODE(IOCTL_DISK_BASE, 0x003e, METHOD_BUFFERED, FILE_ANY_ACCESS)
145#define IOCTL_DISK_IS_WRITABLE \
146 CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
148#define IOCTL_DISK_LOGGING \
149 CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)
151#define IOCTL_DISK_PERFORMANCE \
152 CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
154#define IOCTL_DISK_PERFORMANCE_OFF \
155 CTL_CODE(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS)
157#define IOCTL_DISK_REASSIGN_BLOCKS \
158 CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
160#define IOCTL_DISK_REQUEST_DATA \
161 CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
163#define IOCTL_DISK_REQUEST_STRUCTURE \
164 CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)
166#define IOCTL_DISK_RESET_SNAPSHOT_INFO \
167 CTL_CODE(IOCTL_DISK_BASE, 0x0084, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
169#define IOCTL_DISK_MEDIA_REMOVAL \
170 CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
172#define IOCTL_DISK_EJECT_MEDIA \
173 CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
175#define IOCTL_DISK_LOAD_MEDIA \
176 CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
178#define IOCTL_DISK_REASSIGN_BLOCKS_EX \
179 CTL_CODE(IOCTL_DISK_BASE, 0x0029, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
181#define IOCTL_DISK_RESERVE \
182 CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
184#define IOCTL_DISK_RELEASE \
185 CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
187#define IOCTL_DISK_FIND_NEW_DEVICES \
188 CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
190#define IOCTL_DISK_SENSE_DEVICE \
191 CTL_CODE(IOCTL_DISK_BASE, 0x00f8, METHOD_BUFFERED, FILE_ANY_ACCESS)
193#define IOCTL_DISK_SET_CACHE_INFORMATION \
194 CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
196#define IOCTL_DISK_SET_CACHE_SETTING \
197 CTL_CODE(IOCTL_DISK_BASE, 0x0039, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
199#define IOCTL_DISK_SET_CLUSTER_INFO \
200 CTL_CODE(IOCTL_DISK_BASE, 0x0086, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
202#define IOCTL_DISK_SET_DISK_ATTRIBUTES \
203 CTL_CODE(IOCTL_DISK_BASE, 0x003d, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
205#define IOCTL_DISK_SET_DRIVE_LAYOUT \
206 CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
208#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \
209 CTL_CODE(IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
211#define IOCTL_DISK_SET_PARTITION_ATTRIBUTES \
212 CTL_CODE(IOCTL_DISK_BASE, 0x003b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
214#define IOCTL_DISK_SET_PARTITION_INFO \
215 CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
217#define IOCTL_DISK_SET_PARTITION_INFO_EX \
218 CTL_CODE(IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
220#define IOCTL_DISK_SET_SAN_SETTINGS \
221 CTL_CODE(IOCTL_DISK_BASE, 0x0081, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
223#define IOCTL_DISK_SET_SNAPSHOT_INFO \
224 CTL_CODE(IOCTL_DISK_BASE, 0x0083, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
231#if (NTDDI_VERSION < NTDDI_WS03)
232#define IOCTL_DISK_GET_WRITE_CACHE_STATE \
233 CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS)
235#define OBSOLETE_DISK_GET_WRITE_CACHE_STATE \
236 CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS)
239#define IOCTL_DISK_UPDATE_DRIVE_SIZE \
240 CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
242#define IOCTL_DISK_UPDATE_PROPERTIES \
243 CTL_CODE(IOCTL_DISK_BASE, 0x0050, METHOD_BUFFERED, FILE_ANY_ACCESS)
245#define IOCTL_DISK_VERIFY \
246 CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
248#define IOCTL_DISK_VOLUMES_ARE_READY \
249 CTL_CODE(IOCTL_DISK_BASE, 0x0088, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
251#define IOCTL_DISK_COPY_DATA \
252 CTL_CODE(IOCTL_DISK_BASE, 0x0019, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
254#define IOCTL_DISK_SIMBAD \
255 CTL_CODE(IOCTL_DISK_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
257#define SMART_GET_VERSION \
258 CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
260#define SMART_RCV_DRIVE_DATA \
261 CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
263#define SMART_SEND_DRIVE_COMMAND \
264 CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
266#define PARTITION_ENTRY_UNUSED 0x00
267#define PARTITION_FAT_12 0x01
268#define PARTITION_XENIX_1 0x02
269#define PARTITION_XENIX_2 0x03
270#define PARTITION_FAT_16 0x04
271#define PARTITION_EXTENDED 0x05
272#define PARTITION_HUGE 0x06
273#define PARTITION_IFS 0x07
274#define PARTITION_OS2BOOTMGR 0x0A
275#define PARTITION_FAT32 0x0B
276#define PARTITION_FAT32_XINT13 0x0C
277#define PARTITION_XINT13 0x0E
278#define PARTITION_XINT13_EXTENDED 0x0F
279#define PARTITION_MSFT_RECOVERY 0x27
280#define PARTITION_MAIN_OS 0x28
281#define PARTIITON_OS_DATA 0x29
282#define PARTITION_PRE_INSTALLED 0x2a
283#define PARTITION_BSP 0x2b
284#define PARTITION_DPP 0x2c
285#define PARTITION_WINDOWS_SYSTEM 0x2d
286#define PARTITION_PREP 0x41
287#define PARTITION_LDM 0x42
288#define PARTITION_DM 0x54
289#define PARTITION_EZDRIVE 0x55
290#define PARTITION_UNIX 0x63
291#define PARTITION_SPACES_DATA 0xD7
292#define PARTITION_SPACES 0xE7
293#define PARTITION_GPT 0xEE
294#define PARTITION_SYSTEM 0xEF
296#define VALID_NTFT 0xC0
297#define PARTITION_NTFT 0x80
300#define PARTITION_OLD_LINUX 0x43
301#define PARTITION_LINUX 0x83
302#define PARTITION_ISO9660 0x96
303#define PARTITION_FREEBSD 0xA5
304#define PARTITION_OPENBSD 0xA6
305#define PARTITION_NETBSD 0xA9
315#define IsFTPartition(PartitionType) \
316 ( ((PartitionType) & PARTITION_NTFT) && ((((PartitionType) & ~VALID_NTFT) == PARTITION_HUGE) || \
317 (((PartitionType) & ~VALID_NTFT) == PARTITION_IFS) || \
318 (((PartitionType) & ~VALID_NTFT) == PARTITION_FAT32) || \
319 (((PartitionType) & ~VALID_NTFT) == PARTITION_FAT32_XINT13)) )
321#define IsContainerPartition(PartitionType) \
322 ( ((PartitionType) == PARTITION_EXTENDED) || \
323 ((PartitionType) == PARTITION_XINT13_EXTENDED) )
326#define IsRecognizedPartition(PartitionType) \
327 ( IsFTPartition(PartitionType) || \
328 ((PartitionType) == PARTITION_FAT_12) || \
329 ((PartitionType) == PARTITION_FAT_16) || \
330 ((PartitionType) == PARTITION_HUGE) || \
331 ((PartitionType) == PARTITION_IFS) || \
332 ((PartitionType) == PARTITION_FAT32) || \
333 ((PartitionType) == PARTITION_FAT32_XINT13) || \
334 ((PartitionType) == PARTITION_XINT13) || \
335 ((PartitionType) == PARTITION_LINUX) || \
336 ((PartitionType) == PARTITION_OLD_LINUX) || \
337 ((PartitionType) == PARTITION_ISO9660) || \
338 ((PartitionType) == PARTITION_FREEBSD) || \
339 ((PartitionType) == PARTITION_OPENBSD) || \
340 ((PartitionType) == PARTITION_NETBSD) )
342#define IsRecognizedPartition(PartitionType) \
343 ( IsFTPartition(PartitionType) || \
344 ((PartitionType) == PARTITION_FAT_12) || \
345 ((PartitionType) == PARTITION_FAT_16) || \
346 ((PartitionType) == PARTITION_HUGE) || \
347 ((PartitionType) == PARTITION_IFS) || \
348 ((PartitionType) == PARTITION_FAT32) || \
349 ((PartitionType) == PARTITION_FAT32_XINT13) || \
350 ((PartitionType) == PARTITION_XINT13) )
353#if (_WIN32_WINNT >= 0x0500)
357#define GPT_ATTRIBUTE_PLATFORM_REQUIRED 0x00000001
358#define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY 0x10000000
359#define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY 0x20000000
360#define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN 0x40000000
361#define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 0x80000000
364#define WMI_DISK_GEOMETRY_GUID \
365 {0x25007f51, 0x57c2, 0x11d1, {0xa5, 0x28, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10}}
428#if (_WIN32_WINNT >= 0x0500)
438 PARTITION_STYLE_BRFR = 128
442typedef struct _CREATE_DISK_GPT
445 ULONG MaxPartitionCount;
446} CREATE_DISK_GPT, *PCREATE_DISK_GPT;
448typedef struct _CREATE_DISK_MBR
451} CREATE_DISK_MBR, *PCREATE_DISK_MBR;
453typedef struct _CREATE_DISK
460} CREATE_DISK, *PCREATE_DISK;
462typedef enum _DETECTION_TYPE {
468typedef struct _DISK_INT13_INFO {
474} DISK_INT13_INFO, *PDISK_INT13_INFO;
476typedef struct _DISK_EX_INT13_INFO {
481 ULONG ExSectorsPerTrack;
485} DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO;
487typedef struct _DISK_DETECTION_INFO {
488 ULONG SizeOfDetectInfo;
489 DETECTION_TYPE DetectionType;
492 DISK_INT13_INFO Int13;
493 DISK_EX_INT13_INFO ExInt13;
496} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;
498typedef struct _DISK_PARTITION_INFO {
499 ULONG SizeOfPartitionInfo;
510} DISK_PARTITION_INFO, *PDISK_PARTITION_INFO;
518#if (NTDDI_VERSION < NTDDI_WS03)
519#define DiskGeometryGetPartition(Geometry) \
520 ((PDISK_PARTITION_INFO)((Geometry) + 1))
522#define DiskGeometryGetDetect(Geometry)\
523 ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeometryGetPartition(Geometry) + \
524 DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo)))
526#define DiskGeometryGetPartition(Geometry) \
527 ((PDISK_PARTITION_INFO)((Geometry)->Data))
529#define DiskGeometryGetDetect(Geometry)\
530 ((PDISK_DETECTION_INFO)(((ULONG_PTR)DiskGeometryGetPartition(Geometry) + \
531 DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo)))
554#if (NTDDI_VERSION >= NTDDI_WIN10_RS3)
563typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
567 ULONG MaxPartitionCount;
568} DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
570typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
572#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
575} DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
577typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
578 ULONG PartitionStyle;
579 ULONG PartitionCount;
581 DRIVE_LAYOUT_INFORMATION_MBR Mbr;
582 DRIVE_LAYOUT_INFORMATION_GPT Gpt;
585} DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX;
590typedef struct _SET_PARTITION_INFORMATION_EX {
593 SET_PARTITION_INFORMATION_MBR Mbr;
594 SET_PARTITION_INFORMATION_GPT Gpt;
596} SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX;
656#define CAP_ATA_ID_CMD 1
657#define CAP_ATAPI_ID_CMD 2
658#define CAP_SMART_CMD 4
670#define ATAPI_ID_CMD 0xA1
672#define SMART_CMD 0xB0
674#define SMART_CYL_LOW 0x4F
675#define SMART_CYL_HI 0xC2
700#define SMART_NO_ERROR 0
701#define SMART_IDE_ERROR 1
702#define SMART_INVALID_FLAG 2
703#define SMART_INVALID_COMMAND 3
704#define SMART_INVALID_BUFFER 4
705#define SMART_INVALID_DRIVE 5
706#define SMART_INVALID_IOCTL 6
707#define SMART_ERROR_NO_MEM 7
708#define SMART_INVALID_REGISTER 8
709#define SMART_NOT_SUPPORTED 9
710#define SMART_NO_IDE_DEVICE 10
712#define SMART_OFFLINE_ROUTINE_OFFLINE 0
713#define SMART_SHORT_SELFTEST_OFFLINE 1
714#define SMART_EXTENDED_SELFTEST_OFFLINE 2
715#define SMART_ABORT_OFFLINE_SELFTEST 127
716#define SMART_SHORT_SELFTEST_CAPTIVE 129
717#define SMART_EXTENDED_SELFTEST_CAPTIVE 130
726#define READ_ATTRIBUTE_BUFFER_SIZE 512
727#define IDENTIFY_BUFFER_SIZE 512
728#define READ_THRESHOLD_BUFFER_SIZE 512
729#define SMART_LOG_SECTOR_SIZE 512
739#define READ_ATTRIBUTES 0xD0
740#define READ_THRESHOLDS 0xD1
741#define ENABLE_DISABLE_AUTOSAVE 0xD2
742#define SAVE_ATTRIBUTE_VALUES 0xD3
743#define EXECUTE_OFFLINE_DIAGS 0xD4
744#define SMART_READ_LOG 0xD5
745#define SMART_WRITE_LOG 0xd6
746#define ENABLE_SMART 0xD8
747#define DISABLE_SMART 0xD9
748#define RETURN_SMART_STATUS 0xDA
749#define ENABLE_DISABLE_AUTO_OFFLINE 0xDB
760#if (_WIN32_WINNT >= 0x0500)
768typedef enum _DISK_WRITE_CACHE_STATE {
769 DiskWriteCacheNormal,
770 DiskWriteCacheForceDisable,
771 DiskWriteCacheDisableNotSupported
772} DISK_WRITE_CACHE_STATE, *PDISK_WRITE_CACHE_STATE;
835#if (NTDDI_VERSION >= NTDDI_VISTA)
855#define DISK_ATTRIBUTE_OFFLINE 0x0000000000000001
856#define DISK_ATTRIBUTE_READ_ONLY 0x0000000000000002
857#define DISK_ATTRIBUTE_HIDDEN 0x0000000000000004
858#define DISK_ATTRIBUTE_MAINTENANCE 0x0000000000000008
859#define DISK_ATTRIBUTE_SPACES_BYPASS 0x0000000000000010
916#if (NTDDI_VERSION >= NTDDI_WIN8)
920#define DISK_CLUSTER_FLAG_ENABLED 0x0000000000000001
921#define DISK_CLUSTER_FLAG_CSV 0x0000000000000002
922#define DISK_CLUSTER_FLAG_IN_MAINTENANCE 0x0000000000000004
923#define DISK_CLUSTER_FLAG_PNP_ARRIVAL_COMPLETE 0x0000000000000008
static const WCHAR Signature[]
struct _PARTITION_INFORMATION_MBR * PPARTITION_INFORMATION_MBR
struct _PARTITION_INFORMATION_EX PARTITION_INFORMATION_EX
enum _PARTITION_STYLE PARTITION_STYLE
struct _PARTITION_INFORMATION_EX * PPARTITION_INFORMATION_EX
struct _PARTITION_INFORMATION_MBR PARTITION_INFORMATION_MBR
struct _PARTITION_INFORMATION_GPT * PPARTITION_INFORMATION_GPT
struct _PARTITION_INFORMATION_GPT PARTITION_INFORMATION_GPT
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
#define _ANONYMOUS_STRUCT
struct _DRIVE_LAYOUT_INFORMATION * PDRIVE_LAYOUT_INFORMATION
struct _GETVERSIONINPARAMS * LPGETVERSIONINPARAMS
struct _DRIVERSTATUS * PDRIVERSTATUS
struct _FORMAT_EX_PARAMETERS FORMAT_EX_PARAMETERS
struct _GET_LENGTH_INFORMATION * PGET_LENGTH_INFORMATION
struct _FORMAT_EX_PARAMETERS * PFORMAT_EX_PARAMETERS
struct _GET_PARTITION_ATTRIBUTES * PGET_PARTITION_ATTRIBUTES
struct _GET_PARTITION_ATTRIBUTES GET_PARTITION_ATTRIBUTES
struct _DISK_CACHE_SETTING * PDISK_CACHE_SETTING
@ DiskCacheModifyUnsuccessful
@ DiskCacheWriteThroughNotSupported
struct _DISK_PERFORMANCE_PARAMETERS * PDISK_PERFORMANCE_PARAMETERS
@ DiskPerformanceTypeNonLowPriority
@ DiskPerformanceTypeAllPriority
struct _SET_PARTITION_ATTRIBUTES * PSET_PARTITION_ATTRIBUTES
struct _GET_LENGTH_INFORMATION GET_LENGTH_INFORMATION
USHORT * PBAD_TRACK_NUMBER
struct _IDEREGS * PIDEREGS
enum _DISK_CACHE_STATE DISK_CACHE_STATE
enum _DISK_SNAPSHOT_STATE DISK_SNAPSHOT_STATE
struct _DRIVERSTATUS DRIVERSTATUS
struct _FORMAT_PARAMETERS FORMAT_PARAMETERS
struct _SENDCMDOUTPARAMS * LPSENDCMDOUTPARAMS
struct _DRIVERSTATUS * LPDRIVERSTATUS
struct _FORMAT_PARAMETERS * PFORMAT_PARAMETERS
struct _DISK_CONTROLLER_NUMBER DISK_CONTROLLER_NUMBER
struct _DISK_SAN_SETTINGS DISK_SAN_SETTINGS
enum _DISK_SNAPSHOT_STATE * PDISK_SNAPSHOT_STATE
struct _DISK_SAN_SETTINGS * PDISK_SAN_SETTINGS
struct _SENDCMDINPARAMS SENDCMDINPARAMS
struct _DISK_CLUSTER_INFO DISK_CLUSTER_INFO
struct _DISK_PERFORMANCE_PARAMETERS DISK_PERFORMANCE_PARAMETERS
struct _DISK_PERFORMANCE * PDISK_PERFORMANCE
struct _SET_PARTITION_ATTRIBUTES SET_PARTITION_ATTRIBUTES
struct _DISK_GEOMETRY DISK_GEOMETRY
enum _DISK_CACHE_STATE * PDISK_CACHE_STATE
struct _DISK_COPY_DATA_PARAMETERS DISK_COPY_DATA_PARAMETERS
struct _GET_DISK_ATTRIBUTES * PGET_DISK_ATTRIBUTES
struct _REASSIGN_BLOCKS * PREASSIGN_BLOCKS
struct _PARTITION_INFORMATION PARTITION_INFORMATION
enum _MEDIA_TYPE MEDIA_TYPE
struct _GETVERSIONINPARAMS GETVERSIONINPARAMS
struct _SENDCMDOUTPARAMS * PSENDCMDOUTPARAMS
struct _MAPPED_ADDRESS * PMAPPED_ADDRESS
struct _SENDCMDOUTPARAMS SENDCMDOUTPARAMS
enum _MEDIA_TYPE * PMEDIA_TYPE
struct _SET_DISK_ATTRIBUTES SET_DISK_ATTRIBUTES
struct _DISK_CONTROLLER_NUMBER * PDISK_CONTROLLER_NUMBER
struct _SENDCMDINPARAMS * LPSENDCMDINPARAMS
enum _DISK_SAN_POLICY * PDISK_SAN_POLICY
struct _SET_PARTITION_INFORMATION * PSET_PARTITION_INFORMATION
struct _DISK_SNAPSHOT_INFO DISK_SNAPSHOT_INFO
enum _DISK_SAN_POLICY DISK_SAN_POLICY
struct _VERIFY_INFORMATION * PVERIFY_INFORMATION
enum _DISK_PERFORMANCE_TYPE * PDISK_PERFORMANCE_TYPE
struct _DISK_SNAPSHOT_INFO * PDISK_SNAPSHOT_INFO
struct _PARTITION_INFORMATION * PPARTITION_INFORMATION
struct _REASSIGN_BLOCKS REASSIGN_BLOCKS
struct _DISK_PERFORMANCE DISK_PERFORMANCE
struct _DRIVE_LAYOUT_INFORMATION DRIVE_LAYOUT_INFORMATION
struct _DISK_CLUSTER_INFO * PDISK_CLUSTER_INFO
struct _SET_DISK_ATTRIBUTES * PSET_DISK_ATTRIBUTES
struct _GETVERSIONINPARAMS * PGETVERSIONINPARAMS
struct _GET_DISK_ATTRIBUTES GET_DISK_ATTRIBUTES
struct _DISK_COPY_DATA_PARAMETERS * PDISK_COPY_DATA_PARAMETERS
struct _DISK_CACHE_SETTING DISK_CACHE_SETTING
struct _DISK_PERFORMANCE_INFO * PDISK_PERFORMANCE_INFO
struct _REASSIGN_BLOCKS_EX REASSIGN_BLOCKS_EX
struct _SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION
struct _DISK_PERFORMANCE_INFO DISK_PERFORMANCE_INFO
enum _DISK_PERFORMANCE_TYPE DISK_PERFORMANCE_TYPE
@ DiskSnapshotSnapshotDisk
@ DiskSnapshotPreSnapshot
@ DiskSnapshotSnapshotCheckRequired
struct _IDEREGS * LPIDEREGS
@ DiskSanPolicyOfflineInternal
@ DiskSanPolicyOfflineShared
struct _REASSIGN_BLOCKS_EX * PREASSIGN_BLOCKS_EX
struct _DISK_GEOMETRY * PDISK_GEOMETRY
struct _MAPPED_ADDRESS MAPPED_ADDRESS
struct _SENDCMDINPARAMS * PSENDCMDINPARAMS
struct _VERIFY_INFORMATION VERIFY_INFORMATION
DISK_CACHE_RETENTION_PRIORITY
struct _DISK_CACHE_INFORMATION DISK_CACHE_INFORMATION
struct _DISK_GROW_PARTITION * PDISK_GROW_PARTITION
struct _DISK_GROW_PARTITION DISK_GROW_PARTITION
struct _DISK_CACHE_INFORMATION * PDISK_CACHE_INFORMATION
struct _DISK_GEOMETRY_EX * PDISK_GEOMETRY_EX
enum _MEDIA_TYPE MEDIA_TYPE
struct _DISK_GEOMETRY_EX DISK_GEOMETRY_EX
LARGE_INTEGER SourceOffset
LARGE_INTEGER DestinationOffset
LARGE_INTEGER BytesToGrow
DISK_SAN_POLICY SanPolicy
LARGE_INTEGER CreationTimeStamp
DISK_SNAPSHOT_STATE State
UCHAR AdditionalData[ANYSIZE_ARRAY]
struct _MAPPED_ADDRESS * NextMappedAddress
LARGE_INTEGER BlockNumber[1]
DRIVERSTATUS DriverStatus
BOOLEAN RelinquishOwnership
_In_ ULONG _In_ ULONG SectorsPerTrack