/* * winioctl.h Win32 I/O control codes * * ========================================================================= * * Open Watcom Project * * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved. * * This file is automatically generated. Do not edit directly. * * ========================================================================= */ #ifdef DEFINE_GUID /* GUIDs */ DEFINE_GUID( GUID_DEVINTERFACE_DISK, 0x53F56307, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_CDROM, 0x53F56308, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_PARTITION, 0x53F4630A, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_TAPE, 0x53F4630B, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_WRITEONCEDISK, 0x53F4630C, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_VOLUME, 0x53F4630D, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_MEDIUMCHANGER, 0x53F46310, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_FLOPPY, 0x53F56311, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_CDCHANGER, 0x53F56312, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_STORAGEPORT, 0x2ACCFE60, 0xC130, 0x11D2, 0xB0, 0x82, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B ); DEFINE_GUID( GUID_DEVINTERFACE_HIDDEN_VOLUME, 0x7F108A28, 0x9833, 0x4B3B, 0xB7, 0x80, 0x2C, 0x6B, 0x5F, 0xA5, 0xC0, 0x62 ); DEFINE_GUID( GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73 ); DEFINE_GUID( GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); /* Old names for compatibility */ #define DiskClassGuid GUID_DEVINTERFACE_DISK #define CdRomClassGuid GUID_DEVINTERFACE_CDROM #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION #define TapeClassGuid GUID_DEVINTERFACE_TAPE #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR #endif /* DEFINE_GUID */ #ifndef _WINIOCTL_ #define _WINIOCTL_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifdef __cplusplus extern "C" { #endif /* This header contains a substantial number of constants and structures that overlap * with various headers in the DDK. Include guards are used through this header to * prevent conflicts. */ #ifndef _DEVIOCTL_ #define _DEVIOCTL_ /* Device type data type */ #define DEVICE_TYPE DWORD /* Macros to manipulate I/O control codes */ #define CTL_CODE( p1, p2, p3, p4 ) \ (((p1) << 16) | ((p4) << 14) | ((p2) << 2) | (p3)) #define DEVICE_TYPE_FROM_CTL_CODE( x ) (((DWORD)(x & 0xFFFF0000L)) >> 16) #define METHOD_FROM_CTL_CODE( x ) ((DWORD)(x & 0x00000003L)) /* Device types */ #define FILE_DEVICE_BEEP 0x00000001L #define FILE_DEVICE_CD_ROM 0x00000002L #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003L #define FILE_DEVICE_CONTROLLER 0x00000004L #define FILE_DEVICE_DATALINK 0x00000005L #define FILE_DEVICE_DFS 0x00000006L #define FILE_DEVICE_DISK 0x00000007L #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008L #define FILE_DEVICE_FILE_SYSTEM 0x00000009L #define FILE_DEVICE_INPORT_PORT 0x0000000AL #define FILE_DEVICE_KEYBOARD 0x0000000BL #define FILE_DEVICE_MAILSLOT 0x0000000CL #define FILE_DEVICE_MIDI_IN 0x0000000DL #define FILE_DEVICE_MIDI_OUT 0x0000000EL #define FILE_DEVICE_MOUSE 0x0000000FL #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010L #define FILE_DEVICE_NAMED_PIPE 0x00000011L #define FILE_DEVICE_NETWORK 0x00000012L #define FILE_DEVICE_NETWORK_BROWSER 0x00000013L #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014L #define FILE_DEVICE_NULL 0x00000015L #define FILE_DEVICE_PARALLEL_PORT 0x00000016L #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017L #define FILE_DEVICE_PRINTER 0x00000018L #define FILE_DEVICE_SCANNER 0x00000019L #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001AL #define FILE_DEVICE_SERIAL_PORT 0x0000001BL #define FILE_DEVICE_SCREEN 0x0000001CL #define FILE_DEVICE_SOUND 0x0000001DL #define FILE_DEVICE_STREAMS 0x0000001EL #define FILE_DEVICE_TAPE 0x0000001FL #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020L #define FILE_DEVICE_TRANSPORT 0x00000021L #define FILE_DEVICE_UNKNOWN 0x00000022L #define FILE_DEVICE_VIDEO 0x00000023L #define FILE_DEVICE_VIRTUAL_DISK 0x00000024L #define FILE_DEVICE_WAVE_IN 0x00000025L #define FILE_DEVICE_WAVE_OUT 0x00000026L #define FILE_DEVICE_8042_PORT 0x00000027L #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028L #define FILE_DEVICE_BATTERY 0x00000029L #define FILE_DEVICE_BUS_EXTENDER 0x0000002AL #define FILE_DEVICE_MODEM 0x0000002BL #define FILE_DEVICE_VDM 0x0000002CL #define FILE_DEVICE_MASS_STORAGE 0x0000002DL #define FILE_DEVICE_SMB 0x0000002EL #define FILE_DEVICE_KS 0x0000002FL #define FILE_DEVICE_CHANGER 0x00000030L #define FILE_DEVICE_SMARTCARD 0x00000031L #define FILE_DEVICE_ACPI 0x00000032L #define FILE_DEVICE_DVD 0x00000033L #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034L #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035L #define FILE_DEVICE_DFS_VOLUME 0x00000036L #define FILE_DEVICE_SERENUM 0x00000037L #define FILE_DEVICE_TERMSRV 0x00000038L #define FILE_DEVICE_KSEC 0x00000039L #define FILE_DEVICE_FIPS 0x0000003AL #define FILE_DEVICE_INFINIBAND 0x0000003BL #define FILE_DEVICE_VMBUS 0x0000003EL #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003FL #define FILE_DEVICE_WPD 0x00000040L #define FILE_DEVICE_BLUETOOTH 0x00000041L #define FILE_DEVICE_MT_COMPOSITE 0x00000042L #define FILE_DEVICE_MT_TRANSPORT 0x00000043L #define FILE_DEVICE_BIOMETRIC 0x00000044L #define FILE_DEVICE_PMI 0x00000045L /* Buffering methods */ #define METHOD_BUFFERED 0L #define METHOD_IN_DIRECT 1L #define METHOD_OUT_DIRECT 2L #define METHOD_NEITHER 3L #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT /* File access types */ #define FILE_ANY_ACCESS 0x0000L #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS #define FILE_READ_ACCESS 0x0001L #define FILE_WRITE_ACCESS 0x0002L #endif /* _DEVIOCTL_ */ #ifndef _NTDDSTOR_H_ #define _NTDDSTOR_H_ /* Primitive data types */ typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION; /* Storage device I/O control codes */ #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_CHECK_VERIFY \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_CHECK_VERIFY2 \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_MEDIA_REMOVAL \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_EJECT_MEDIA \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_LOAD_MEDIA \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_LOAD_MEDIA2 \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_RESERVE \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_RELEASE \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_FIND_NEW_DEVICES \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_EJECTION_CONTROL \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_MCN_CONTROL \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_GET_MEDIA_TYPES \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_GET_HOTPLUG_INFO \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_SET_HOTPLUG_INFO \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_STORAGE_RESET_BUS \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_RESET_DEVICE \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_BREAK_RESERVATION \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_STORAGE_GET_DEVICE_NUMBER \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_PREDICT_FAILURE \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_READ_CAPACITY \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_QUERY_PROPERTY \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS ) #define IOCTL_STORAGE_GET_BC_PROPERTIES \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_STORAGE_ALLOCATE_BC_STREAM \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_STORAGE_FREE_BC_STREAM \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define OBSOLETE_IOCTL_STORAGE_RESET_BUS \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \ CTL_CODE( IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) /* Tape statistics flags */ #define RECOVERED_WRITES_VALID 0x00000001L #define UNRECOVERED_WRITES_VALID 0x00000002L #define RECOVERED_READS_VALID 0x00000004L #define UNRECOVERED_READS_VALID 0x00000008L #define WRITE_COMPRESSION_INFO_VALID 0x00000010L #define READ_COMPRESSION_INFO_VALID 0x00000020L /* TAPE_GET_STATISTICS operations */ #define TAPE_RETURN_STATISTICS 0L #define TAPE_RETURN_ENV_INFO 1L #define TAPE_RESET_STATISTICS 2L /* Media characteristics */ #define MEDIA_ERASEABLE 0x00000001L #define MEDIA_WRITE_ONCE 0x00000002L #define MEDIA_READ_ONLY 0x00000004L #define MEDIA_READ_WRITE 0x00000008L #define MEDIA_WRITE_PROTECTED 0x00000100L #define MEDIA_CURRENTLY_MOUNTED 0x80000000L /* Device data set management action flags */ #define DeviceDsmActionFlag_NonDestructive 0x80000000L /* Macro to manipulate device data data set management action flags */ #define IsDsmActionNonDestructive( x ) \ ((BOOLEAN)(((x) & DeviceDsmActionFlag_NonDestructive) != 0L)) /* Device data set management actions */ #define DeviceDsmAction_None 0L #define DeviceDsmAction_Trim 1L #define DeviceDsmAction_Notification (2L | DeviceDsmActionFlag_NonDestructive) /* Device data set management flags */ #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001L /* Device data set management notification flags */ #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001L #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002L /* Storage BC version number */ #define IOCTL_STORAGE_BC_VERSION 1L /* Storage priority hint support flags */ #define STORAGE_PRIORITY_HINT_SUPPORTED 0x00000001L /* Storage hotplug information */ typedef struct _STORAGE_HOTPLUG_INFO { DWORD Size; BOOLEAN MediaRemovable; BOOLEAN MediaHotplug; BOOLEAN DeviceHotplug; BOOLEAN WriteCacheEnableOverride; } STORAGE_HOTPLUG_INFO; typedef STORAGE_HOTPLUG_INFO *PSTORAGE_HOTPLUG_INFO; /* Storage device number */ typedef struct _STORAGE_DEVICE_NUMBER { DEVICE_TYPE DeviceType; DWORD DeviceNumber; DWORD PartitionNumber; } STORAGE_DEVICE_NUMBER; typedef STORAGE_DEVICE_NUMBER *PSTORAGE_DEVICE_NUMBER; /* Storage bus reset request */ typedef struct _STORAGE_BUS_RESET_REQUEST { BYTE PathId; } STORAGE_BUS_RESET_REQUEST; typedef STORAGE_BUS_RESET_REQUEST *PSTORAGE_BUS_RESET_REQUEST; /* Storage break reservation request */ typedef struct STORAGE_BREAK_RESERVATION_REQUEST { DWORD Length; BYTE _unused; BYTE PathId; BYTE TargetId; BYTE Lun; } STORAGE_BREAK_RESERVATION_REQUEST; typedef STORAGE_BREAK_RESERVATION_REQUEST *PSTORAGE_BREAK_RESERVATION_REQUEST; /* IOCTL_STORAGE_MEDIA_REMOVAL parameters */ typedef struct _PREVENT_MEDIA_REMOVAL { BOOLEAN PreventMediaRemoval; } PREVENT_MEDIA_REMOVAL; typedef PREVENT_MEDIA_REMOVAL *PPREVENT_MEDIA_REMOVAL; /* Class media change context */ typedef struct _CLASS_MEDIA_CHANGE_CONTEXT { DWORD MediaChangeContext; DWORD NewState; } CLASS_MEDIA_CHANGE_CONTEXT; typedef CLASS_MEDIA_CHANGE_CONTEXT *PCLASS_MEDIA_CHANGE_CONTEXT; /* Tape statistics */ typedef struct _TAPE_STATISTICS { DWORD Version; DWORD Flags; LARGE_INTEGER RecoveredWrites; LARGE_INTEGER UnrecoveredWrites; LARGE_INTEGER RecoveredReads; LARGE_INTEGER UnrecoveredReads; BYTE CompressionRatioReads; BYTE CompressionRatioWrites; } TAPE_STATISTICS; typedef TAPE_STATISTICS *PTAPE_STATISTICS; /* IOCTL_TAPE_GET_STATISTICS parameters */ typedef struct _TAPE_GET_STATISTICS { DWORD Operation; } TAPE_GET_STATISTICS; typedef TAPE_GET_STATISTICS *PTAPE_GET_STATISTICS; /* Storage media types */ typedef enum _STORAGE_MEDIA_TYPE { DDS_4mm = 0x20, MiniQic = 0x21, Travan = 0x22, QIC = 0x23, MP_8mm = 0x24, AME_8mm = 0x25, AIT1_8mm = 0x26, DLT = 0x27, NCTP = 0x28, IBM_3480 = 0x29, IBM_3480E = 0x2A, IBM_Magstar_3590 = 0x2B, IBM_Magstar_MP = 0x2C, STK_DATA_D3 = 0x2D, SONY_DTF = 0x2E, DV_6mm = 0x2F, DMI = 0x30, SONY_D2 = 0x31, CLEANER_CARTRIDGE = 0x32, CD_ROM = 0x33, CD_R = 0x34, CD_RW = 0x35, DVD_ROM = 0x36, DVD_R = 0x37, DVD_RW = 0x38, MO_3_RW = 0x39, MO_5_WO = 0x3A, MO_5_RW = 0x3B, MO_5_LIMDOW = 0x3C, PC_5_WO = 0x3D, PC_5_RW = 0x3E, PD_5_RW = 0x3F, ABL_5_WO = 0x40, PINNACLE_APEX_5_RW = 0x41, SONY_12_WO = 0x42, PHILIPS_12_WO = 0x43, HITACHI_12_WO = 0x44, CYGNET_12_WO = 0x45, KODAK_14_WO = 0x46, MO_NFR_525 = 0x47, NIKON_12_RW = 0x48, IOMEGA_ZIP = 0x49, IOMEGA_JAZ = 0x4A, SYQUEST_EZ135 = 0x4B, SYQUEST_EZFLYER = 0x4C, SYQUEST_SYJET = 0x4D, AVATAR_F2 = 0x4E, MP2_8mm = 0x4F, DST_S = 0x50, DST_M = 0x51, DST_L = 0x52, VXATape_1 = 0x53, VXATape_2 = 0x54, #if (NTDDI_VERSION < 0x05010000) STK_EAGLE = 0x55, #else STK_9840 = 0x55, #endif LTO_Ultrium = 0x56, LTO_Accelis = 0x57, DVD_RAM = 0x58, ATI_8mm = 0x59, ADR_1 = 0x5A, ADR_2 = 0x5B, STK_9940 = 0x5C, SAIT = 0x5D, VXATape = 0x5E } STORAGE_MEDIA_TYPE; typedef STORAGE_MEDIA_TYPE *PSTORAGE_MEDIA_TYPE; /* Storage bus types */ typedef enum _STORAGE_BUS_TYPE { BusTypeUnknown = 0x00, BusTypeScsi = 0x01, BusTypeAtapi = 0x02, BusTypeAta = 0x03, BusType1394 = 0x04, BusTypeSsa = 0x05, BusTypeFibre = 0x06, BusTypeUsb = 0x07, BusTypeRAID = 0x08, BusTypeiScsi = 0x09, BusTypeSas = 0x0A, BusTypeSata = 0x0B, BusTypeSd = 0x0C, BusTypeMmc = 0x0D, BusTypeVirtual = 0x0E, BusTypeFileBackedVirtual = 0x0F, BusTypeMax = 0x10, BusTypeMaxReserved = 0x7F } STORAGE_BUS_TYPE; typedef STORAGE_BUS_TYPE *PSTORAGE_BUS_TYPE; /* Device media information */ typedef struct _DEVICE_MEDIA_INFO { union { struct { LARGE_INTEGER Cylinders; STORAGE_MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; DWORD NumberMediaSides; DWORD MediaCharacteristics; } DiskInfo; struct { LARGE_INTEGER Cylinders; STORAGE_MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; DWORD NumberMediaSides; DWORD MediaCharacteristics; } RemovableDiskInfo; struct { STORAGE_MEDIA_TYPE MediaType; DWORD MediaCharacteristics; DWORD CurrentBlockSize; STORAGE_BUS_TYPE BusType; union { struct { BYTE MediumType; BYTE DensityCode; } ScsiInformation; } BusSpecificData; } TapeInfo; } DeviceSpecific; } DEVICE_MEDIA_INFO; typedef DEVICE_MEDIA_INFO *PDEVICE_MEDIA_INFO; /* Media type information */ typedef struct _GET_MEDIA_TYPES { DWORD DeviceType; DWORD MediaInfoCount; DEVICE_MEDIA_INFO MediaInfo[1]; } GET_MEDIA_TYPES; typedef GET_MEDIA_TYPES *PGET_MEDIA_TYPES; /* IOCTL_STORAGE_PREDICT_FAILURE returned data */ typedef struct _STORAGE_PREDICT_FAILURE { DWORD PredictFailure; BYTE VendorSpecific[512]; } STORAGE_PREDICT_FAILURE; typedef STORAGE_PREDICT_FAILURE *PSTORAGE_PREDICT_FAILURE; /* Storage query types */ typedef enum _STORAGE_QUERY_TYPE { PropertyStandardQuery = 0, PropertyExistsQuery = 1, PropertyMaskQuery = 2, PropertyQueryMaxDefined = 3 } STORAGE_QUERY_TYPE; typedef STORAGE_QUERY_TYPE *PSTORAGE_QUERY_TYPE; /* Storage property identifiers */ typedef enum _STORAGE_PROPERTY_ID { StorageDeviceProperty = 0, StorageAdapterProperty = 1, StorageDeviceIdProperty = 2, StorageDeviceUniqueIdProperty = 3, StorageDeviceWriteCacheProperty = 4, StorageMiniportProperty = 5, StorageAccessAlignmentProperty = 6, StorageDeviceSeekPenaltyProperty = 7, StorageDeviceTrimProperty = 8, StorageDeviceWriteAggregationProperty = 9 } STORAGE_PROPERTY_ID; typedef STORAGE_PROPERTY_ID *PSTORAGE_PROPERTY_ID; /* Storage property query */ typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; BYTE AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY; typedef STORAGE_PROPERTY_QUERY *PSTORAGE_PROPERTY_QUERY; /* Storage description header */ typedef struct _STORAGE_DESCRIPTOR_HEADER { DWORD Version; DWORD Size; } STORAGE_DESCRIPTOR_HEADER; typedef STORAGE_DESCRIPTOR_HEADER *PSTORAGE_DESCRIPTOR_HEADER; /* Storage device descriptor */ typedef struct _STORAGE_DEVICE_DESCRIPTOR { DWORD Version; DWORD Size; BYTE DeviceType; BYTE DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; DWORD VendorIdOffset; DWORD ProductIdOffset; DWORD ProductRevisionOffset; DWORD SerialNumberOffset; STORAGE_BUS_TYPE BusType; DWORD RawPropertiesLength; BYTE RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR; typedef STORAGE_DEVICE_DESCRIPTOR *PSTORAGE_DEVICE_DESCRIPTOR; /* Storage adapter descriptor */ typedef struct _STORAGE_ADAPTER_DESCRIPTOR { DWORD Version; DWORD Size; DWORD MaximumTransferLength; DWORD MaximumPhysicalPages; DWORD AlignmentMask; BOOLEAN AdapterUsesPio; BOOLEAN AdapterScansDown; BOOLEAN CommandQueueing; BOOLEAN AcceleratedTransfer; #if (NTDDI_VERSION < 0x05010000) BOOLEAN BusType; #else BYTE BusType; #endif WORD BusMajorVersion; WORD BusMinorVersion; } STORAGE_ADAPTER_DESCRIPTOR; typedef STORAGE_ADAPTER_DESCRIPTOR *PSTORAGE_ADAPTER_DESCRIPTOR; /* Storage access alignment descriptor */ typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { DWORD Version; DWORD Size; DWORD BytesPerCacheLine; DWORD BytesOffsetForCacheAlignment; DWORD BytesPerLogicalSector; DWORD BytesPerPhysicalSector; DWORD BytesOffsetForSectorAlignment; } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; typedef STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; /* Storage port code sets */ typedef enum _STORAGE_PORT_CODE_SET { StoragePortCodeSetReserved = 0, StoragePortCodeSetStorport = 1, StoragePortCodeSetSCSIport = 2 } STORAGE_PORT_CODE_SET; typedef STORAGE_PORT_CODE_SET *PSTORAGE_PORT_CODE_SET; /* Storage miniport descriptor */ typedef struct _STORAGE_MINIPORT_DESCRIPTOR { DWORD Version; DWORD Size; STORAGE_PORT_CODE_SET Portdriver; BOOLEAN LUNResetSupported; BOOLEAN TargetResetSupported; } STORAGE_MINIPORT_DESCRIPTOR; typedef STORAGE_MINIPORT_DESCRIPTOR *PSTORAGE_MINIPORT_DESCRIPTOR; /* Storage identifier code sets */ typedef enum _STORAGE_IDENTIFIER_CODE_SET { StorageIdCodeSetReserved = 0, StorageIdCodeSetBinary = 1, StorageIdCodeSetAscii = 2, StorageIdCodeSetUtf8 = 3 } STORAGE_IDENTIFIER_CODE_SET; typedef STORAGE_IDENTIFIER_CODE_SET *PSTORAGE_IDENTIFIER_CODE_SET; /* Storage identifier types */ typedef enum _STORAGE_IDENTIFIER_TYPE { StorageIdTypeVendorSpecific = 0, StorageIdTypeVendorId = 1, StorageIdTypeEUI64 = 2, StorageIdTypeFCPHName = 3, StorageIdTypePortRelative = 4, StorageIdTypeTargetPortGroup = 5, StorageIdTypeLogicalUnitGroup = 6, StorageIdTypeMD5LogicalUnitIdentifier = 7, StorageIdTypeScsiNameString = 8 } STORAGE_IDENTIFIER_TYPE; typedef STORAGE_IDENTIFIER_TYPE *PSTORAGE_IDENTIFIER_TYPE; #define StorageIdTypeNAA StorageIdTypeFCPHName /* Storage identifier NAA formats */ typedef enum _STORAGE_ID_NAA_FORMAT { StorageIdNAAFormatIEEEExtended = 2, StorageIdNAAFormatIEEERegistered = 3, StorageIdNAAFormatIEEEERegisteredExtended = 5 } STORAGE_ID_NAA_FORMAT; typedef STORAGE_ID_NAA_FORMAT *PSTORAGE_ID_NAA_FORMAT; /* Storage association types */ typedef enum _STORAGE_ASSOCIATION_TYPE { StorageIdAssocDevice = 0, StorageIdAssocPort = 1, StorageIdAssocTarget = 2 } STORAGE_ASSOCIATION_TYPE; typedef STORAGE_ASSOCIATION_TYPE *PSTORAGE_ASSOCIATION_TYPE; /* Storage identifier */ typedef struct _STORAGE_IDENTIFIER { STORAGE_IDENTIFIER_CODE_SET CodeSet; STORAGE_IDENTIFIER_TYPE Type; WORD IdentifierSize; WORD NextOffset; STORAGE_ASSOCIATION_TYPE Association; BYTE Identifier[1]; } STORAGE_IDENTIFIER; typedef STORAGE_IDENTIFIER *PSTORAGE_IDENTIFIER; /* Storage device identifier descriptor */ typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR { DWORD Version; DWORD Size; DWORD NumberOfIdentifiers; BYTE Identifiers[1]; } STORAGE_DEVICE_ID_DESCRIPTOR; typedef STORAGE_DEVICE_ID_DESCRIPTOR *PSTORAGE_DEVICE_ID_DESCRIPTOR; /* Device seek penalty descriptor */ typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { DWORD Version; DWORD Size; BOOLEAN IncursSeekPenalty; } DEVICE_SEEK_PENALTY_DESCRIPTOR; typedef DEVICE_SEEK_PENALTY_DESCRIPTOR *PDEVICE_SEEK_PENALTY_DESCRIPTOR; /* Device write aggregation descriptor */ typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR { DWORD Version; DWORD Size; BOOLEAN BenefitsFromWriteAggregation; } DEVICE_WRITE_AGGREGATION_DESCRIPTOR; typedef DEVICE_WRITE_AGGREGATION_DESCRIPTOR *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR; /* Device trim descriptor */ typedef struct _DEVICE_TRIM_DESCRIPTOR { DWORD Version; DWORD Size; BOOLEAN TrimEnabled; } DEVICE_TRIM_DESCRIPTOR; typedef DEVICE_TRIM_DESCRIPTOR *PDEVICE_TRIM_DESCRIPTOR; /* Device data set range */ typedef struct _DEVICE_DATA_SET_RANGE { LONGLONG StartingOffset; DWORDLONG LengthInBytes; } DEVICE_DATA_SET_RANGE; typedef DEVICE_DATA_SET_RANGE *PDEVICE_DATA_SET_RANGE; /* IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES parameters */ typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES { DWORD Size; DEVICE_DATA_MANAGEMENT_SET_ACTION Action; DWORD Flags; DWORD ParameterBlockOffset; DWORD ParameterBlockLength; DWORD DataSetRangesOffset; DWORD DataSetRangesLength; } DEVICE_MANAGE_DATA_SET_ATTRIBUTES; typedef DEVICE_MANAGE_DATA_SET_ATTRIBUTES *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; /* Device data set management notification parameters */ typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS { DWORD Size; DWORD Flags; DWORD NumFileTypeIDs; GUID FileTypeID[1]; } DEVICE_DSM_NOTIFICATION_PARAMETERS; typedef DEVICE_DSM_NOTIFICATION_PARAMETERS *PDEVICE_DSM_NOTIFICATION_PARAMETERS; /* IOCTL_STORAGE_GET_BC_PROPERTIES returned data */ typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT { DWORD MaximumRequestsPerPeriod; DWORD MinimumPeriod; DWORDLONG MaximumRequestSize; DWORD EstimatedTimePerRequest; DWORD NumOutStandingRequests; DWORDLONG RequestSize; } STORAGE_GET_BC_PROPERTIES_OUTPUT; typedef STORAGE_GET_BC_PROPERTIES_OUTPUT *PSTORAGE_GET_BC_PROPERTIES_OUTPUT; /* IOCTL_STORAGE_ALLOCATE_BC_STREAM parameters */ typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT { DWORD Version; DWORD RequestsPerPeriod; DWORD Period; BOOLEAN RetryFailures; BOOLEAN Discardable; BOOLEAN Reserved1[2]; DWORD AccessType; DWORD AccessMode; } STORAGE_ALLOCATE_BC_STREAM_INPUT; typedef STORAGE_ALLOCATE_BC_STREAM_INPUT *PSTORAGE_ALLOCATE_BC_STREAM_INPUT; /* IOCTL_STORAGE_ALLOCATE_BC_STREAM returned data */ typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT { DWORDLONG RequestSize; DWORD NumOutStandingRequests; } STORAGE_ALLOCATE_BC_STREAM_OUTPUT; typedef STORAGE_ALLOCATE_BC_STREAM_OUTPUT *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT; /* Storage priority hint support information */ typedef struct _STORAGE_PRIORITY_HINT_SUPPORT { DWORD SupportFlags; } STORAGE_PRIORITY_HINT_SUPPORT; typedef STORAGE_PRIORITY_HINT_SUPPORT *PSTORAGE_PRIORITY_HINT_SUPPORT; /* Storage media serial number data */ typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA { WORD Reserved; WORD SerialNumberLength; BYTE SerialNumber[1]; } STORAGE_MEDIA_SERIAL_NUMBER_DATA; typedef STORAGE_MEDIA_SERIAL_NUMBER_DATA *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA; /* Storage read capacity */ typedef struct _STORAGE_READ_CAPACITY { DWORD Version; DWORD Size; DWORD BlockLength; LARGE_INTEGER NumberOfBlocks; LARGE_INTEGER DiskLength; } STORAGE_READ_CAPACITY; typedef STORAGE_READ_CAPACITY *PSTORAGE_READ_CAPACITY; /* Write cache types */ typedef enum _WRITE_CACHE_TYPE { WriteCacheTypeUnknown = 0, WriteCacheTypeNone = 1, WriteCacheTypeWriteBack = 2, WriteCacheTypeWriteThrough = 3 } WRITE_CACHE_TYPE; /* Write cache enable values */ typedef enum _WRITE_CACHE_ENABLE { WriteCacheEnableUnknown = 0, WriteCacheDisabled = 1, WriteCacheEnabled = 2 } WRITE_CACHE_ENABLE; /* Write cache change values */ typedef enum _WRITE_CACHE_CHANGE { WriteCacheChangeUnknown = 0, WriteCacheNotChangeable = 1, WriteCacheChangeable = 2 } WRITE_CACHE_CHANGE; /* Write through values */ typedef enum _WRITE_THROUGH { WriteThroughUnknown = 0, WriteThroughNotSupported = 1, WriteThroughSupported = 2 } WRITE_THROUGH; /* Storage write cache property */ typedef struct _STORAGE_WRITE_CACHE_PROPERTY { DWORD Version; DWORD Size; WRITE_CACHE_TYPE WriteCacheType; WRITE_CACHE_ENABLE WriteCacheEnabled; WRITE_CACHE_CHANGE WriteCacheChangeable; WRITE_THROUGH WriteThroughSupported; BOOLEAN FlushCacheSupported; BOOLEAN UserDefinedPowerProtection; BOOLEAN NVCacheEnabled; } STORAGE_WRITE_CACHE_PROPERTY; typedef STORAGE_WRITE_CACHE_PROPERTY *PSTORAGE_WRITE_CACHE_PROPERTY; /* Persistent reserve command */ typedef struct _PERSISTENT_RESERVE_COMMAND { DWORD Version; DWORD Size; union { struct { BYTE ServiceAction : 5; BYTE Reserved1 : 3; WORD AllocationLength; } PR_IN; struct { BYTE ServiceAction : 5; BYTE Reserved1 : 3; BYTE Type : 4; BYTE Scope : 4; BYTE ParameterList[1]; } PR_OUT; }; } PERSISTENT_RESERVE_COMMAND; typedef PERSISTENT_RESERVE_COMMAND *PPERSISTENT_RESERVE_COMMAND; #endif /* _NTDDSTOR_H_ */ #ifndef _NTDDDISK_H_ #define _NTDDDISK_H_ /* Bad track number data type */ typedef WORD BAD_TRACK_NUMBER; typedef WORD *PBAD_TRACK_NUMBER; /* Disk device I/O control codes */ #define IOCTL_DISK_BASE FILE_DEVICE_DISK #define IOCTL_DISK_GET_DRIVE_GEOMETRY \ CTL_CODE( IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_GET_PARTITION_INFO \ CTL_CODE( IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_SET_PARTITION_INFO \ CTL_CODE( IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_GET_DRIVE_LAYOUT \ CTL_CODE( IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_SET_DRIVE_LAYOUT \ CTL_CODE( IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_VERIFY \ CTL_CODE( IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_FORMAT_TRACKS \ CTL_CODE( IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_REASSIGN_BLOCKS \ CTL_CODE( IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_PERFORMANCE \ CTL_CODE( IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_IS_WRITABLE \ CTL_CODE( IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_LOGGING \ CTL_CODE( IOCTL_DISK_BASE, 0x000A, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_FORMAT_TRACKS_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_HISTOGRAM_STRUCTURE \ CTL_CODE( IOCTL_DISK_BASE, 0x000C, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_HISTOGRAM_DATA \ CTL_CODE( IOCTL_DISK_BASE, 0x000D, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_HISTOGRAM_RESET \ CTL_CODE( IOCTL_DISK_BASE, 0x000E, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_REQUEST_STRUCTURE \ CTL_CODE( IOCTL_DISK_BASE, 0x000F, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_REQUEST_DATA \ CTL_CODE( IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_PERFORMANCE_OFF \ CTL_CODE( IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS ) #if (_WIN32_WINNT >= 0x0400) #define IOCTL_DISK_CONTROLLER_NUMBER \ CTL_CODE( IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define SMART_GET_VERSION \ CTL_CODE( IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS ) #define SMART_SEND_DRIVE_COMMAND \ CTL_CODE( IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define SMART_RCV_DRIVE_DATA \ CTL_CODE( IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0500) #define IOCTL_DISK_GET_PARTITION_INFO_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_SET_PARTITION_INFO_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_CREATE_DISK \ CTL_CODE( IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_GET_LENGTH_INFO \ CTL_CODE( IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0502) #define IOCTL_DISK_REASSIGN_BLOCKS_EX \ CTL_CODE( IOCTL_DISK_BASE, 0x0029, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0500) #define IOCTL_DISK_UPDATE_DRIVE_SIZE \ CTL_CODE( IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_GROW_PARTITION \ CTL_CODE( IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_GET_CACHE_INFORMATION \ CTL_CODE( IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_SET_CACHE_INFORMATION \ CTL_CODE( IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #if (NTDDI_VERSION < 0x05020000) #define IOCTL_DISK_GET_WRITE_CACHE_STATE \ CTL_CODE( IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS ) #else #define OBSOLETE_IOCTL_DISK_GET_WRITE_CACHE_STATE \ CTL_CODE( IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS ) #endif #define IOCTL_DISK_DELETE_DRIVE_LAYOUT \ CTL_CODE( IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_UPDATE_PROPERTIES \ CTL_CODE( IOCTL_DISK_BASE, 0x0050, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #define IOCTL_DISK_RESET_SNAPSHOT_INFO \ CTL_CODE( IOCTL_DISK_BASE, 0x0084, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #if (_WIN32_WINNT >= 0x0500) #define IOCTL_DISK_FORMAT_DRIVE \ CTL_CODE( IOCTL_DISK_BASE, 0x00F3, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_DISK_SENSE_DEVICE \ CTL_CODE( IOCTL_DISK_BASE, 0x00F8, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #define IOCTL_DISK_CHECK_VERIFY \ CTL_CODE( IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_MEDIA_REMOVAL \ CTL_CODE( IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_EJECT_MEDIA \ CTL_CODE( IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_LOAD_MEDIA \ CTL_CODE( IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_RESERVE \ CTL_CODE( IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_RELEASE \ CTL_CODE( IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_FIND_NEW_DEVICES \ CTL_CODE( IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_DISK_GET_MEDIA_TYPES \ CTL_CODE( IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS ) /* Partition types */ #define PARTITION_ENTRY_UNUSED 0x00000000L #define PARTITION_FAT_12 0x00000001L #define PARTITION_XENIX_1 0x00000002L #define PARTITION_XENIX_2 0x00000003L #define PARTITION_FAT_16 0x00000004L #define PARTITION_EXTENDED 0x00000005L #define PARTITION_HUGE 0x00000006L #define PARTITION_IFS 0x00000007L #define PARTITION_OS2BOOTMGR 0x0000000AL #define PARTITION_FAT32 0x0000000BL #define PARTITION_FAT32_XINT13 0x0000000CL #define PARTITION_XINT13 0x0000000EL #define PARTITION_XINT13_EXTENDED 0x0000000FL #define PARTITION_PREP 0x00000041L #define PARTITION_LDM 0x00000042L #define PARTITION_UNIX 0x00000063L #define VALID_NTFT 0x000000C0L #define PARTITION_NTFT 0x00000080L /* GUID partition table (GPT) partition attributes */ #if (_WIN32_WINNT >= 0x0500) #define GPT_ATTRIBUTE_PLATFORM_REQUIRED 0x0000000000000001LL #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 0x8000000000000000LL #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN 0x4000000000000000LL #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY 0x2000000000000000LL #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY 0x1000000000000000LL #endif /* Number of histogram buckets */ #define HIST_NO_OF_BUCKETS 24 /* Disk logging functions */ #define DISK_LOGGING_START 0 #define DISK_LOGGING_STOP 1 #define DISK_LOGGING_DUMP 2 #define DISK_BINNING 3 /* Version capabilities */ #if (_WIN32_WINNT >= 0x0400) #define CAP_ATA_ID_CMD 1L #define CAP_ATAPI_ID_CMD 2L #define CAP_SMART_CMD 4L #endif /* Command register values */ #if (_WIN32_WINNT >= 0x0400) #define ATAPI_ID_CMD 0xA1 #define ID_CMD 0xEC #define SMART_CMD 0xB0 #endif /* Cylinder register values */ #if (_WIN32_WINNT >= 0x0400) #define SMART_CYL_LOW 0x4F #define SMART_CYL_HI 0xC2 #endif /* Driver errors */ #if (_WIN32_WINNT >= 0x0400) #define SMART_NO_ERROR 0 #define SMART_IDE_ERROR 1 #define SMART_INVALID_FLAG 2 #define SMART_INVALID_COMMAND 3 #define SMART_INVALID_BUFFER 4 #define SMART_INVALID_DRIVE 5 #define SMART_INVALID_IOCTL 6 #define SMART_ERROR_NO_MEM 7 #define SMART_INVALID_REGISTER 8 #define SMART_NOT_SUPPORTED 9 #define SMART_NO_IDE_DEVICE 10 #endif /* Offline diagnostic subcommands */ #if (_WIN32_WINNT >= 0x0400) #define SMART_OFFLINE_ROUTINE_OFFLINE 0 #define SMART_SHORT_SELFTEST_OFFLINE 1 #define SMART_EXTENDED_SELFTEST_OFFLINE 2 #define SMART_ABORT_OFFLINE_SELFTEST 127 #define SMART_SHORT_SELFTEST_CAPTIVE 129 #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 #endif /* Buffer sizes */ #if (_WIN32_WINNT >= 0x0400) #define READ_ATTRIBUTE_BUFFER_SIZE 512 #define IDENTITY_BUFFER_SIZE 512 #define READ_THRESHOLD_BUFFER_SIZE 512 #define SMART_LOG_SECTOR_SIZE 512 #endif /* Feature register subcommands */ #if (_WIN32_WINNT >= 0x0400) #define READ_ATTRIBUTES 0xD0 #define READ_THRESHOLDS 0xD1 #define ENABLE_DISABLE_AUTOSAVE 0xD2 #define SAVE_ATTRIBUTE_VALUES 0xD3 #define EXECUTE_OFFLINE_DIAGS 0xD4 #define SMART_READ_LOG 0xD5 #define SMART_WRITE_LOG 0xD6 #define ENABLE_SMART 0xD8 #define DISABLE_SMART 0xD9 #define RETURN_SMART_STATUS 0xDA #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB #endif /* Media types */ typedef enum _MEDIA_TYPE { Unknown = 0, F5_1Pt2_512 = 1, F3_1Pt44_512 = 2, F3_2Pt88_512 = 3, F3_20Pt8_512 = 4, F3_720_512 = 5, F5_360_512 = 6, F5_320_512 = 7, F5_320_1024 = 8, F5_180_512 = 9, F5_160_512 = 10, RemovableMedia = 11, FixedMedia = 12, F3_120M_512 = 13, F3_640_512 = 14, F5_640_512 = 15, F5_720_512 = 16, F3_1Pt2_512 = 17, F3_1Pt23_1024 = 18, F5_1Pt23_1024 = 19, F3_128Mb_512 = 20, F3_230Mb_512 = 21, F8_256_128 = 22, F3_200Mb_512 = 23, F3_240M_512 = 24, F3_32M_512 = 25 } MEDIA_TYPE; typedef MEDIA_TYPE *PMEDIA_TYPE; /* Format parameters */ typedef struct _FORMAT_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; } FORMAT_PARAMETERS; typedef FORMAT_PARAMETERS *PFORMAT_PARAMETERS; /* Format parameters (extended version) */ typedef struct _FORMAT_EX_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; WORD FormatGapLength; WORD SectorsPerTrack; WORD SectorNumber[1]; } FORMAT_EX_PARAMETERS; typedef FORMAT_EX_PARAMETERS *PFORMAT_EX_PARAMETERS; /* Disk geometry */ typedef struct _DISK_GEOMETRY { LARGE_INTEGER Cylinders; MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; } DISK_GEOMETRY; typedef DISK_GEOMETRY *PDISK_GEOMETRY; /* Partition information */ typedef struct _PARTITION_INFORMATION { LARGE_INTEGER StartingOffset; LARGE_INTEGER PartitionLength; DWORD HiddenSectors; DWORD PartitionNumber; BYTE PartitionType; BOOLEAN BootIndicator; BOOLEAN RecognizedPartition; BOOLEAN RewritePartition; } PARTITION_INFORMATION; typedef PARTITION_INFORMATION *PPARTITION_INFORMATION; /* IOCTL_DISK_SET_PARTITION_INFO parameters */ typedef struct _SET_PARTITION_INFORMATION { BYTE PartitionType; } SET_PARTITION_INFORMATION; typedef SET_PARTITION_INFORMATION *PSET_PARTITION_INFORMATION; /* Drive layout information */ typedef struct _DRIVE_LAYOUT_INFORMATION { DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION; typedef DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION; /* Verify information */ typedef struct _VERIFY_INFORMATION { LARGE_INTEGER StartingOffset; DWORD Length; } VERIFY_INFORMATION; typedef VERIFY_INFORMATION *PVERIFY_INFORMATION; /* IOCTL_DISK_REASSIGN_BLOCKS parameters */ typedef struct _REASSIGN_BLOCKS { WORD Reserved; WORD Count; DWORD BlockNumber[1]; } REASSIGN_BLOCKS; typedef REASSIGN_BLOCKS *PREASSIGN_BLOCKS; /* IOCTL_DISK_REASSIGN_BLOCKS_EX parameters */ #include typedef struct _REASSIGN_BLOCKS_EX { WORD Reserved; WORD Count; LARGE_INTEGER BlockNumber[1]; } REASSIGN_BLOCKS_EX; typedef REASSIGN_BLOCKS_EX *PREASSIGN_BLOCKS_EX; #include /* Partition styles */ #if (_WIN32_WINNT >= 0x0500) typedef enum _PARTITION_STYLE { PARTITION_STYLE_MBR = 0, PARTITION_STYLE_GPT = 1, PARTITION_STYLE_RAW = 2 } PARTITION_STYLE; #endif /* GUID partition table (GPT) partition information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _PARTITION_INFORMATION_GPT { GUID PartitionType; GUID PartitionId; DWORD64 Attributes; WCHAR Name[36]; } PARTITION_INFORMATION_GPT; typedef PARTITION_INFORMATION_GPT *PPARTITION_INFORMATION_GPT; #endif /* MBR partition information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _PARTITION_INFORMATION_MBR { BYTE PartitionType; BOOLEAN BootIndicator; BOOLEAN RecognizedPartition; DWORD HiddenSectors; } PARTITION_INFORMATION_MBR; typedef PARTITION_INFORMATION_MBR *PPARTITION_INFORMATION_MBR; #endif /* Alternate names of structures defined above */ #if (_WIN32_WINNT >= 0x0500) typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; #endif /* IOCTL_DISK_SET_PARTITION_INFO_EX parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _SET_PARTITION_INFORMATION_EX { PARTITION_STYLE PartitionStyle; union { SET_PARTITION_INFORMATION_MBR Mbr; SET_PARTITION_INFORMATION_GPT Gpt; }; } SET_PARTITION_INFORMATION_EX; typedef SET_PARTITION_INFORMATION_EX *PSET_PARTITION_INFORMATION_EX; #endif /* IOCTL_DISK_CREATE_DISK parameters for GPT partitions */ #if (_WIN32_WINNT >= 0x0500) typedef struct _CREATE_DISK_GPT { GUID DiskId; DWORD MaxPartitionCount; } CREATE_DISK_GPT; typedef CREATE_DISK_GPT *PCREATE_DISK_GPT; #endif /* IOCTL_DISK_CREATE_DISK parameters for MBR partitions */ #if (_WIN32_WINNT >= 0x0500) typedef struct _CREATE_DISK_MBR { DWORD Signature; } CREATE_DISK_MBR; typedef CREATE_DISK_MBR *PCREATE_DISK_MBR; #endif /* IOCTL_DISK_CREATE_DISK parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _CREATE_DISK { PARTITION_STYLE PartitionStyle; union { CREATE_DISK_MBR Mbr; CREATE_DISK_GPT Gpt; }; } CREATE_DISK; typedef CREATE_DISK *PCREATE_DISK; #endif /* IOCTL_DISK_GET_LENGTH_INFO parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _GET_LENGTH_INFORMATION { LARGE_INTEGER Length; } GET_LENGTH_INFORMATION; typedef GET_LENGTH_INFORMATION *PGET_LENGTH_INFORMATION; #endif /* Partition information (extended version) */ #if (_WIN32_WINNT >= 0x0500) typedef struct _PARTITION_INFORMATION_EX { PARTITION_STYLE PartitionStyle; LARGE_INTEGER StartingOffset; LARGE_INTEGER PartitionLength; DWORD PartitionNumber; BOOLEAN RewritePartition; union { PARTITION_INFORMATION_MBR Mbr; PARTITION_INFORMATION_GPT Gpt; }; } PARTITION_INFORMATION_EX; typedef PARTITION_INFORMATION_EX *PPARTITION_INFORMATION_EX; #endif /* Drive layout information for GPT partitions */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { GUID DiskId; LARGE_INTEGER StartingUsableOffset; LARGE_INTEGER UsableLength; DWORD MaxPartitionCount; } DRIVE_LAYOUT_INFORMATION_GPT; typedef DRIVE_LAYOUT_INFORMATION_GPT *PDRIVE_LAYOUT_INFORMATION_GPT; #endif /* Drive layout information for MBR partitions */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { DWORD Signature; } DRIVE_LAYOUT_INFORMATION_MBR; typedef DRIVE_LAYOUT_INFORMATION_MBR *PDRIVE_LAYOUT_INFORMATION_MBR; #endif /* Drive layout information (extended version) */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DRIVE_LAYOUT_INFORMATION_EX { DWORD PartitionStyle; DWORD PartitionCount; union { DRIVE_LAYOUT_INFORMATION_MBR Mbr; DRIVE_LAYOUT_INFORMATION_GPT Gpt; }; PARTITION_INFORMATION_EX PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION_EX; typedef DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX; #endif /* Detection types */ #if (_WIN32_WINNT >= 0x0500) typedef enum _DETECTION_TYPE { DetectNone = 0, DetectInt13 = 1, DetectExtInt13 = 2 } DETECTION_TYPE; #endif /* Interrupt 13 disk information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_INT13_INFO { WORD DriveSelect; DWORD MaxCylinders; WORD SectorsPerTrack; WORD MaxHeads; WORD NumberDrives; } DISK_INT13_INFO; typedef DISK_INT13_INFO *PDISK_INT13_INFO; #endif /* Extended interrupt 13 disk information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_EX_INT13_INFO { WORD ExBufferSize; WORD ExFlags; DWORD ExCylinders; DWORD ExHeads; DWORD ExSectorsPerTrack; DWORD64 ExSectorsPerDrive; WORD ExSectorSize; WORD ExReserved; } DISK_EX_INT13_INFO; typedef DISK_EX_INT13_INFO *PDISK_EX_INT13_INFO; #endif /* Disk detection information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_DETECTION_INFO { DWORD SizeOfDetectInfo; DETECTION_TYPE DetectionType; union { struct { DISK_INT13_INFO Int13; DISK_EX_INT13_INFO ExInt13; }; }; } DISK_DETECTION_INFO; typedef DISK_DETECTION_INFO *PDISK_DETECTION_INFO; #endif /* Disk partition information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_PARTITION_INFO { DWORD SizeOfPartitionInfo; PARTITION_STYLE PartitionStyle; union { struct { DWORD Signature; DWORD CheckSum; } Mbr; struct { GUID DiskId; } Gpt; }; } DISK_PARTITION_INFO; typedef DISK_PARTITION_INFO *PDISK_PARTITION_INFO; #endif /* Disk geometry (extended version) */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_GEOMETRY_EX { DISK_GEOMETRY Geometry; LARGE_INTEGER DiskSize; BYTE Data[1]; } DISK_GEOMETRY_EX; typedef DISK_GEOMETRY_EX *PDISK_GEOMETRY_EX; #endif /* Disk controller number */ #if (_WIN32_WINNT >= 0x0400) typedef struct _DISK_CONTROLLER_NUMBER { DWORD ControllerNumber; DWORD DiskNumber; } DISK_CONTROLLER_NUMBER; typedef DISK_CONTROLLER_NUMBER *PDISK_CONTROLLER_NUMBER; #endif /* Disk cache retention priority */ #if (_WIN32_WINNT >= 0x0500) typedef enum { EqualPriority = 0, KeepPrefetchedData = 1, KeepReadData = 2 } DISK_CACHE_RETENTION_PRIORITY; #endif /* Disk write cache state */ #if (_WIN32_WINNT >= 0x0500) && (NTDDI_VERSION >= 0x05010000) && \ (NTDDI_VERSION < 0x05020000) typedef enum _DISK_WRITE_CACHE_STATE { DiskWriteCacheNormal = 0, DiskWriteCacheForceDisable = 1, DiskWriteCacheDisableNotSupported = 2 } DISK_WRITE_CACHE_STATE; typedef DISK_WRITE_CACHE_STATE *PDISK_WRITE_CACHE_STATE; #endif /* Disk cache information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_CACHE_INFORMATION { BOOLEAN ParametersSavable; BOOLEAN ReadCacheEnabled; BOOLEAN WriteCacheEnabled; DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; WORD DisablePrefetchTransferLength; BOOLEAN PrefetchScalar; union { struct { WORD Minimum; WORD Maximum; WORD MaximumBlocks; } ScalarPrefetch; struct { WORD Minimum; WORD Maximum; } BlockPrefetch; }; } DISK_CACHE_INFORMATION; typedef DISK_CACHE_INFORMATION *PDISK_CACHE_INFORMATION; #endif /* IOCTL_DISK_GROW_PARTITION parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DISK_GROW_PARTITION { DWORD PartitionNumber; LARGE_INTEGER BytesToGrow; } DISK_GROW_PARTITION; typedef DISK_GROW_PARTITION *PDISK_GROW_PARTITION; #endif /* Histogram bucket */ typedef struct _HISTOGRAM_BUCKET { DWORD Reads; DWORD Writes; } HISTOGRAM_BUCKET; typedef HISTOGRAM_BUCKET *PHISTOGRAM_BUCKET; /* Disk histogram */ typedef struct _DISK_HISTOGRAM { LARGE_INTEGER DiskSize; LARGE_INTEGER Start; LARGE_INTEGER End; LARGE_INTEGER Average; LARGE_INTEGER AverageRead; LARGE_INTEGER AverageWrite; DWORD Granularity; DWORD Size; DWORD ReadCount; DWORD WriteCount; PHISTOGRAM_BUCKET Histogram; } DISK_HISTOGRAM; typedef DISK_HISTOGRAM *PDISK_HISTOGRAM; /* Disk performance */ typedef struct _DISK_PERFORMANCE { LARGE_INTEGER BytesRead; LARGE_INTEGER BytesWritten; LARGE_INTEGER ReadTime; LARGE_INTEGER WriteTime; LARGE_INTEGER IdleTime; DWORD ReadCount; DWORD WriteCount; DWORD QueueDepth; DWORD SplitCount; LARGE_INTEGER QueryTime; DWORD StorageDeviceNumber; WCHAR StorageManagerName[8]; } DISK_PERFORMANCE; typedef DISK_PERFORMANCE *PDISK_PERFORMANCE; /* Disk record */ typedef struct _DISK_RECORD { LARGE_INTEGER ByteOffset; LARGE_INTEGER StartTime; LARGE_INTEGER EndTime; PVOID VirtualAddress; DWORD NumberOfBytes; BYTE DeviceNumber; BOOLEAN ReadRequest; } DISK_RECORD; typedef DISK_RECORD *PDISK_RECORD; /* Disk logging information */ typedef struct _DISK_LOGGING { BYTE Function; PVOID BufferAddress; DWORD BufferSize; } DISK_LOGGING; typedef DISK_LOGGING *PDISK_LOGGING; /* Bin types */ typedef enum _BIN_TYPES { RequestSize = 0, RequestLocation = 1 } BIN_TYPES; /* Bin range */ typedef struct _BIN_RANGE { LARGE_INTEGER StartValue; LARGE_INTEGER Length; } BIN_RANGE; typedef BIN_RANGE *PBIN_RANGE; /* Performance bin */ typedef struct _PERF_BIN { DWORD NumberOfBins; DWORD TypeOfBin; BIN_RANGE BinsRanges[1]; } PERF_BIN; typedef PERF_BIN *PPERF_BIN; /* Bin count */ typedef struct _BIN_COUNT { BIN_RANGE BinRange; DWORD BinCount; } BIN_COUNT; typedef BIN_COUNT *PBIN_COUNT; /* Bin results */ typedef struct _BIN_RESULTS { DWORD NumberOfBins; BIN_COUNT BinCounts[1]; } BIN_RESULTS; typedef BIN_RESULTS *PBIN_RESULTS; /* Driver version input parameters */ #if (_WIN32_WINNT >= 0x0400) #include typedef struct _GETVERSIONINPARAMS { BYTE bVersion; BYTE bRevision; BYTE bReserved; BYTE bIDEDeviceMap; DWORD fCapabilities; DWORD dwReserved[4]; } GETVERSIONINPARAMS; typedef GETVERSIONINPARAMS *PGETVERSIONINPARAMS; typedef GETVERSIONINPARAMS *LPGETVERSIONINPARAMS; #include #endif /* IDE registers */ #if (_WIN32_WINNT >= 0x0400) #include typedef struct _IDEREGS { BYTE bFeaturesReg; BYTE bSectorCountReg; BYTE bSectorNumberReg; BYTE bCylLowReg; BYTE bCylHighReg; BYTE bDriveHeadReg; BYTE bCommandReg; BYTE bReserved; } IDEREGS; typedef IDEREGS *PIDEREGS; typedef IDEREGS *LPIDEREGS; #include #endif /* Send command input parameters */ #if (_WIN32_WINNT >= 0x0400) #include typedef struct _SENDCMDINPARAMS { DWORD cBufferSize; IDEREGS irDriveRegs; BYTE bDriveNumber; BYTE bReserved[3]; DWORD dwReserved[4]; BYTE bBuffer[1]; } SENDCMDINPARAMS; typedef SENDCMDINPARAMS *PSENDCMDINPARAMS; typedef SENDCMDINPARAMS *LPSENDCMDINPARAMS; #include #endif /* Driver status */ #if (_WIN32_WINNT >= 0x0400) #include typedef struct _DRIVERSTATUS { BYTE bDriverError; BYTE bIDEError; BYTE bReserved[2]; DWORD dwReserved[2]; } DRIVERSTATUS; typedef DRIVERSTATUS *PDRIVERSTATUS; typedef DRIVERSTATUS *LPDRIVERSTATUS; #include #endif /* Send command output parameters */ #if (_WIN32_WINNT >= 0x0400) #include typedef struct _SENDCMDOUTPARAMS { DWORD cBufferSize; DRIVERSTATUS DriverStatus; BYTE bBuffer[1]; } SENDCMDOUTPARAMS; typedef SENDCMDOUTPARAMS *PSENDCMDOUTPARAMS; typedef SENDCMDOUTPARAMS *LPSENDCMDOUTPARAMS; #include #endif /* Functions implemented as macros */ #define __NewIsRecognizedPartition( x ) \ (((x) == PARTITION_FAT_12) || ((x) == PARTITION_FAT_16) || \ ((x) == PARTITION_HUGE) || ((x) == PARTITION_IFS) || ((x) == PARTITION_FAT32) || \ ((x) == PARTITION_FAT32_XINT13) || ((x) == PARTITION_XINT13)) #if (NTDDK_VERSION < 0x06000000) #define IsRecognizedPartition( x ) \ ((((x) & PARTITION_NTFT) && ((((x) & ~0x000000C0L) == PARTITION_HUGE) || \ (((x) & 0x000000C0L) == PARTITION_IFS) || \ (((x) & 0x000000C0L) == PARTITION_FAT32) || \ (((x) & 0x000000C0L) == PARTITION_FAT32_XINT13))) || \ __NewIsRecognizedPartition( x )) #else #define IsRecognizedPartition( x ) __NewIsRecognizedPartition( x ) #endif #define IsContainerPartition( x ) \ (((x) == PARTITION_EXTENDED) || ((x) == PARTITION_XINT13_EXTENDED)) #define IsFTPartition( x ) \ (((x) & PARTITION_NTFT) && ((((x) & ~0x000000C0L) == PARTITION_HUGE) || \ (((x) & ~0x000000C0L) == PARTITION_IFS) || \ (((x) & ~0x000000C0L) == PARTITION_FAT32) || \ (((x) & ~0x000000C0L) == PARTITION_FAT32_XINT13))) #if (_WIN32_WINNT >= 0x0500) #if (NTDDI_VERSION < 0x05020000) #define DiskGeometryGetPartition( x ) ((PDISK_PARTITION_INFO)((x) + 1)) #define DiskGeometryGetDetect( x ) \ ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeoemtryGetPartition( x ) + \ DiskGeometryGetPartition( x )->SizeOfPartitionInfo))) #else #define DiskGeometryGetPartition( x ) ((PDISK_PARTITION_INFO)((x)->Data)) #define DiskGeometryGetDetect( x ) \ ((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition( x ) + \ DiskGeometryGetPartition( x )->SizeOfPartitionInfo))) #endif #endif #endif /* _NTDDDISK_H_ */ /* Changer device I/O control codes */ #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER #define IOCTL_CHANGER_GET_PARAMETERS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_GET_STATUS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_GET_PRODUCT_DATA \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_SET_ACCESS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_CHANGER_GET_ELEMENT_STATUS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_SET_POSITION \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_EXCHANGE_MEDIUM \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_MOVE_MEDIUM \ CTL_CODE( IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \ CTL_CODE( IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_CHANGER_QUERY_VOLUME_TAGS \ CTL_CODE( IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) /* Maximum sizes and lengths */ #define MAX_VOLUME_ID_SIZE 36 #define MAX_VOLUME_TEMPLATE_SIZE 40 #define VENDOR_ID_LENGTH 8 #define PRODUCT_ID_LENGTH 16 #define REVISION_LENGTH 4 #define SERIAL_NUMBER_LENGTH 32 /* Changer features */ #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001L #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002L #define CHANGER_CLOSE_IEPORT 0x00000004L #define CHANGER_OPEN_IEPORT 0x00000008L #define CHANGER_STATUS_NON_VOLATILE 0x00000010L #define CHANGER_EXCHANGE_MEDIA 0x00000020L #define CHANGER_CLEANER_SLOT 0x00000040L #define CHANGER_LOCK_UNLOCK 0x00000080L #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100L #define CHANGER_MEDIUM_FLIP 0x00000200L #define CHANGER_POSITION_TO_ELEMENT 0x00000400L #define CHANGER_REPORT_IEPORT_STATE 0x00000800L #define CHANGER_STORAGE_DRIVE 0x00001000L #define CHANGER_STORAGE_IEPORT 0x00002000L #define CHANGER_STORAGE_SLOT 0x00004000L #define CHANGER_STORAGE_TRANSPORT 0x00008000L #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000L #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000L #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000L #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000L #define CHANGER_VOLUME_IDENTIFICATION 0x00100000L #define CHANGER_VOLUME_SEARCH 0x00200000L #define CHANGER_VOLUME_ASSERT 0x00400000L #define CHANGER_VOLUME_REPLACE 0x00800000L #define CHANGER_VOLUME_UNDEFINE 0x01000000L #define CHANGER_SERIAL_NUMBER_VALID 0x04000000L #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000L #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000L #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000L #define CHANGER_RESERVED_BIT 0x80000000L #define CHANGER_PREMOUNT_ALIGN_TO_SLOT 0x80000001L #define CHANGER_PREMOUNT_ALIGN_TO_DRIVE 0x80000002L #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004L #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008L #define CHANGER_SLOTS_USE_TRAYS 0x80000010L #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020L #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040L #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080L #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100L #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200L #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400L /* Changer position capabilities */ #define CHANGER_TO_TRANSPORT 0x01 #define CHANGER_TO_SLOT 0x02 #define CHANGER_TO_IEPORT 0x04 #define CHANGER_TO_DRIVE 0x08 /* Changer lock/unlock capabilities */ #define LOCK_UNLOCK_IEPORT 0x01 #define LOCK_UNLOCK_DOOR 0x02 #define LOCK_UNLOCK_KEYPAD 0x04 /* IOCTL_CHANGER_SET_ACCESS operations */ #define LOCK_ELEMENT 0L #define UNLOCK_ELEMENT 1L #define EXTEND_IEPORT 2L #define RETRACT_IEPORT 3L /* Changer element status flags */ #define ELEMENT_STATUS_FULL 0x00000001L #define ELEMENT_STATUS_IMPEXP 0x00000002L #define ELEMENT_STATUS_EXCEPT 0x00000004L #define ELEMENT_STATUS_ACCESS 0x00000008L #define ELEMENT_STATUS_EXENAB 0x00000010L #define ELEMENT_STATUS_INENAB 0x00000020L #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040L #define ELEMENT_STATUS_LUN_VALID 0x00001000L #define ELEMENT_STATUS_ID_VALID 0x00002000L #define ELEMENT_STATUS_NOT_BUS 0x00008000L #define ELEMENT_STATUS_INVERT 0x00400000L #define ELEMENT_STATUS_SVALID 0x00800000L #define ELEMENT_STATUS_PVOLTAG 0x10000000L #define ELEMENT_STATUS_AVOLTAG 0x20000000L /* Changer element status exception codes */ #define ERROR_LABEL_UNREADABLE 0x00000001L #define ERROR_LABEL_QUESTIONABLE 0x00000002L #define ERROR_SLOT_NOT_PRESENT 0x00000004L #define ERROR_DRIVE_NOT_INSTALLED 0x00000008L #define ERROR_TRAY_MALFUNCTION 0x00000010L #define ERROR_INIT_STATUS_NEEDED 0x00000011L #define ERROR_UNHANDLED_ERROR 0xFFFFFFFFL /* IOCTL_CHANGER_QUERY_VOLUME_TAGS action codes */ #define SEARCH_ALL 0x00000000L #define SEARCH_PRIMARY 0x00000001L #define SEARCH_ALTERNATE 0x00000002L #define SEARCH_ALL_NO_SEQ 0x00000004L #define SEARCH_PRI_NO_SEQ 0x00000005L #define SEARCH_ALT_NO_SEQ 0x00000006L #define ASSERT_PRIMARY 0x00000008L #define ASSERT_ALTERNATE 0x00000009L #define REPLACE_PRIMARY 0x0000000AL #define REPLACE_ALTERNATE 0x0000000BL #define UNDEFINE_PRIMARY 0x0000000CL #define UNDEFINE_ALTERNATE 0x0000000DL /* Serial port device I/O control codes */ #define IOCTL_SERIAL_LSRMST_INSERT \ CTL_CODE( FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS ) /* Serial port enumerator device I/O control codes */ #define IOCTL_SERENUM_EXPOSE_HARDWARE \ CTL_CODE( FILE_DEVICE_SERENUM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SERENUM_REMOVE_HARDWARE \ CTL_CODE( FILE_DEVICE_SERENUM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SERENUM_PORT_DESC \ CTL_CODE( FILE_DEVICE_SERENUM, 130, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SERENUM_GET_PORT_NAME \ CTL_CODE( FILE_DEVICE_SERENUM, 131, METHOD_BUFFERED, FILE_ANY_ACCESS ) /* Serial data special values */ #define SERIAL_LSRMST_ESCAPE 0x00 #define SERIAL_LSRMST_LSR_DATA 0x01 #define SERIAL_LSRMST_LSR_NODATA 0x02 #define SERIAL_LSRMST_MST 0x03 /* Serial FIFO control register values */ #define SERIAL_IOC_FCR_FIFO_ENABLE 0x00000001L #define SERIAL_IOC_FCR_RCVR_RESET 0x00000002L #define SERIAL_IOC_FCR_XMIT_RESET 0x00000004L #define SERIAL_IOC_FCR_DMA_MODE 0x00000008L #define SERIAL_IOC_FCR_RES1 0x00000010L #define SERIAL_IOC_FCR_RES2 0x00000020L #define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB 0x00000040L #define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB 0x00000080L /* Modem control register values */ #define SERIAL_IOC_MCR_DTR 0x00000001L #define SERIAL_IOC_MCR_RTS 0x00000002L #define SERIAL_IOC_MCR_OUT1 0x00000004L #define SERIAL_IOC_MCR_OUT2 0x00000008L #define SERIAL_IOC_MCR_LOOP 0x00000010L /* File system control codes */ #define FSCTL_REQUEST_OPLOCK_LEVEL_1 \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_REQUEST_OPLOCK_LEVEL_2 \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_REQUEST_BATCH_OPLOCK \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_OPBATCH_ACK_CLOSE_PENDING \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_OPLOCK_BREAK_NOTIFY \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_LOCK_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_UNLOCK_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_DISMOUNT_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_IS_VOLUME_MOUNTED \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_IS_PATHNAME_VALID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_MARK_VOLUME_DIRTY \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_RETRIEVAL_POINTERS \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_GET_COMPRESSION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SET_COMPRESSION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | \ FILE_WRITE_DATA ) #define FSCTL_SET_BOOTLOADER_ACCESSED \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_OPLOCK_BREAK_ACK_NO_2 \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_INVALIDATE_VOLUMES \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_FAT_BPB \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_REQUEST_FILTER_OPLOCK \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_FILESYSTEM_GET_STATISTICS \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS ) #if (_WIN32_WINNT >= 0x0400) #define FSCTL_GET_NTFS_VOLUME_DATA \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_GET_NTFS_FILE_RECORD \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_GET_VOLUME_BITMAP \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_GET_RETRIEVAL_POINTERS \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_MOVE_FILE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_IS_VOLUME_DIRTY \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_ALLOW_EXTENDED_DASD_IO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0500) #define FSCTL_FIND_FILES_BY_SID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_SET_OBJECT_ID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_GET_OBJECT_ID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_DELETE_OBJECT_ID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_SET_REPARSE_POINT \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_GET_REPARSE_POINT \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_DELETE_REPARSE_POINT \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_ENUM_USN_DATA \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_SECURITY_ID_CHECK \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA ) #define FSCTL_READ_USN_JOURNAL \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_SET_OBJECT_ID_EXTENDED \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_CREATE_OR_GET_OBJECT_ID \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SET_SPARSE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_SET_ZERO_DATA \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_QUERY_ALLOCATED_RANGES \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA ) #define FSCTL_ENABLE_UPGRADE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_SET_ENCRYPTION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_ENCRYPTION_FSCTL_IO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_WRITE_RAW_ENCRYPTED \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS ) #define FSCTL_READ_RAW_ENCRYPTED \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS ) #define FSCTL_CREATE_USN_JOURNAL \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_READ_FILE_USN_DATA \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_WRITE_USN_CLOSE_RECORD \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_EXTEND_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_USN_JOURNAL \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_DELETE_USN_JOURNAL \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_MARK_HANDLE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SIS_COPYFILE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SIS_LINK_FILES \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | \ FILE_WRITE_DATA ) #define FSCTL_RECALL_FILE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_READ_FROM_PLEX \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA ) #define FSCTL_FILE_PREFETCH \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0600) #define FSCTL_MAKE_MEDIA_COMPATIBLE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_SET_DEFECT_MANAGEMENT \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_QUERY_SPARING_INFO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_ON_DISK_VOLUME_INFO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SET_VOLUME_COMPRESSION_STATE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_TXFS_MODIFY_RM \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_QUERY_RM_INFORMATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_TXFS_ROLLFORWARD_REDO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_ROLLFORWARD_UNDO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_START_RM \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_SHUTDOWN_RM \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_READ_BACKUP_INFORMATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_CREATE_SECONDARY_RM \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_GET_METADATA_INFO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_TXFS_GET_TRANSACTED_VERSION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_TXFS_SAVEPOINT_INFORMATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_CREATE_MINIVERSION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA ) #define FSCTL_TXFS_TRANSACTION_ACTIVE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_SET_ZERO_ON_DEALLOCATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_SET_REPAIR \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_GET_REPAIR \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_WAIT_FOR_REPAIR \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_INITIATE_REPAIR \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_CSC_INTERNAL \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS ) #define FSCTL_SHRINK_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define FSCTL_SET_SHORT_NAME_BEHAVIOR \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_TXFS_LIST_TRANSACTIONS \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA ) #define FSCTL_QUERY_PAGEFILE_ENCRYPTION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0601) #define FSCTL_QUERY_DEPENDENT_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SD_GLOBAL_CHANGE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0600) #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #if (_WIN32_WINNT >= 0x0601) #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_FILE_TYPE_NOTIFICATION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_GET_BOOT_AREA_INFO \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_GET_RETRIEVAL_POINTER_BASE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_SET_PERSISTENT_VOLUME_STATE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_REQUEST_OPLOCK \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_CSV_TUNNEL_REQUEST \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_IS_CSV_FILE \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_CSV_GET_VOLUME_PATH_NAME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FSCTL_IS_FILE_ON_CSV_VOLUME \ CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED /* AVIO device I/O control codes */ #define IOCTL_AVIO_ALLOCATE_STREAM \ CTL_CODE( FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define IOCTL_AVIO_FREE_STREAM \ CTL_CODE( FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) #define IOCTL_AVIO_MODIFY_STREAM \ CTL_CODE( FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) /* CSV device number special values */ #if (_WIN32_WINNT >= 0x0601) #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFFL #endif /* USN records */ #if (_WIN32_WINNT >= 0x0500) #define USN_REASON_DATA_OVERWRITE 0x00000001L #define USN_REASON_DATA_EXTEND 0x00000002L #define USN_REASON_DATA_TRUNCATION 0x00000004L #define USN_REASON_NAMED_DATA_OVERWRITE 0x00000010L #define USN_REASON_NAMED_DATA_EXTEND 0x00000020L #define USN_REASON_NAMED_DATA_TRUNCATION 0x00000040L #define USN_REASON_FILE_CREATE 0x00000100L #define USN_REASON_FILE_DELETE 0x00000200L #define USN_REASON_EA_CHANGE 0x00000400L #define USN_REASON_SECURITY_CHANGE 0x00000800L #define USN_REASON_RENAME_OLD_NAME 0x00001000L #define USN_REASON_RENAME_NEW_NAME 0x00002000L #define USN_REASON_INDEXABLE_CHANGE 0x00004000L #define USN_REASON_BASIC_INFO_CHANGE 0x00008000L #define USN_REASON_HARD_LINK_CHANGE 0x00010000L #define USN_REASON_COMPRESSION_CHANGE 0x00020000L #define USN_REASON_ENCRYPTION_CHANGE 0x00040000L #define USN_REASON_OBJECT_ID_CHANGE 0x00080000L #define USN_REASON_REPARSE_POINT_CHANGE 0x00100000L #define USN_REASON_STREAM_CHANGE 0x00200000L #define USN_REASON_TRANSACTED_CHANGE 0x00400000L #define USN_REASON_CLOSE 0x80000000L #endif /* FSCTL_DELETE_USN_JOURNAL flags */ #if (_WIN32_WINNT >= 0x0500) #define USN_DELETE_FLAG_DELETE 0x00000001L #define USN_DELETE_FLAG_NOTIFY 0x00000002L #define USN_DELETE_VALID_FLAGS 0x00000003L #endif /* FSCTL_MARK_HANDLE source information flags */ #if (_WIN32_WINNT >= 0x0500) #define USN_SOURCE_DATA_MANAGEMENT 0x00000001L #define USN_SOURCE_AUXILIARY_DATA 0x00000002L #define USN_SOURCE_REPLICATION_MANAGEMENT 0x00000004L #endif /* FSCTL_MARK_HANDLE handle information flags */ #if (_WIN32_WINNT >= 0x0500) #define MARK_HANDLE_PROTECT_CLUSTERS 0x00000001L #define MARK_HANDLE_TXF_SYSTEM_LOG 0x00000004L #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG 0x00000008L #endif #if (_WIN32_WINNT >= 0x0601) #define MARK_HANDLE_REALTIME 0x00000020L #define MARK_HANDLE_NOT_REALTIME 0x00000040L #endif /* 8.3 name flags */ #if (_WIN32_WINNT >= 0x0601) #define NO_8DOT3_NAME_PRESENT 0x00000001L #define REMOVED_8DOT3_NAME 0x00000002L #endif /* Persistent volume flags */ #if (_WIN32_WINNT >= 0x0601) #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001L #endif /* FSCTL_IS_VOLUME_DIRTY returned flags */ #if (_WIN32_WINNT >= 0x0500) #define VOLUME_IS_DIRTY 0x00000001L #define VOLUME_UPGRADE_SCHEDULED 0x00000002L #define VOLUME_SESSION_OPEN 0x00000004L #endif /* File prefetch types */ #if (_WIN32_WINNT >= 0x0500) #define FILE_PREFETCH_TYPE_FOR_CREATE 0x00000001L #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x00000002L #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x00000003L #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x00000004L #define FILE_PREFETCH_TYPE_MAX 0x00000004L #endif /* File system types */ #define FILESYSTEM_STATISTICS_TYPE_NTFS 1 #define FILESYSTEM_STATISTICS_TYPE_FAT 2 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3 /* Encryption operations */ #if (_WIN32_WINNT >= 0x0500) #define FILE_SET_ENCRYPTION 0x00000001L #define FILE_CLEAR_ENCRYPTION 0x00000002L #define STREAM_SET_ENCRYPTION 0x00000003L #define STREAM_CLEAR_ENCRYPTION 0x00000004L #define MAXIMUM_ENCRYPTION_VALUE 0x00000004L #endif /* Compression formats */ #if (_WIN32_WINNT >= 0x0500) #define COMPRESSION_FORMAT_SPARSE 0x4000 #endif /* FSCTL_SIS_COPYFILE flags */ #if (_WIN32_WINNT >= 0x0500) #define COPYFILE_SIS_LINK 0x00000001L #define COPYFILE_SIS_REPLACE 0x00000002L #define COPYFILE_SIS_FLAGS 0x00000003L #endif /* FSCTL_SET_REPAIR flags */ #if (_WIN32_WINNT >= 0x0600) #define SET_REPAIR_ENABLED 0x00000001L #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002L #define SET_REPAIR_DELETE_CROSSLINK 0x00000004L #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008L #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010L #define SET_REPAIR_VALID_MASK 0x0000000FL #endif /* TXFS flags */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001L #define TXFS_RM_FLAG_RENAME_RM 0x00000002L #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004L #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008L #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010L #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020L #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040L #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080L #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100L #define TXFS_RM_FLAG_GROW_LOG 0x00000400L #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800L #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000L #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000L #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000L #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000L #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000L #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000L #define TXFS_MODIFY_RM_VALID_FLAGS \ (TXFS_RM_FLAG_LOGGING_MODE | TXFS_RM_FLAG_RENAME_RM | \ TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | TXFS_RM_FLAG_GROW_LOG | \ TXFS_RM_FLAG_SHRINK_LOG | TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \ TXFS_RM_FLAG_PRESERVE_CHANGES | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | TMFX_RM_FLAG_PREFER_CONSISTENCY | \ TXFS_RM_FLAG_PREFER_AVAILABILITY) #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \ (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | TXFM_RM_FLAG_PREFER_CONSISTENCY | \ TXFS_RM_FLAG_PREFER_AVAILABILITY) #endif /* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES flags */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001L #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002L #endif /* TXFS logging modes */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_LOGGING_MODE_SIMPLE 0x0001 #define TXFS_LOGGING_MODE_FULL 0x0002 #endif /* TXFS transaction states */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_TRANSACTION_STATE_NONE 0x00 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01 #define TXFS_TRANSACTION_STATE_PREPARED 0x02 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03 #endif /* TXFS RM states */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_RM_STATE_NOT_STARTED 0 #define TXFS_RM_STATE_STARTING 1 #define TXFS_RM_STATE_ACTIVE 2 #define TXFS_RM_STATE_SHUTTING_DOWN 3 #endif /* FSCTL_TXFS_ROLLFORWARD_REDO flags */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x00000001L #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x00000002L #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \ (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \ TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) #endif /* FSCTL_TXFS_START_RM flags */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001L #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002L #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004L #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008L #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010L #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020L #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040L #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080L #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200L #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400L #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800L #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000L #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000L #define TXFS_START_RM_VALID_FLAG \ (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \ TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \ TXFS_START_RM_FLAG_LOGGING_MODE | TXFS_START_RM_FLAG_PRESERVE_CHANGES | \ TXFS_START_RM_FLAG_PREFER_CONSISTENCY | TXFS_START_RM_FLAG_PREFER_AVAILABILITY) #endif /* FSCTL_TXFS_GET_TRANSACTED_VERSION special values */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFEL #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFFL #endif /* FSCTL_TXFS_SAVEPOINT_INFORMATION flags */ #if (_WIN32_WINNT >= 0x0600) #define TXFS_SAVEPOINT_SET 0x00000001L #define TXFS_SAVEPOINT_ROLLBACK 0x00000002L #define TXFS_SAVEPOINT_CLEAR 0x00000004L #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000008L #endif /* Oplock levels */ #if (_WIN32_WINNT >= 0x0601) #define OPLOCK_LEVEL_CACHE_READ 0x00000001L #define OPLOCK_LEVEL_CACHE_HANDLE 0x00000002L #define OPLOCK_LEVEL_CACHE_WRITE 0x00000004L #endif /* FSCTL_REQUEST_OPLOCK input flags */ #if (_WIN32_WINNT >= 0x0601) #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST 0x00000001L #define REQUEST_OPLOCK_INPUT_FLAG_ACK 0x00000002L #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE 0x00000004L #endif /* FSCTL_REQUEST_OPLOCK output flags */ #if (_WIN32_WINNT >= 0x0601) #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED 0x00000001L #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED 0x00000002L #endif /* FSCTL_REQUEST_OPLOCK parameters revision number */ #if (_WIN32_WINNT >= 0x0601) #define REQUEST_OPLOCK_CURRENT_VERSION 1 #endif /* FSCTL_SD_GLOBAL_CHANGE types */ #if (_WIN32_WINNT >= 0x0601) #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1L #endif /* Extended encrypted data information flags */ #if (_WIN32_WINNT >= 0x0601) #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1L #endif /* FSCTL_LOOKUP_STREAM_FROM_CLUSTER entry flags */ #if (_WIN32_WINNT >= 0x0601) #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xFF000000L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000L #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000L #endif /* FSCTL_FILE_TYPE_NOTIFICATION flags */ #if (_WIN32_WINNT >= 0x0601) #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001L #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002L #endif /* Volume device I/O control codes */ #define IOCTL_VOLUME_BASE 0x00000056L #if (NTDDI_VERSION >= 0x05000000) #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \ CTL_CODE( IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_VOLUME_ONLINE \ CTL_CODE( IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_VOLUME_OFFLINE \ CTL_CODE( IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #endif #if (NTDDI_VERSION >= 0x05010000) #define IOCTL_VOLUME_IS_CLUSTERED \ CTL_CODE( IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES \ CTL_CODE( IOCTL_VOLUME_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS ) #endif /* Symbolic link flags */ #define SYMLINK_FLAG_RELATIVE 1L /* Element types */ typedef enum _ELEMENT_TYPE { AllElements = 0, ChangerTransport = 1, ChangerSlot = 2, ChangerIEPort = 3, ChangerDrive = 4, ChangerDoor = 5, ChangerKeypad = 6, ChangerMaxElement = 7 } ELEMENT_TYPE; typedef ELEMENT_TYPE *PELEMENT_TYPE; /* Changer element */ typedef struct _CHANGER_ELEMENT { ELEMENT_TYPE ElementType; DWORD ElementAddress; } CHANGER_ELEMENT; typedef CHANGER_ELEMENT *PCHANGER_ELEMENT; /* Changer element list */ typedef struct _CHANGER_ELEMENT_LIST { CHANGER_ELEMENT Element; DWORD NumberOfElements; } CHANGER_ELEMENT_LIST; typedef CHANGER_ELEMENT_LIST *PCHANGER_ELEMENT_LIST; /* IOCTL_CHANGER_GET_PARAMETERS returned data */ typedef struct _GET_CHANGER_PARAMETERS { DWORD Size; WORD NumberTransportElements; WORD NumberStorageElements; WORD NumberCleanerSlots; WORD NumberIEElements; WORD NumberDataTransferElements; WORD NumberOfDoors; WORD FirstSlotNumber; WORD FirstDriveNumber; WORD FirstTransportNumber; WORD FirstIEPortNumber; WORD FirstCleanerSlotAddress; WORD MagazineSize; DWORD DriveCleanTimeout; DWORD Features0; DWORD Features1; BYTE MoveFromTransport; BYTE MoveFromSlot; BYTE MoveFromIePort; BYTE MoveFromDrive; BYTE ExchangeFromTransport; BYTE ExchangeFromSlot; BYTE ExchangeFromIePort; BYTE ExchangeFromDrive; BYTE LockUnlockCapabilities; BYTE PositionCapabilities; BYTE Reserved1[2]; DWORD Reserved2[2]; } GET_CHANGER_PARAMETERS; typedef GET_CHANGER_PARAMETERS *PGET_CHANGER_PARAMETERS; /* Changer product data */ typedef struct _CHANGER_PRODUCT_DATA { BYTE VendorId[VENDOR_ID_LENGTH]; BYTE ProductId[PRODUCT_ID_LENGTH]; BYTE Revision[REVISION_LENGTH]; BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; BYTE DeviceType; } CHANGER_PRODUCT_DATA; typedef CHANGER_PRODUCT_DATA *PCHANGER_PRODUCT_DATA; /* IOCTL_CHANGER_SET_ACCESS parameters */ typedef struct _CHANGER_SET_ACCESS { CHANGER_ELEMENT Element; DWORD Control; } CHANGER_SET_ACCESS; typedef CHANGER_SET_ACCESS *PCHANGER_SET_ACCESS; /* IOCTL_CHANGER_GET_ELEMENT_STATUS parameters */ typedef struct _CHANGER_READ_ELEMENT_STATUS { CHANGER_ELEMENT_LIST ElementList; BOOLEAN VolumeTagInfo; } CHANGER_READ_ELEMENT_STATUS; typedef CHANGER_READ_ELEMENT_STATUS *PCHANGER_READ_ELEMENT_STATUS; /* Changer element status */ typedef struct _CHANGER_ELEMENT_STATUS { CHANGER_ELEMENT Element; CHANGER_ELEMENT SrcElementAddress; DWORD Flags; DWORD ExceptionCode; BYTE TargetId; BYTE Lun; WORD Reserved; BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; } CHANGER_ELEMENT_STATUS; typedef CHANGER_ELEMENT_STATUS *PCHANGER_ELEMENT_STATUS; /* Changer element status (extended version) */ typedef struct _CHANGER_ELEMENT_STATUS_EX { CHANGER_ELEMENT Element; CHANGER_ELEMENT SrcElementAddress; DWORD Flags; DWORD ExceptionCode; BYTE TargetId; BYTE Lun; WORD Reserved; BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; BYTE VendorIdentification[VENDOR_ID_LENGTH]; BYTE ProductIdentification[PRODUCT_ID_LENGTH]; BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; } CHANGER_ELEMENT_STATUS_EX; typedef CHANGER_ELEMENT_STATUS_EX *PCHANGER_ELEMENT_STATUS_EX; /* IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS parameters */ typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { CHANGER_ELEMENT_LIST ElementList; BOOLEAN BarCodeScan; } CHANGER_INITIALIZE_ELEMENT_STATUS; typedef CHANGER_INITIALIZE_ELEMENT_STATUS *PCHANGER_INITIALIZE_ELEMENT_STATUS; /* IOCTL_CHANGER_SET_POSITION parameters */ typedef struct _CHANGER_SET_POSITION { CHANGER_ELEMENT Transport; CHANGER_ELEMENT Destination; BOOLEAN Flip; } CHANGER_SET_POSITION; typedef CHANGER_SET_POSITION *PCHANGER_SET_POSITION; /* IOCTL_CHANGER_EXCHANGE_MEDIUM parameters */ typedef struct _CHANGER_EXCHANGE_MEDIUM { CHANGER_ELEMENT Transport; CHANGER_ELEMENT Source; CHANGER_ELEMENT Destination1; CHANGER_ELEMENT Destination2; BOOLEAN Flip1; BOOLEAN Flip2; } CHANGER_EXCHANGE_MEDIUM; typedef CHANGER_EXCHANGE_MEDIUM *PCHANGER_EXCHANGE_MEDIUM; /* IOCTL_CHANGER_MOVE_MEDIUM parameters */ typedef struct _CHANGER_MOVE_MEDIUM { CHANGER_ELEMENT Transport; CHANGER_ELEMENT Source; CHANGER_ELEMENT Destination; BOOLEAN Flip; } CHANGER_MOVE_MEDIUM; typedef CHANGER_MOVE_MEDIUM *PCHANGER_MOVE_MEDIUM; /* IOCTL_CHANGER_QUERY_VOLUME_TAGS parameters */ typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { CHANGER_ELEMENT StartingElement; DWORD ActionCode; BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; } CHANGER_SEND_VOLUME_TAG_INFORMATION; typedef CHANGER_SEND_VOLUME_TAG_INFORMATION *PCHANGER_SEND_VOLUME_TAG_INFORMATION; /* IOCTL_CHANGER_QUERY_VOLUME_TAG returned data */ typedef struct _READ_ELEMENT_ADDRESS_INFO { DWORD NumberOfElements; CHANGER_ELEMENT_STATUS ElementStatus[1]; } READ_ELEMENT_ADDRESS_INFO; typedef READ_ELEMENT_ADDRESS_INFO *PREAD_ELEMENT_ADDRESS_INFO; /* Changer device problem types */ typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { DeviceProblemNone = 0, DeviceProblemHardware = 1, DeviceProblemCHMError = 2, DeviceProblemDoorOpen = 3, DeviceProblemCalibrationError = 4, DeviceProblemTargetFailure = 5, DeviceProblemCHMMoveError = 6, DeviceProblemCHMZeroError = 7, DeviceProblemCartridgeInsertError = 8, DeviceProblemPositionError = 9, DeviceProblemSensorError = 10, DeviceProblemCartridgeEjectError = 11, DeviceProblemGripperError = 12, DeviceProblemDriveError = 13 } CHANGER_DEVICE_PROBLEM_TYPE; typedef CHANGER_DEVICE_PROBLEM_TYPE *PCHANGER_DEVICE_PROBLEM_TYPE; /* FSCTL_IS_CSV_FILE parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _CSV_NAMESPACE_INFO { DWORD Version; DWORD DeviceNumber; LARGE_INTEGER StartingOffset; DWORD SectorSize; } CSV_NAMESPACE_INFO; typedef CSV_NAMESPACE_INFO *PCSV_NAMESPACE_INFO; #endif /* Path name buffer */ typedef struct _PATHNAME_BUFFER { DWORD PathNameLength; WCHAR Name[1]; } PATHNAME_BUFFER; typedef PATHNAME_BUFFER *PPATHNAME_BUFFER; /* IOCTL_QUERY_FAT_BPB returned data */ typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { BYTE First0x24BytesOfBootSector[0x24]; } FSCTL_QUERY_FAT_BPB_BUFFER; typedef FSCTL_QUERY_FAT_BPB_BUFFER *PFSCTL_QUERY_FAT_BPB_BUFFER; /* NTFS volume data buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER VolumeSerialNumber; LARGE_INTEGER NumberSectors; LARGE_INTEGER TotalClusters; LARGE_INTEGER FreeClusters; LARGE_INTEGER TotalReserved; DWORD BytesPerSector; DWORD BytesPerCluster; DWORD BytesPerFileRecordSegment; DWORD ClustersPerFileRecordSegment; LARGE_INTEGER MftValidDataLength; LARGE_INTEGER MftStartLcn; LARGE_INTEGER Mft2StartLcn; LARGE_INTEGER MftZoneStart; LARGE_INTEGER MftZoneEnd; } NTFS_VOLUME_DATA_BUFFER; typedef NTFS_VOLUME_DATA_BUFFER *PNTFS_VOLUME_DATA_BUFFER; #endif /* NTFS extended volume data */ #if (_WIN32_WINNT >= 0x0400) typedef struct { DWORD ByteCount; WORD MajorVersion; WORD MinorVersion; } NTFS_EXTENDED_VOLUME_DATA; typedef NTFS_EXTENDED_VOLUME_DATA *PNTFS_EXTENDED_VOLUME_DATA; #endif /* Starting LCN input buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER StartingLcn; } STARTING_LCN_INPUT_BUFFER; typedef STARTING_LCN_INPUT_BUFFER *PSTARTING_LCN_INPUT_BUFFER; #endif /* Volume bitmap buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER StartingLcn; LARGE_INTEGER BitmapSize; BYTE Buffer[1]; } VOLUME_BITMAP_BUFFER; typedef VOLUME_BITMAP_BUFFER *PVOLUME_BITMAP_BUFFER; #endif /* Starting VCN input buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER StartingVcn; } STARTING_VCN_INPUT_BUFFER; typedef STARTING_VCN_INPUT_BUFFER *PSTARTING_VCN_INPUT_BUFFER; #endif /* Retrieval pointers buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct RETRIEVAL_POINTERS_BUFFER { DWORD ExtentCount; LARGE_INTEGER StartingVcn; struct { LARGE_INTEGER NextVcn; LARGE_INTEGER Lcn; } Extents[1]; } RETRIEVAL_POINTERS_BUFFER; typedef RETRIEVAL_POINTERS_BUFFER *PRETRIEVAL_POINTERS_BUFFER; #endif /* NTFS file record input buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER FileReferenceNumber; } NTFS_FILE_RECORD_INPUT_BUFFER; typedef NTFS_FILE_RECORD_INPUT_BUFFER *PNTFS_FILE_RECORD_INPUT_BUFFER; #endif /* NTFS file record output buffer */ #if (_WIN32_WINNT >= 0x0400) typedef struct { LARGE_INTEGER FileReferenceNumber; DWORD FileRecordLength; BYTE FileRecordBuffer[1]; } NTFS_FILE_RECORD_OUTPUT_BUFFER; typedef NTFS_FILE_RECORD_OUTPUT_BUFFER *PNTFS_FILE_RECORD_OUTPUT_BUFFER; #endif /* FSCTL_MOVE_FILE parameters */ #if (_WIN32_WINNT >= 0x0400) typedef struct { HANDLE FileHandle; LARGE_INTEGER StartingVcn; LARGE_INTEGER StartingLcn; DWORD ClusterCount; } MOVE_FILE_DATA; typedef MOVE_FILE_DATA *PMOVE_FILE_DATA; #endif /* FSCTL_MOVE_FILE record data */ #if (_WIN32_WINNT >= 0x0400) typedef struct { HANDLE FileHandle; LARGE_INTEGER SourceFileRecord; LARGE_INTEGER TargetFileRecord; } MOVE_FILE_RECORD_DATA; typedef MOVE_FILE_RECORD_DATA *PMOVE_FILE_RECORD_DATA; #endif /* FSCTL_FIND_FILES_BY_SID parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORD Restart; SID Sid; } FIND_BY_SID_DATA; typedef FIND_BY_SID_DATA *PFIND_BY_SID_DATA; #endif /* FSCTL_FIND_FILES_BY_SID returned data */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORD NextEntryOffset; DWORD FileIndex; DWORD FileNameLength; WCHAR FileName[1]; } FIND_BY_SID_OUTPUT; typedef FIND_BY_SID_OUTPUT *PFIND_BY_SID_OUTPUT; #endif /* FSCTL_ENUM_USN_DATA parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORDLONG StartFileReferenceNumber; USN LowUsn; USN HighUsn; } MFT_ENUM_DATA; typedef MFT_ENUM_DATA *PMFT_ENUM_DATA; #endif /* FSCTL_CREATE_USN_JOURNAL parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORDLONG MaximumSize; DWORDLONG AllocationDelta; } CREATE_USN_JOURNAL_DATA; typedef CREATE_USN_JOURNAL_DATA *PCREATE_USN_JOURNAL_DATA; #endif /* FSCTL_READ_USN_JOURNAL parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { USN StartUsn; DWORD ReasonMask; DWORD ReturnOnlyOnClose; DWORDLONG Timeout; DWORDLONG BytesToWaitFor; DWORDLONG UsnJournalID; } READ_USN_JOURNAL_DATA; typedef READ_USN_JOURNAL_DATA *PREAD_USN_JOURNAL_DATA; #endif /* USN record */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORD RecordLength; WORD MajorVersion; WORD MinorVersion; DWORDLONG FileReferenceNumber; DWORDLONG ParentFileReferenceNumber; USN Usn; LARGE_INTEGER TimeStamp; DWORD Reason; DWORD SourceInfo; DWORD SecurityId; DWORD FileAttributes; WORD FileNameLength; WORD FileNameOffset; WCHAR FileName[1]; } USN_RECORD; typedef USN_RECORD *PUSN_RECORD; #endif /* USN journal data */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORDLONG UsnJournalID; USN FirstUsn; USN NextUsn; USN LowestValidUsn; USN MaxUsn; DWORDLONG MaximumSize; DWORDLONG AllocationDelta; } USN_JOURNAL_DATA; typedef USN_JOURNAL_DATA *PUSN_JOURNAL_DATA; #endif /* FSCTL_DELETE_USN_JOURNAL parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORDLONG UsnJournalID; DWORD DeleteFlags; } DELETE_USN_JOURNAL_DATA; typedef DELETE_USN_JOURNAL_DATA *PDELETE_USN_JOURNAL_DATA; #endif /* FSCTL_MARK_HANDLE parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct { DWORD UsnSourceInfo; HANDLE VolumeHandle; DWORD HandleInfo; } MARK_HANDLE_INFO; typedef MARK_HANDLE_INFO *PMARK_HANDLE_INFO; #endif /* Bulk security test data */ #if (_WIN32_WINNT >= 0x0500) typedef struct { ACCESS_MASK DesiredAccess; DWORD SecurityIds[1]; } BULK_SECURITY_TEST_DATA; typedef BULK_SECURITY_TEST_DATA *PBULK_SECURITY_TEST_DATA; #endif /* FSCTL_FILE_PREFETCH parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_PREFETCH { DWORD Type; DWORD Count; DWORDLONG Prefetch[1]; } FILE_PREFETCH; typedef FILE_PREFETCH *PFILE_PREFETCH; #endif /* FSCTL_FILE_PREFETCH parameters (extended version) */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_PREFETCH_EX { DWORD Type; DWORD Count; PVOID Context; DWORDLONG Prefetch[1]; } FILE_PREFETCH_EX; typedef FILE_PREFETCH_EX *PFILE_PREFETCH_EX; #endif /* File system statistics */ typedef struct _FILESYSTEM_STATISTICS { WORD FileSystemType; WORD Version; DWORD SizeOfCompleteStructure; DWORD UserFileReads; DWORD UserFileReadBytes; DWORD UserDiskReads; DWORD UserFileWrites; DWORD UserFileWriteBytes; DWORD UserDiskWrites; DWORD MetaDataReads; DWORD MetaDataReadBytes; DWORD MetaDataDiskReads; DWORD MetaDataWrites; DWORD MetaDataWriteBytes; DWORD MetaDataDiskWrites; } FILESYSTEM_STATISTICS; typedef FILESYSTEM_STATISTICS *PFILESYSTEM_STATISTICS; /* FAT statistics */ typedef struct _FAT_STATISTICS { DWORD CreateHits; DWORD SuccessfulCreates; DWORD FailedCreates; DWORD NonCachedReads; DWORD NonCachedReadBytes; DWORD NonCachedWrites; DWORD NonCachedWriteBytes; DWORD NonCachedDiskReads; DWORD NonCachedDiskWrites; } FAT_STATISTICS; typedef FAT_STATISTICS *PFAT_STATISTICS; /* Extended FAT statistics */ typedef struct _EXFAT_STATISTICS { DWORD CreateHits; DWORD SuccessfulCreates; DWORD FailedCreates; DWORD NonCachedReads; DWORD NonCachedReadBytes; DWORD NonCachedWrites; DWORD NonCachedWriteBytes; DWORD NonCachedDiskReads; DWORD NonCachedDiskWrites; } EXFAT_STATISTICS; typedef EXFAT_STATISTICS *PEXFAT_STATISTICS; /* NTFS statistics */ typedef struct _NTFS_STATISTICS { DWORD LogFileFullExceptions; DWORD OtherExceptions; DWORD MftReads; DWORD MftReadBytes; DWORD MftWrites; DWORD MftWriteBytes; struct { WORD Write; WORD Create; WORD SetInfo; WORD Flush; } MftWritesUserLevel; WORD MftWritesFlushForLogFileFull; WORD MftWritesLazyWriter; WORD MftWritesUserRequest; DWORD Mft2Writes; DWORD Mft2WriteBytes; struct { WORD Write; WORD Create; WORD SetInfo; WORD Flush; } Mft2WritesUserLevel; WORD Mft2WritesFlushForLogFileFull; WORD Mft2WritesLazyWriter; WORD Mft2WritesUserRequest; DWORD RootIndexReads; DWORD RootIndexReadBytes; DWORD RootIndexWrites; DWORD RootIndexWriteBytes; DWORD BitmapReads; DWORD BitmapReadBytes; DWORD BitmapWrites; DWORD BitmapWriteBytes; WORD BitmapWritesFlushForLogFileFull; WORD BitmapWritesLazyWriter; WORD BitmapWritesUserRequest; struct { WORD Write; WORD Create; WORD SetInfo; } BitmapWritesUserLevel; DWORD MftBitmapReads; DWORD MftBitmapReadBytes; DWORD MftBitmapWrites; DWORD MftBitmapWriteBytes; WORD MftBitmapWritesFlushForLogFileFull; WORD MftBitmapWritesLazyWriter; WORD MftBitmapWritesUserRequest; struct { WORD Write; WORD Create; WORD SetInfo; WORD Flush; } MftBitmapWritesUserLevel; DWORD UserIndexReads; DWORD UserIndexReadBytes; DWORD UserIndexWrites; DWORD UserIndexWriteBytes; DWORD LogFileReads; DWORD LogFileReadBytes; DWORD LogFileWrites; DWORD LogFileWriteBytes; struct { DWORD Calls; DWORD Clusters; DWORD Hints; DWORD RunsReturned; DWORD HintsHonored; DWORD HintsClustered; DWORD Cache; DWORD CacheClusters; DWORD CacheMiss; DWORD CacheMissClusters; } Allocate; } NTFS_STATISTICS; typedef NTFS_STATISTICS *PNTFS_STATISTICS; /* File object identifier buffer */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_OBJECTID_BUFFER { BYTE ObjectId[16]; union { struct { BYTE BirthVolumeId[16]; BYTE BirthObjectId[16]; BYTE DomainId[16]; }; BYTE ExtendedInfo[48]; }; } FILE_OBJECTID_BUFFER; typedef FILE_OBJECTID_BUFFER *PFILE_OBJECTID_BUFFER; #endif /* FSCTL_SET_SPARSE parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_SET_SPARSE_BUFFER { BOOLEAN SetSparse; } FILE_SET_SPARSE_BUFFER; typedef FILE_SET_SPARSE_BUFFER *PFILE_SET_SPARSE_BUFFER; #endif /* FSCTL_SET_ZERO_DATA parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_ZERO_DATA_INFORMATION { LARGE_INTEGER FileOffset; LARGE_INTEGER BeyondFinalZero; } FILE_ZERO_DATA_INFORMATION; typedef FILE_ZERO_DATA_INFORMATION *PFILE_ZERO_DATA_INFORMATION; #endif /* File allocated range buffer */ #if (_WIN32_WINNT >= 0x0500) typedef struct _FILE_ALLOCATED_RANGE_BUFFER { LARGE_INTEGER FileOffset; LARGE_INTEGER Length; } FILE_ALLOCATED_RANGE_BUFFER; typedef FILE_ALLOCATED_RANGE_BUFFER *PFILE_ALLOCATE_RANGE_BUFFER; #endif /* Encryption buffer */ #if (_WIN32_WINNT >= 0x0500) typedef struct _ENCRYPTION_BUFFER { DWORD EncryptionOperation; BYTE Private[1]; } ENCRYPTION_BUFFER; typedef ENCRYPTION_BUFFER *PENCRYPTION_BUFFER; #endif /* Decryption status buffer */ #if (_WIN32_WINNT >= 0x0500) typedef struct _DECRYPTION_STATUS_BUFFER { BOOLEAN NoEncryptedStreams; } DECRYPTION_STATUS_BUFFER; typedef DECRYPTION_STATUS_BUFFER *PDECRYPTION_STATUS_BUFFER; #endif /* Raw encrypted data request information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _REQUEST_RAW_ENCRYPTED_DATA { LONGLONG FileOffset; DWORD Length; } REQUEST_RAW_ENCRYPTED_DATA; typedef REQUEST_RAW_ENCRYPTED_DATA *PREQEUST_RAW_ENCRYPTED_DATA; #endif /* Encrypted data information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _ENCRYPTED_DATA_INFO { DWORDLONG StartingFileOffset; DWORD OutputBufferOffset; DWORD BytesWithinFileSize; DWORD BytesWithinValidDataLength; WORD CompressionFormat; BYTE DataUnitShift; BYTE ChunkShift; BYTE ClusterShift; BYTE EncryptionFormat; WORD NumberOfDataBlocks; DWORD DataBlockSize[ANYSIZE_ARRAY]; } ENCRYPTED_DATA_INFO; typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO; #endif /* Plex data read request information */ #if (_WIN32_WINNT >= 0x0500) typedef struct _PLEX_READ_DATA_REQUEST { LARGE_INTEGER ByteOffset; DWORD ByteLength; DWORD PlexNumber; } PLEX_READ_DATA_REQUEST; typedef PLEX_READ_DATA_REQUEST *PPLEX_READ_DATA_REQUEST; #endif /* FSCTL_SIS_COPYFILE parameters */ #if (_WIN32_WINNT >= 0x0500) typedef struct _SI_COPYFILE { DWORD SourceFileNameLength; DWORD DestinationFileNameLength; DWORD Flags; WCHAR FileNameBuffer[1]; } SI_COPYFILE; typedef SI_COPYFILE *PSI_COPYFILE; #endif /* FSCTL_MAKE_MEDIA_COMPATIBLE parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { BOOLEAN CloseDisc; } FILE_MAKE_COMPATIBLE_BUFFER; typedef FILE_MAKE_COMPATIBLE_BUFFER *PFILE_MAKE_COMPATIBLE_BUFFER; #endif /* FSCTL_SET_DEFECT_MANAGEMENT parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { BOOLEAN Disable; } FILE_SET_DEFECT_MGMT_BUFFER; typedef FILE_SET_DEFECT_MGMT_BUFFER *PFILE_SET_DEFECT_MGMT_BUFFER; #endif /* FSCTL_QUERY_SPARING_INFO returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _FILE_QUERY_SPARING_BUFFER { DWORD SparingUnitBytes; BOOLEAN SoftwareSparing; DWORD TotalSpareBlocks; DWORD FreeSpareBlocks; } FILE_QUERY_SPARING_BUFFER; typedef FILE_QUERY_SPARING_BUFFER *PFILE_QUERY_SPARING_BUFFER; #endif /* FSCTL_QUERY_ON_DISK_VOLUME_INFO returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { LARGE_INTEGER DirectoryCount; LARGE_INTEGER FileCount; WORD FsFormatMajVersion; WORD FsFormatMinVersion; WCHAR FsFormatName[12]; LARGE_INTEGER FormatTime; LARGE_INTEGER LastUpdateTime; WCHAR CopyrightInfo[34]; WCHAR AbstractInfo[34]; WCHAR FormattingImplementationInfo[34]; WCHAR LastModifyingImplementationInfo[34]; } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER; typedef FILE_QUERY_ON_DISK_VOL_INFO_BUFFER *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; #endif /* FSCTL_SHRINK_VOLUME request types */ #if (_WIN32_WINNT >= 0x0600) typedef enum _SHRINK_VOLUME_REQUEST_TYPES { ShrinkPrepare = 1, ShrinkCommit = 2, ShrinkAbort = 3 } SHRINK_VOLUME_REQUEST_TYPES; typedef SHRINK_VOLUME_REQUEST_TYPES *PSHRINK_VOLUME_REQUEST_TYPES; #endif /* FSCTL_SHRINK_VOLUME parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _SHRINK_VOLUME_INFORMATION { SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; DWORDLONG Flags; LONGLONG NewNumberOfSectors; } SHRINK_VOLUME_INFORMATION; typedef SHRINK_VOLUME_INFORMATION *PSHRINK_VOLUME_INFORMATION; #endif /* FSCTL_TXFS_MODIFY_RM parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_MODIFY_RM { DWORD Flags; DWORD LogContainerCountMax; DWORD LogContainerCountMin; DWORD LogContainerCount; DWORD LogGrowthIncrement; DWORD LogAutoShrinkPercentage; DWORDLONG Reserved; WORD LoggingMode; } TXFS_MODIFY_RM; typedef TXFS_MODIFY_RM *PTXFS_MODIFY_RM; #endif /* FSCTL_TXFS_QUERY_RM_INFORMATION parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_QUERY_RM_INFORMATION { DWORD BytesRequired; DWORDLONG TailLsn; DWORDLONG CurrentLsn; DWORDLONG ArchiveTailLsn; DWORDLONG LogContainerSize; LARGE_INTEGER HighestVirtualClock; DWORD LogContainerCount; DWORD LogContainerCountMax; DWORD LogContainerCountMin; DWORD LogGrowthIncrement; DWORD LogAutoShrinkPercentage; DWORD Flags; WORD LoggingMode; WORD Reserved; DWORD RmState; DWORDLONG LogCapacity; DWORDLONG LogFree; DWORDLONG TopsSize; DWORDLONG TopsUsed; DWORDLONG TransactionCount; DWORDLONG OnePCCount; DWORDLONG TwoPCCount; DWORDLONG NumberLogFileFull; DWORDLONG OldestTransactionAge; GUID RMName; DWORD TmLogPathOffset; } TXFS_QUERY_RM_INFORMATION; typedef TXFS_QUERY_RM_INFORMATION *PTXFS_QUERY_RM_INFORMATION; #endif /* FSCTL_TXFS_ROLLFORWARD_REDO parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { LARGE_INTEGER LastVirtualClock; DWORDLONG LastRedoLsn; DWORDLONG HighestRecoveryLsn; DWORD Flags; } TXFS_ROLLFORWARD_REDO_INFORMATION; typedef TXFS_ROLLFORWARD_REDO_INFORMATION *PTXFS_ROLLFORWARD_REDO_INFORMATION; #endif /* FSCTL_TXFS_STAR_RM parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_START_RM_INFORMATION { DWORD Flags; DWORDLONG LogContainerSize; DWORD LogContainerCountMin; DWORD LogContainerCountMax; DWORD LogGrowthIncrement; DWORD LogAutoShrinkPercentage; DWORD TmLogPathOffset; WORD TmLogPathLength; WORD LoggingMode; WORD LogPathLength; WORD Reserved; WCHAR LogPath[1]; } TXFS_START_RM_INFORMATION; typedef TXFS_START_RM_INFORMATION *PTXFS_START_RM_INFORMATION; #endif /* FSCTL_TXFS_GET_METADATA_INFO returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_GET_METADATA_INFO_OUT { struct { LONGLONG LowPart; LONGLONG HighPart; } TxfFileId; GUID LockingTransaction; DWORDLONG LastLsn; DWORD TransactionState; } TXFS_GET_METADATA_INFO_OUT; typedef TXFS_GET_METADATA_INFO_OUT *PTXFS_GET_METADATA_INFO_OUT; #endif /* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES entry */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY { DWORDLONG Offset; DWORD NameFlags; LONGLONG FileId; DWORD Reserved1; DWORD Reserved2; LONGLONG Reserved3; WCHAR FileName[1]; } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY; typedef TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY *PTXFS_TRANSACTION_LOCKED_FILES_ENTRY; #endif /* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES { GUID KtmTransaction; DWORDLONG NumberOfFiles; DWORDLONG BufferSizeRequired; DWORDLONG Offset; } TXFS_LIST_TRANSACTION_LOCKED_FILES; typedef TXFS_LIST_TRANSACTION_LOCKED_FILES *PTXFS_LIST_TRANSACTION_LOCKED_FILES; #endif /* FSCTL_TXFS_LIST_TRANSACTIONS entry */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY { GUID TransactionId; DWORD TransactionState; DWORD Reserved1; DWORD Reserved2; LONGLONG Reserved3; } TXFS_LIST_TRANSACTIONS_ENTRY; typedef TXFS_LIST_TRANSACTIONS_ENTRY *PTXFS_LIST_TRANSACTIONS_ENTRY; #endif /* FSCTL_TXFS_LIST_TRANSACTIONS parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_LIST_TRANSACTIONS { DWORDLONG NumberOfTransactions; DWORDLONG BufferSizeRequired; } TXFS_LIST_TRANSACTIONS; typedef TXFS_LIST_TRANSACTIONS *PTXFS_LIST_TRANSACTIONS; #endif /* FSCTL_TXFS_READ_BACKUP_INFORMATION returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT { union { DWORD BufferLength; BYTE Buffer[1]; }; } TXFS_READ_BACKUP_INFORMATION_OUT; typedef TXFS_READ_BACKUP_INFORMATION_OUT *PTXFS_READ_BACKUP_INFORMATION_OUT; #endif /* FSCTL_TXFS_WRITE_BACKUP_INFORMATION parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_WRITE_BACKUP_INFORMATION { BYTE Buffer[1]; } TXFS_WRITE_BACKUP_INFORMATION; typedef TXFS_WRITE_BACKUP_INFORMATION *PTXFS_WRITE_BACKUP_INFORMATION; #endif /* FSCTL_TXFS_GET_TRANSACTED_VERSION parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_GET_TRANSACTED_VERSION { DWORD ThisBaseVersion; DWORD LatestVersion; WORD ThisMiniVersion; WORD FirstMiniVersion; WORD LatestMiniVersion; } TXFS_GET_TRANSACTED_VERSION; typedef TXFS_GET_TRANSACTED_VERSION *PTXFS_GET_TRANSACTED_VERSION; #endif /* FSCTL_TXFS_SAVEPOINT_INFORMATION parameters */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_SAVEPOINT_INFORMATION { HANDLE KtmTransaction; DWORD ActionCode; DWORD SavepointId; } TXFS_SAVEPOINT_INFORMATION; typedef TXFS_SAVEPOINT_INFORMATION *PTXFS_SAVEPOINT_INFORMATION; #endif /* FSCTL_GET_BOOT_AREA_INFO returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _BOOT_AREA_INFO { DWORD BootSectorCount; struct { LARGE_INTEGER Offset; } BootSectors[2]; } BOOT_AREA_INFO; typedef BOOT_AREA_INFO *PBOOT_AREA_INFO; #endif /* FSCTL_GET_RETRIEVAL_POINTER_BASE returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _RETRIEVAL_POINTER_BASE { LARGE_INTEGER FileAreaOffset; } RETRIEVAL_POINTER_BASE; typedef RETRIEVAL_POINTER_BASE *PRETRIEVAL_POINTER_BASE; #endif /* Persistent volume information */ #if (_WIN32_WINNT >= 0x0601) typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION { DWORD VolumeFlags; DWORD FlagMask; DWORD Version; DWORD Reserved; } FILE_FS_PERSISTENT_VOLUME_INFORMATION; typedef FILE_FS_PERSISTENT_VOLUME_INFORMATION *PFILE_FS_PERSISTENT_VOLUME_INFORMATION; #endif /* FSCTL_QUERY_FILE_SYSTEM_RECOGNITION returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION { CHAR FileSystem[9]; } FILE_SYSTEM_RECOGNITION_INFORMATION; typedef FILE_SYSTEM_RECOGNITION_INFORMATION *PFILE_SYSTEM_RECOGNITION_INFORMATION; #endif /* FSCTL_REQUEST_OPLOCK parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _REQUEST_OPLOCK_INPUT_BUFFER { WORD StructureVersion; WORD StructureLength; DWORD RequestedOplockLevel; DWORD Flags; } REQUEST_OPLOCK_INPUT_BUFFER; typedef REQUEST_OPLOCK_INPUT_BUFFER *PREQUEST_OPLOCK_INPUT_BUFFER; #endif /* FSCTL_REQUEST_OPLOCK returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER { WORD StructureVersion; WORD StructureLength; DWORD OriginalOplockLevel; DWORD NewOplockLevel; DWORD Flags; ACCESS_MASK AccessMode; WORD ShareMode; } REQUEST_OPLOCK_OUTPUT_BUFFER; typedef REQUEST_OPLOCK_OUTPUT_BUFFER *PREQUEST_OPLOCK_OUTPUT_BUFFER; #endif /* SD_GLOBAL_CHANGE_TYPE_MACHINE_SID parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _SD_CHANGE_MACHINE_SID_INPUT { WORD CurrentMachineSIDOffset; WORD CurrentMachineSIDLength; WORD NewMachineSIDOffset; WORD NewMachineSIDLength; } SD_CHANGE_MACHINE_SID_INPUT; typedef SD_CHANGE_MACHINE_SID_INPUT *PSD_CHANGE_MACHINE_SID_INPUT; #endif /* SD_GLOBAL_CHANGE_TYPE_MACHINE_SID returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT { DWORDLONG NumSDChangedSuccess; DWORDLONG NumSDChangedFail; DWORDLONG NumSDUnused; DWORDLONG NumSDTotal; DWORDLONG NumMftSDChangedSuccess; DWORDLONG NumMftSDChangedFail; DWORDLONG NumMftSDTotal; } SD_CHANGE_MACHINE_SID_OUTPUT; typedef SD_CHANGE_MACHINE_SID_OUTPUT *PSD_CHANGE_MACHINE_SID_OUTPUT; #endif /* FSCTL_SD_GLOBAL_CHANGE parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _SD_GLOBAL_CHANGE_INPUT { DWORD Flags; DWORD ChangeType; union { SD_CHANGE_MACHINE_SID_INPUT SdChange; }; } SD_GLOBAL_CHANGE_INPUT; typedef SD_GLOBAL_CHANGE_INPUT *PSD_GLOBAL_CHANGE_INPUT; #endif /* FSCTL_SD_GLOBAL_CHANGE returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _SD_GLOBAL_CHANGE_OUTPUT { DWORD Flags; DWORD ChangeType; union { SD_CHANGE_MACHINE_SID_OUTPUT SdChange; }; } SD_GLOBAL_CHANGE_OUTPUT; typedef SD_GLOBAL_CHANGE_OUTPUT *PSD_GLOBAL_CHANGE_OUTPUT; #endif /* Extended encrypted data information */ #if (_WIN32_WINNT >= 0x0601) typedef struct _EXTENDED_ENCRYPTED_DATA_INFO { DWORD ExtendedCode; DWORD Length; DWORD Flags; DWORD Reserved; } EXTENDED_ENCRYPTED_DATA_INFO; typedef EXTENDED_ENCRYPTED_DATA_INFO *PEXTENDED_ENCRYPTED_DATA_INFO; #endif /* FSCTL_LOOKUP_STREAM_FROM_CLUSTER parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT { DWORD Flags; DWORD NumberOfClusters; LARGE_INTEGER Cluster[1]; } LOOKUP_STREAM_FROM_CLUSTER_INPUT; typedef LOOKUP_STREAM_FROM_CLUSTER_INPUT *PLOOKUP_STREAM_FROM_CLUSTER_INPUT; #endif /* FSCTL_LOOKUP_STREAM_FROM_CLUSTER returned data */ #if (_WIN32_WINNT >= 0x0601) typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT { DWORD Offset; DWORD NumberOfMatches; DWORD BufferSizeRequired; } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT; typedef LOOKUP_STREAM_FROM_CLUSTER_OUTPUT *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT; #endif /* FSCTL_LOOKUP_STREAM_FROM_CLUSTER entry */ #if (_WIN32_WINNT >= 0x0601) typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY { DWORD OffsetToNext; DWORD Flags; LARGE_INTEGER Reserved; LARGE_INTEGER Cluster; WCHAR FileName[1]; } LOOKUP_STREAM_FROM_CLUSTER_ENTRY; typedef LOOKUP_STREAM_FROM_CLUSTER_ENTRY *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY; #endif /* FSCTL_FILE_TYPE_NOTIFICATION parameters */ #if (_WIN32_WINNT >= 0x0601) typedef struct _FILE_TYPE_NOTIFICATION_INPUT { DWORD Flags; DWORD NumFileTypeIDs; GUID FileTypeID[1]; } FILE_TYPE_NOTIFICATION_INPUT; typedef FILE_TYPE_NOTIFICATION_INPUT *PFILE_TYPE_NOTIFICATION_INPUT; #endif /* FSCTL_TXFS_CREATE_MINIVERSION returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_CREATE_MINIVERSION_INFO { WORD StructureVersion; WORD StructureLength; DWORD BaseVersion; WORD MiniVersion; } TXFS_CREATE_MINIVERSION_INFO; typedef TXFS_CREATE_MINIVERSION_INFO *PTXFS_CREATE_MINIVERSION_INFO; #endif /* FSCTL_TXFS_TRANSACTION_ACTIVE returned data */ #if (_WIN32_WINNT >= 0x0600) typedef struct _TXFS_TRANSACTION_ACTIVE_INFO { BOOLEAN TransactionsActiveAtSnapshot; } TXFS_TRANSACTION_ACTIVE_INFO; typedef TXFS_TRANSACTION_ACTIVE_INFO *PTXFS_TRANSACTION_ACTIVE_INFO; #endif /* Disk extent */ #if (NTDDI_VERSION >= 0x05000000) typedef struct _DISK_EXTENT { DWORD DiskNumber; LARGE_INTEGER StartingOffset; LARGE_INTEGER ExtentLength; } DISK_EXTENT; typedef DISK_EXTENT *PDISK_EXTENT; #endif /* Volume disk extents */ #if (NTDDI_VERSION >= 0x05000000) typedef struct _VOLUME_DISK_EXTENTS { DWORD NumberOfDiskExtents; DISK_EXTENT Extents[ANYSIZE_ARRAY]; } VOLUME_DISK_EXTENTS; typedef VOLUME_DISK_EXTENTS *PVOLUME_DISK_EXTENTS; #endif /* IOCTL_VOLUME_GET_GPT_ATTRIBUTES returned data */ #if (NTDDI_VERSION >= 0x05010000) typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION { DWORDLONG GptAttributes; } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION; typedef VOLUME_GET_GPT_ATTRIBUTES_INFORMATION *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION; #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _WINIOCTL_ */