/* * ntddstor.h Storage device 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 ); /* 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 #endif /* DEFINE_GUID */ #ifndef _NTDDSTOR_H_ #define _NTDDSTOR_H_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifdef __cplusplus extern "C" { #endif /* Primitive data types */ typedef ULONG 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_PROPERTIES \ 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 { ULONG 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; ULONG DeviceNumber; ULONG PartitionNumber; } STORAGE_DEVICE_NUMBER; typedef STORAGE_DEVICE_NUMBER *PSTORAGE_DEVICE_NUMBER; /* Storage bus reset request */ typedef struct _STORAGE_BUS_RESET_REQUEST { UCHAR PathId; } STORAGE_BUS_RESET_REQUEST; typedef STORAGE_BUS_RESET_REQUEST *PSTORAGE_BUS_RESET_REQUEST; /* Storage break reservation request */ typedef struct STORAGE_BREAK_RESERVATION_REQUEST { ULONG Length; UCHAR _unused; UCHAR PathId; UCHAR TargetId; UCHAR 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 { ULONG MediaChangeContext; ULONG NewState; } CLASS_MEDIA_CHANGE_CONTEXT; typedef CLASS_MEDIA_CHANGE_CONTEXT *PCLASS_MEDIA_CHANGE_CONTEXT; /* Tape statistics */ typedef struct _TAPE_STATISTICS { ULONG Version; ULONG Flags; LARGE_INTEGER RecoveredWrites; LARGE_INTEGER UnrecoveredWrites; LARGE_INTEGER RecoveredReads; LARGE_INTEGER UnrecoveredReads; UCHAR CompressionRatioReads; UCHAR CompressionRatioWrites; } TAPE_STATISTICS; typedef TAPE_STATISTICS *PTAPE_STATISTICS; /* IOCTL_TAPE_GET_STATISTICS parameters */ typedef struct _TAPE_GET_STATISTICS { ULONG 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; ULONG TracksPerCylinder; ULONG SectorsPerTrack; ULONG BytesPerSector; ULONG NumberMediaSides; ULONG MediaCharacteristics; } DiskInfo; struct { LARGE_INTEGER Cylinders; STORAGE_MEDIA_TYPE MediaType; ULONG TracksPerCylinder; ULONG SectorsPerTrack; ULONG BytesPerSector; ULONG NumberMediaSides; ULONG MediaCharacteristics; } RemovableDiskInfo; struct { STORAGE_MEDIA_TYPE MediaType; ULONG MediaCharacteristics; ULONG CurrentBlockSize; STORAGE_BUS_TYPE BusType; union { struct { UCHAR MediumType; UCHAR DensityCode; } ScsiInformation; } BusSpecificData; } TapeInfo; } DeviceSpecific; } DEVICE_MEDIA_INFO; typedef DEVICE_MEDIA_INFO *PDEVICE_MEDIA_INFO; /* Media type information */ typedef struct _GET_MEDIA_TYPES { ULONG DeviceType; ULONG 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 { ULONG PredictFailure; UCHAR 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; UCHAR AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY; typedef STORAGE_PROPERTY_QUERY *PSTORAGE_PROPERTY_QUERY; /* Storage description header */ typedef struct _STORAGE_DESCRIPTOR_HEADER { ULONG Version; ULONG Size; } STORAGE_DESCRIPTOR_HEADER; typedef STORAGE_DESCRIPTOR_HEADER *PSTORAGE_DESCRIPTOR_HEADER; /* Storage device descriptor */ typedef struct _STORAGE_DEVICE_DESCRIPTOR { ULONG Version; ULONG Size; UCHAR DeviceType; UCHAR DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; ULONG VendorIdOffset; ULONG ProductIdOffset; ULONG ProductRevisionOffset; ULONG SerialNumberOffset; STORAGE_BUS_TYPE BusType; ULONG RawPropertiesLength; UCHAR RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR; typedef STORAGE_DEVICE_DESCRIPTOR *PSTORAGE_DEVICE_DESCRIPTOR; /* Storage adapter descriptor */ typedef struct _STORAGE_ADAPTER_DESCRIPTOR { ULONG Version; ULONG Size; ULONG MaximumTransferLength; ULONG MaximumPhysicalPages; ULONG AlignmentMask; BOOLEAN AdapterUsesPio; BOOLEAN AdapterScansDown; BOOLEAN CommandQueueing; BOOLEAN AcceleratedTransfer; #if (NTDDI_VERSION < 0x05010000) BOOLEAN BusType; #else UCHAR BusType; #endif USHORT BusMajorVersion; USHORT BusMinorVersion; } STORAGE_ADAPTER_DESCRIPTOR; typedef STORAGE_ADAPTER_DESCRIPTOR *PSTORAGE_ADAPTER_DESCRIPTOR; /* Storage access alignment descriptor */ typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { ULONG Version; ULONG Size; ULONG BytesPerCacheLine; ULONG BytesOffsetForCacheAlignment; ULONG BytesPerLogicalSector; ULONG BytesPerPhysicalSector; ULONG 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 { ULONG Version; ULONG 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; USHORT IdentifierSize; USHORT NextOffset; STORAGE_ASSOCIATION_TYPE Association; UCHAR Identifier[1]; } STORAGE_IDENTIFIER; typedef STORAGE_IDENTIFIER *PSTORAGE_IDENTIFIER; /* Storage device identifier descriptor */ typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR { ULONG Version; ULONG Size; ULONG NumberOfIdentifiers; UCHAR 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 { ULONG Version; ULONG 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 { ULONG Version; ULONG Size; BOOLEAN BenefitsFromWriteAggregation; } DEVICE_WRITE_AGGREGATION_DESCRIPTOR; typedef DEVICE_WRITE_AGGREGATION_DESCRIPTOR *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR; /* Device trim descriptor */ typedef struct _DEVICE_TRIM_DESCRIPTOR { ULONG Version; ULONG 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; ULONGLONG 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 { ULONG Size; DEVICE_DATA_MANAGEMENT_SET_ACTION Action; ULONG Flags; ULONG ParameterBlockOffset; ULONG ParameterBlockLength; ULONG DataSetRangesOffset; ULONG 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 { ULONG Size; ULONG Flags; ULONG 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 { ULONG MaximumRequestsPerPeriod; ULONG MinimumPeriod; ULONGLONG MaximumRequestSize; ULONG EstimatedTimePerRequest; ULONG NumOutStandingRequests; ULONGLONG 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 { ULONG Version; ULONG RequestsPerPeriod; ULONG Period; BOOLEAN RetryFailures; BOOLEAN Discardable; BOOLEAN Reserved1[2]; ULONG AccessType; ULONG 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 { ULONGLONG RequestSize; ULONG 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 { ULONG 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 { USHORT Reserved; USHORT SerialNumberLength; UCHAR 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 { ULONG Version; ULONG Size; ULONG 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 { ULONG Version; ULONG 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 { ULONG Version; ULONG Size; union { struct { UCHAR ServiceAction : 5; UCHAR Reserved1 : 3; USHORT AllocationLength; } PR_IN; struct { UCHAR ServiceAction : 5; UCHAR Reserved1 : 3; UCHAR Type : 4; UCHAR Scope : 4; UCHAR ParameterList[1]; } PR_OUT; }; } PERSISTENT_RESERVE_COMMAND; typedef PERSISTENT_RESERVE_COMMAND *PPERSISTENT_RESERVE_COMMAND; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _NTDDSTOR_H_ */