| /* | |
| * DDK definitions for storage media access | |
| * | |
| * Copyright (C) 2002 Eric Pouech | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #ifndef _NTDDSTOR_H_ | |
| #define _NTDDSTOR_H_ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| #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_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_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_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_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_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS) | |
| #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) | |
| DEFINE_GUID(DiskClassGuid, | |
| 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(CdRomClassGuid, | |
| 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(PartitionClassGuid, | |
| 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(TapeClassGuid, | |
| 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(WriteOnceDiskClassGuid, | |
| 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(VolumeClassGuid, | |
| 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(MediumChangerClassGuid, | |
| 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(FloppyClassGuid, | |
| 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(CdChangerClassGuid, | |
| 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| DEFINE_GUID(StroagePortClassGuid, | |
| 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); | |
| typedef struct _STORAGE_DEVICE_NUMBER { | |
| DEVICE_TYPE DeviceType; | |
| ULONG DeviceNumber; | |
| ULONG PartitionNumber; | |
| } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER; | |
| typedef struct _STORAGE_BUS_RESET_REQUEST { | |
| UCHAR PathId; | |
| } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST; | |
| typedef struct _PREVENT_MEDIA_REMOVAL { | |
| BOOLEAN PreventMediaRemoval; | |
| } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; | |
| 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, *PTAPE_STATISTICS; | |
| #define RECOVERED_WRITES_VALID 0x00000001 | |
| #define UNRECOVERED_WRITES_VALID 0x00000002 | |
| #define RECOVERED_READS_VALID 0x00000004 | |
| #define UNRECOVERED_READS_VALID 0x00000008 | |
| #define WRITE_COMPRESSION_INFO_VALID 0x00000010 | |
| #define READ_COMPRESSION_INFO_VALID 0x00000020 | |
| typedef struct _TAPE_GET_STATISTICS { | |
| ULONG Operation; | |
| } TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS; | |
| #define TAPE_RETURN_STATISTICS 0L | |
| #define TAPE_RETURN_ENV_INFO 1L | |
| #define TAPE_RESET_STATISTICS 2L | |
| typedef enum _STORAGE_MEDIA_TYPE { | |
| /* see also defines in ntdddisk.h */ | |
| DDS_4mm = 0x20, | |
| MiniQic, | |
| Travan, | |
| QIC, | |
| MP_8mm, | |
| AME_8mm, | |
| AIT1_8mm, | |
| DLT, | |
| NCTP, | |
| IBM_3480, | |
| IBM_3490E, | |
| IBM_Magstar_3590, | |
| IBM_Magstar_MP, | |
| STK_DATA_D3, | |
| SONY_DTF, | |
| DV_6mm, | |
| DMI, | |
| SONY_D2, | |
| CLEANER_CARTRIDGE, | |
| CD_ROM, | |
| CD_R, | |
| CD_RW, | |
| DVD_ROM, | |
| DVD_R, | |
| DVD_RW, | |
| MO_3_RW, | |
| MO_5_WO, | |
| MO_5_RW, | |
| MO_5_LIMDOW, | |
| PC_5_WO, | |
| PC_5_RW, | |
| PD_5_RW, | |
| ABL_5_WO, | |
| PINNACLE_APEX_5_RW, | |
| SONY_12_WO, | |
| PHILIPS_12_WO, | |
| HITACHI_12_WO, | |
| CYGNET_12_WO, | |
| KODAK_14_WO, | |
| MO_NFR_525, | |
| NIKON_12_RW, | |
| IOMEGA_ZIP, | |
| IOMEGA_JAZ, | |
| SYQUEST_EZ135, | |
| SYQUEST_EZFLYER, | |
| SYQUEST_SYJET, | |
| AVATAR_F2, | |
| MP2_8mm | |
| } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; | |
| #define MEDIA_ERASEABLE 0x00000001 | |
| #define MEDIA_WRITE_ONCE 0x00000002 | |
| #define MEDIA_READ_ONLY 0x00000004 | |
| #define MEDIA_READ_WRITE 0x00000008 | |
| #define MEDIA_WRITE_PROTECTED 0x00000100 | |
| #define MEDIA_CURRENTLY_MOUNTED 0x80000000 | |
| 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; | |
| } TapeInfo; | |
| } DeviceSpecific; | |
| } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO; | |
| typedef struct _GET_MEDIA_TYPES { | |
| ULONG DeviceType; | |
| ULONG MediaInfoCount; | |
| DEVICE_MEDIA_INFO MediaInfo[1]; | |
| } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES; | |
| typedef enum _STORAGE_QUERY_TYPE { | |
| PropertyStandardQuery = 0, | |
| PropertyExistsQuery, | |
| PropertyMaskQuery, | |
| PropertyQueryMaxDefined | |
| } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; | |
| typedef enum _STORAGE_PROPERTY_ID { | |
| StorageDeviceProperty = 0, | |
| StorageAdapterProperty | |
| } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; | |
| typedef struct _STORAGE_PROPERTY_QUERY { | |
| STORAGE_PROPERTY_ID PropertyId; | |
| STORAGE_QUERY_TYPE QueryType; | |
| UCHAR AdditionalParameters[1]; | |
| } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; | |
| typedef struct _STORAGE_DESCRIPTOR_HEADER { | |
| ULONG Version; | |
| ULONG Size; | |
| } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; | |
| typedef enum _STORAGE_BUS_TYPE { | |
| BusTypeUnknown = 0x00, | |
| BusTypeScsi, | |
| BusTypeAtapi, | |
| BusTypeAta, | |
| BusType1394, | |
| BusTypeSsa, | |
| BusTypeFibre, | |
| BusTypeUsb, | |
| BusTypeRAID, | |
| BusTypeMaxReserved = 0x7F | |
| } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; | |
| 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, *PSTORAGE_DEVICE_DESCRIPTOR; | |
| typedef struct _STORAGE_ADAPTER_DESCRIPTOR { | |
| ULONG Version; | |
| ULONG Size; | |
| ULONG MaximumTransferLength; | |
| ULONG MaximumPhysicalPages; | |
| ULONG AlignmentMask; | |
| BOOLEAN AdapterUsesPio; | |
| BOOLEAN AdapterScansDown; | |
| BOOLEAN CommandQueueing; | |
| BOOLEAN AcceleratedTransfer; | |
| BOOLEAN BusType; | |
| USHORT BusMajorVersion; | |
| USHORT BusMinorVersion; | |
| } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _NTDDSTOR_H_ */ |