Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
 1.7.2