Embed:
(wiki syntax)
Show/hide line numbers
ntddchgr.h
00001 /* 00002 * ntddchgr.h 00003 * 00004 * Media changer IOCTL interface. 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __NTDDCHGR_H 00024 #define __NTDDCHGR_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 #include "ntddk.h" 00035 #include "ntddstor.h" 00036 00037 #define DD_CHANGER_DEVICE_NAME "\\Device\\Changer" 00038 #define DD_CHANGER_DEVICE_NAME_U L"\\Device\\Changer" 00039 00040 #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER 00041 00042 #define IOCTL_CHANGER_EXCHANGE_MEDIUM \ 00043 CTL_CODE(IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) 00044 00045 #define IOCTL_CHANGER_GET_ELEMENT_STATUS \ 00046 CTL_CODE(IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00047 00048 #define IOCTL_CHANGER_GET_PARAMETERS \ 00049 CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS) 00050 00051 #define IOCTL_CHANGER_GET_PRODUCT_DATA \ 00052 CTL_CODE(IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) 00053 00054 #define IOCTL_CHANGER_GET_STATUS \ 00055 CTL_CODE(IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00056 00057 #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \ 00058 CTL_CODE(IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS) 00059 00060 #define IOCTL_CHANGER_MOVE_MEDIUM \ 00061 CTL_CODE(IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS) 00062 00063 #define IOCTL_CHANGER_QUERY_VOLUME_TAGS \ 00064 CTL_CODE(IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00065 00066 #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \ 00067 CTL_CODE(IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS) 00068 00069 #define IOCTL_CHANGER_SET_ACCESS \ 00070 CTL_CODE(IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00071 00072 #define IOCTL_CHANGER_SET_POSITION \ 00073 CTL_CODE(IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) 00074 00075 00076 #define MAX_VOLUME_ID_SIZE 36 00077 #define MAX_VOLUME_TEMPLATE_SIZE 40 00078 00079 typedef enum _ELEMENT_TYPE { 00080 AllElements, 00081 ChangerTransport, 00082 ChangerSlot, 00083 ChangerIEPort, 00084 ChangerDrive, 00085 ChangerDoor, 00086 ChangerKeypad, 00087 ChangerMaxElement 00088 } ELEMENT_TYPE, *PELEMENT_TYPE; 00089 00090 typedef struct _CHANGER_ELEMENT { 00091 ELEMENT_TYPE ElementType; 00092 ULONG ElementAddress; 00093 } CHANGER_ELEMENT, *PCHANGER_ELEMENT; 00094 00095 typedef struct _CHANGER_ELEMENT_LIST { 00096 CHANGER_ELEMENT Element; 00097 ULONG NumberOfElements; 00098 } CHANGER_ELEMENT_LIST, *PCHANGER_ELEMENT_LIST; 00099 00100 typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { 00101 CHANGER_ELEMENT_LIST ElementList; 00102 BOOLEAN BarCodeScan; 00103 } CHANGER_INITIALIZE_ELEMENT_STATUS, *PCHANGER_INITIALIZE_ELEMENT_STATUS; 00104 00105 typedef struct _CHANGER_READ_ELEMENT_STATUS { 00106 CHANGER_ELEMENT_LIST ElementList; 00107 BOOLEAN VolumeTagInfo; 00108 } CHANGER_READ_ELEMENT_STATUS, *PCHANGER_READ_ELEMENT_STATUS; 00109 00110 00111 typedef struct _CHANGER_SET_POSITION { 00112 CHANGER_ELEMENT Transport; 00113 CHANGER_ELEMENT Destination; 00114 BOOLEAN Flip; 00115 } CHANGER_SET_POSITION, *PCHANGER_SET_POSITION; 00116 00117 typedef struct _CHANGER_EXCHANGE_MEDIUM { 00118 CHANGER_ELEMENT Transport; 00119 CHANGER_ELEMENT Source; 00120 CHANGER_ELEMENT Destination1; 00121 CHANGER_ELEMENT Destination2; 00122 BOOLEAN Flip1; 00123 BOOLEAN Flip2; 00124 } CHANGER_EXCHANGE_MEDIUM, *PCHANGER_EXCHANGE_MEDIUM; 00125 00126 typedef struct _CHANGER_MOVE_MEDIUM { 00127 CHANGER_ELEMENT Transport; 00128 CHANGER_ELEMENT Source; 00129 CHANGER_ELEMENT Destination; 00130 BOOLEAN Flip; 00131 } CHANGER_MOVE_MEDIUM, *PCHANGER_MOVE_MEDIUM; 00132 00133 #define VENDOR_ID_LENGTH 8 00134 #define PRODUCT_ID_LENGTH 16 00135 #define REVISION_LENGTH 4 00136 #define SERIAL_NUMBER_LENGTH 32 00137 00138 typedef struct _CHANGER_PRODUCT_DATA { 00139 UCHAR VendorId[VENDOR_ID_LENGTH]; 00140 UCHAR ProductId[PRODUCT_ID_LENGTH]; 00141 UCHAR Revision[REVISION_LENGTH]; 00142 UCHAR SerialNumber[SERIAL_NUMBER_LENGTH]; 00143 UCHAR DeviceType; 00144 } CHANGER_PRODUCT_DATA, *PCHANGER_PRODUCT_DATA; 00145 00146 /* CHANGER_SET_ACCESS.Control constants */ 00147 #define LOCK_ELEMENT 0 00148 #define UNLOCK_ELEMENT 1 00149 #define EXTEND_IEPORT 2 00150 #define RETRACT_IEPORT 3 00151 00152 typedef struct _CHANGER_SET_ACCESS { 00153 CHANGER_ELEMENT Element; 00154 ULONG Control; 00155 } CHANGER_SET_ACCESS, *PCHANGER_SET_ACCESS; 00156 00157 00158 typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { 00159 DeviceProblemNone, 00160 DeviceProblemHardware, 00161 DeviceProblemCHMError, 00162 DeviceProblemDoorOpen, 00163 DeviceProblemCalibrationError, 00164 DeviceProblemTargetFailure, 00165 DeviceProblemCHMMoveError, 00166 DeviceProblemCHMZeroError, 00167 DeviceProblemCartridgeInsertError, 00168 DeviceProblemPositionError, 00169 DeviceProblemSensorError, 00170 DeviceProblemCartridgeEjectError, 00171 DeviceProblemGripperError, 00172 DeviceProblemDriveError 00173 } CHANGER_DEVICE_PROBLEM_TYPE, *PCHANGER_DEVICE_PROBLEM_TYPE; 00174 00175 /* CHANGER_ELEMENT_STATUS(_EX).Flags constants */ 00176 #define ELEMENT_STATUS_FULL 0x00000001 00177 #define ELEMENT_STATUS_IMPEXP 0x00000002 00178 #define ELEMENT_STATUS_EXCEPT 0x00000004 00179 #define ELEMENT_STATUS_ACCESS 0x00000008 00180 #define ELEMENT_STATUS_EXENAB 0x00000010 00181 #define ELEMENT_STATUS_INENAB 0x00000020 00182 #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040 00183 #define ELEMENT_STATUS_LUN_VALID 0x00001000 00184 #define ELEMENT_STATUS_ID_VALID 0x00002000 00185 #define ELEMENT_STATUS_NOT_BUS 0x00008000 00186 #define ELEMENT_STATUS_INVERT 0x00400000 00187 #define ELEMENT_STATUS_SVALID 0x00800000 00188 #define ELEMENT_STATUS_PVOLTAG 0x10000000 00189 #define ELEMENT_STATUS_AVOLTAG 0x20000000 00190 00191 /* CHANGER_ELEMENT_STATUS(_EX).ExceptionCode constants */ 00192 #define ERROR_LABEL_UNREADABLE 0x00000001 00193 #define ERROR_LABEL_QUESTIONABLE 0x00000002 00194 #define ERROR_SLOT_NOT_PRESENT 0x00000004 00195 #define ERROR_DRIVE_NOT_INSTALLED 0x00000008 00196 #define ERROR_TRAY_MALFUNCTION 0x00000010 00197 #define ERROR_INIT_STATUS_NEEDED 0x00000011 00198 #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF 00199 00200 typedef struct _CHANGER_ELEMENT_STATUS { 00201 CHANGER_ELEMENT Element; 00202 CHANGER_ELEMENT SrcElementAddress; 00203 ULONG Flags; 00204 ULONG ExceptionCode; 00205 UCHAR TargetId; 00206 UCHAR Lun; 00207 USHORT Reserved; 00208 UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 00209 UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 00210 } CHANGER_ELEMENT_STATUS, *PCHANGER_ELEMENT_STATUS; 00211 00212 typedef struct _CHANGER_ELEMENT_STATUS_EX { 00213 CHANGER_ELEMENT Element; 00214 CHANGER_ELEMENT SrcElementAddress; 00215 ULONG Flags; 00216 ULONG ExceptionCode; 00217 UCHAR TargetId; 00218 UCHAR Lun; 00219 USHORT Reserved; 00220 UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 00221 UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 00222 UCHAR VendorIdentification[VENDOR_ID_LENGTH]; 00223 UCHAR ProductIdentification[PRODUCT_ID_LENGTH]; 00224 UCHAR SerialNumber[SERIAL_NUMBER_LENGTH]; 00225 } CHANGER_ELEMENT_STATUS_EX, *PCHANGER_ELEMENT_STATUS_EX; 00226 00227 /* CHANGER_SEND_VOLUME_TAG_INFORMATION.ActionCode constants */ 00228 #define SEARCH_ALL 0x0 00229 #define SEARCH_PRIMARY 0x1 00230 #define SEARCH_ALTERNATE 0x2 00231 #define SEARCH_ALL_NO_SEQ 0x4 00232 #define SEARCH_PRI_NO_SEQ 0x5 00233 #define SEARCH_ALT_NO_SEQ 0x6 00234 #define ASSERT_PRIMARY 0x8 00235 #define ASSERT_ALTERNATE 0x9 00236 #define REPLACE_PRIMARY 0xA 00237 #define REPLACE_ALTERNATE 0xB 00238 #define UNDEFINE_PRIMARY 0xC 00239 #define UNDEFINE_ALTERNATE 0xD 00240 00241 typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { 00242 CHANGER_ELEMENT StartingElement; 00243 ULONG ActionCode; 00244 UCHAR VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; 00245 } CHANGER_SEND_VOLUME_TAG_INFORMATION, *PCHANGER_SEND_VOLUME_TAG_INFORMATION; 00246 00247 /* GET_CHANGER_PARAMETERS.Features0 constants */ 00248 #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001 00249 #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002 00250 #define CHANGER_CLOSE_IEPORT 0x00000004 00251 #define CHANGER_OPEN_IEPORT 0x00000008 00252 #define CHANGER_STATUS_NON_VOLATILE 0x00000010 00253 #define CHANGER_EXCHANGE_MEDIA 0x00000020 00254 #define CHANGER_CLEANER_SLOT 0x00000040 00255 #define CHANGER_LOCK_UNLOCK 0x00000080 00256 #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100 00257 #define CHANGER_MEDIUM_FLIP 0x00000200 00258 #define CHANGER_POSITION_TO_ELEMENT 0x00000400 00259 #define CHANGER_REPORT_IEPORT_STATE 0x00000800 00260 #define CHANGER_STORAGE_DRIVE 0x00001000 00261 #define CHANGER_STORAGE_IEPORT 0x00002000 00262 #define CHANGER_STORAGE_SLOT 0x00004000 00263 #define CHANGER_STORAGE_TRANSPORT 0x00008000 00264 #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000 00265 #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000 00266 #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000 00267 #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000 00268 #define CHANGER_VOLUME_IDENTIFICATION 0x00100000 00269 #define CHANGER_VOLUME_SEARCH 0x00200000 00270 #define CHANGER_VOLUME_ASSERT 0x00400000 00271 #define CHANGER_VOLUME_REPLACE 0x00800000 00272 #define CHANGER_VOLUME_UNDEFINE 0x01000000 00273 #define CHANGER_SERIAL_NUMBER_VALID 0x04000000 00274 #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000 00275 #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000 00276 #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000 00277 #define CHANGER_RESERVED_BIT 0x80000000 00278 00279 /* GET_CHANGER_PARAMETERS.Features1 constants */ 00280 #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001 00281 #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002 00282 #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004 00283 #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008 00284 #define CHANGER_SLOTS_USE_TRAYS 0x80000010 00285 #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020 00286 #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040 00287 #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080 00288 #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100 00289 #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200 00290 #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400 00291 00292 /* GET_CHANGER_PARAMETERS.MoveFrom,ExchangeFrom,PositionCapabilities constants */ 00293 #define CHANGER_TO_TRANSPORT 0x01 00294 #define CHANGER_TO_SLOT 0x02 00295 #define CHANGER_TO_IEPORT 0x04 00296 #define CHANGER_TO_DRIVE 0x08 00297 00298 /* GET_CHANGER_PARAMETERS.LockUnlockCapabilities constants */ 00299 #define LOCK_UNLOCK_IEPORT 0x01 00300 #define LOCK_UNLOCK_DOOR 0x02 00301 #define LOCK_UNLOCK_KEYPAD 0x04 00302 00303 typedef struct _GET_CHANGER_PARAMETERS { 00304 ULONG Size; 00305 USHORT NumberTransportElements; 00306 USHORT NumberStorageElements; 00307 USHORT NumberCleanerSlots; 00308 USHORT NumberIEElements; 00309 USHORT NumberDataTransferElements; 00310 USHORT NumberOfDoors; 00311 USHORT FirstSlotNumber; 00312 USHORT FirstDriveNumber; 00313 USHORT FirstTransportNumber; 00314 USHORT FirstIEPortNumber; 00315 USHORT FirstCleanerSlotAddress; 00316 USHORT MagazineSize; 00317 ULONG DriveCleanTimeout; 00318 ULONG Features0; 00319 ULONG Features1; 00320 UCHAR MoveFromTransport; 00321 UCHAR MoveFromSlot; 00322 UCHAR MoveFromIePort; 00323 UCHAR MoveFromDrive; 00324 UCHAR ExchangeFromTransport; 00325 UCHAR ExchangeFromSlot; 00326 UCHAR ExchangeFromIePort; 00327 UCHAR ExchangeFromDrive; 00328 UCHAR LockUnlockCapabilities; 00329 UCHAR PositionCapabilities; 00330 UCHAR Reserved1[2]; 00331 ULONG Reserved2[2]; 00332 } GET_CHANGER_PARAMETERS, * PGET_CHANGER_PARAMETERS; 00333 00334 typedef struct READ_ELEMENT_ADDRESS_INFO { 00335 ULONG NumberOfElements; 00336 CHANGER_ELEMENT_STATUS ElementStatus[1]; 00337 } READ_ELEMENT_ADDRESS_INFO, *PREAD_ELEMENT_ADDRESS_INFO; 00338 00339 typedef struct _TAPE_WMI_OPERATIONS { 00340 ULONG Method; 00341 ULONG DataBufferSize; 00342 PVOID DataBuffer; 00343 } TAPE_WMI_OPERATIONS, *PTAPE_WMI_OPERATIONS; 00344 00345 typedef struct _WMI_CHANGER_PROBLEM_DEVICE_ERROR { 00346 ULONG ChangerProblemType; 00347 } WMI_CHANGER_PROBLEM_DEVICE_ERROR, *PWMI_CHANGER_PROBLEM_DEVICE_ERROR; 00348 00349 #ifdef __cplusplus 00350 } 00351 #endif 00352 00353 #endif /* __NTDDCHGR_H */
Generated on Tue Jul 12 2022 19:59:54 by
1.7.2