This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/ntddstor.h

735 lines
27 KiB
C

/*
* 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_ */