| 1 | /*
 | 
|---|
| 2 |  * ntddchgr.h
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  * Media changer IOCTL interface.
 | 
|---|
| 5 |  *
 | 
|---|
| 6 |  * This file is part of the w32api package.
 | 
|---|
| 7 |  *
 | 
|---|
| 8 |  * Contributors:
 | 
|---|
| 9 |  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 | 
|---|
| 10 |  *
 | 
|---|
| 11 |  * THIS SOFTWARE IS NOT COPYRIGHTED
 | 
|---|
| 12 |  *
 | 
|---|
| 13 |  * This source code is offered for use in the public domain. You may
 | 
|---|
| 14 |  * use, modify or distribute it freely.
 | 
|---|
| 15 |  *
 | 
|---|
| 16 |  * This code is distributed in the hope that it will be useful but
 | 
|---|
| 17 |  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 | 
|---|
| 18 |  * DISCLAIMED. This includes but is not limited to warranties of
 | 
|---|
| 19 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
|---|
| 20 |  *
 | 
|---|
| 21 |  */
 | 
|---|
| 22 | 
 | 
|---|
| 23 | #ifndef __NTDDCHGR_H
 | 
|---|
| 24 | #define __NTDDCHGR_H
 | 
|---|
| 25 | 
 | 
|---|
| 26 | #if __GNUC__ >=3
 | 
|---|
| 27 | #pragma GCC system_header
 | 
|---|
| 28 | #endif
 | 
|---|
| 29 | 
 | 
|---|
| 30 | #ifdef __cplusplus
 | 
|---|
| 31 | extern "C" {
 | 
|---|
| 32 | #endif
 | 
|---|
| 33 | 
 | 
|---|
| 34 | #include "ntddk.h"
 | 
|---|
| 35 | #include "ntddstor.h"
 | 
|---|
| 36 | 
 | 
|---|
| 37 | #define DD_CHANGER_DEVICE_NAME            "\\Device\\Changer"
 | 
|---|
| 38 | #define DD_CHANGER_DEVICE_NAME_U          L"\\Device\\Changer"
 | 
|---|
| 39 | 
 | 
|---|
| 40 | #define IOCTL_CHANGER_BASE                FILE_DEVICE_CHANGER
 | 
|---|
| 41 | 
 | 
|---|
| 42 | #define IOCTL_CHANGER_EXCHANGE_MEDIUM  \
 | 
|---|
| 43 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 44 | 
 | 
|---|
| 45 | #define IOCTL_CHANGER_GET_ELEMENT_STATUS \
 | 
|---|
| 46 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 | 
|---|
| 47 | 
 | 
|---|
| 48 | #define IOCTL_CHANGER_GET_PARAMETERS \
 | 
|---|
| 49 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 50 | 
 | 
|---|
| 51 | #define IOCTL_CHANGER_GET_PRODUCT_DATA \
 | 
|---|
| 52 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 53 | 
 | 
|---|
| 54 | #define IOCTL_CHANGER_GET_STATUS \
 | 
|---|
| 55 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 56 | 
 | 
|---|
| 57 | #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \
 | 
|---|
| 58 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 59 | 
 | 
|---|
| 60 | #define IOCTL_CHANGER_MOVE_MEDIUM \
 | 
|---|
| 61 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 62 | 
 | 
|---|
| 63 | #define IOCTL_CHANGER_QUERY_VOLUME_TAGS \
 | 
|---|
| 64 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 | 
|---|
| 65 | 
 | 
|---|
| 66 | #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \
 | 
|---|
| 67 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 68 | 
 | 
|---|
| 69 | #define IOCTL_CHANGER_SET_ACCESS \
 | 
|---|
| 70 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 | 
|---|
| 71 | 
 | 
|---|
| 72 | #define IOCTL_CHANGER_SET_POSITION \
 | 
|---|
| 73 |   CTL_CODE(IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 74 | 
 | 
|---|
| 75 | 
 | 
|---|
| 76 | #define MAX_VOLUME_ID_SIZE                36
 | 
|---|
| 77 | #define MAX_VOLUME_TEMPLATE_SIZE          40
 | 
|---|
| 78 | 
 | 
|---|
| 79 | typedef  enum _ELEMENT_TYPE {
 | 
|---|
| 80 |   AllElements,
 | 
|---|
| 81 |   ChangerTransport,
 | 
|---|
| 82 |   ChangerSlot,
 | 
|---|
| 83 |   ChangerIEPort,
 | 
|---|
| 84 |   ChangerDrive,
 | 
|---|
| 85 |   ChangerDoor,
 | 
|---|
| 86 |   ChangerKeypad,
 | 
|---|
| 87 |   ChangerMaxElement
 | 
|---|
| 88 | } ELEMENT_TYPE, *PELEMENT_TYPE;
 | 
|---|
| 89 | 
 | 
|---|
| 90 | typedef struct _CHANGER_ELEMENT {
 | 
|---|
| 91 |   ELEMENT_TYPE  ElementType;
 | 
|---|
| 92 |   ULONG  ElementAddress;
 | 
|---|
| 93 | } CHANGER_ELEMENT, *PCHANGER_ELEMENT;
 | 
|---|
| 94 | 
 | 
|---|
| 95 | typedef struct _CHANGER_ELEMENT_LIST {
 | 
|---|
| 96 |   CHANGER_ELEMENT  Element;
 | 
|---|
| 97 |   ULONG  NumberOfElements;
 | 
|---|
| 98 | } CHANGER_ELEMENT_LIST, *PCHANGER_ELEMENT_LIST;
 | 
|---|
| 99 | 
 | 
|---|
| 100 | typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS {
 | 
|---|
| 101 |   CHANGER_ELEMENT_LIST  ElementList;
 | 
|---|
| 102 |   BOOLEAN  BarCodeScan;
 | 
|---|
| 103 | } CHANGER_INITIALIZE_ELEMENT_STATUS, *PCHANGER_INITIALIZE_ELEMENT_STATUS;
 | 
|---|
| 104 | 
 | 
|---|
| 105 | typedef struct _CHANGER_READ_ELEMENT_STATUS {
 | 
|---|
| 106 |   CHANGER_ELEMENT_LIST  ElementList;
 | 
|---|
| 107 |   BOOLEAN  VolumeTagInfo;
 | 
|---|
| 108 | } CHANGER_READ_ELEMENT_STATUS, *PCHANGER_READ_ELEMENT_STATUS;
 | 
|---|
| 109 | 
 | 
|---|
| 110 | 
 | 
|---|
| 111 | typedef struct _CHANGER_SET_POSITION {
 | 
|---|
| 112 |         CHANGER_ELEMENT  Transport;
 | 
|---|
| 113 |         CHANGER_ELEMENT  Destination;
 | 
|---|
| 114 |         BOOLEAN  Flip;
 | 
|---|
| 115 | } CHANGER_SET_POSITION, *PCHANGER_SET_POSITION;
 | 
|---|
| 116 | 
 | 
|---|
| 117 | typedef struct _CHANGER_EXCHANGE_MEDIUM {
 | 
|---|
| 118 |         CHANGER_ELEMENT  Transport;
 | 
|---|
| 119 |         CHANGER_ELEMENT  Source;
 | 
|---|
| 120 |         CHANGER_ELEMENT  Destination1;
 | 
|---|
| 121 |         CHANGER_ELEMENT  Destination2;
 | 
|---|
| 122 |         BOOLEAN  Flip1;
 | 
|---|
| 123 |         BOOLEAN  Flip2;
 | 
|---|
| 124 | } CHANGER_EXCHANGE_MEDIUM, *PCHANGER_EXCHANGE_MEDIUM;
 | 
|---|
| 125 | 
 | 
|---|
| 126 | typedef struct _CHANGER_MOVE_MEDIUM {
 | 
|---|
| 127 |   CHANGER_ELEMENT  Transport;
 | 
|---|
| 128 |   CHANGER_ELEMENT  Source;
 | 
|---|
| 129 |   CHANGER_ELEMENT  Destination;
 | 
|---|
| 130 |   BOOLEAN  Flip;
 | 
|---|
| 131 | } CHANGER_MOVE_MEDIUM, *PCHANGER_MOVE_MEDIUM;
 | 
|---|
| 132 | 
 | 
|---|
| 133 | #define VENDOR_ID_LENGTH                  8
 | 
|---|
| 134 | #define PRODUCT_ID_LENGTH                 16
 | 
|---|
| 135 | #define REVISION_LENGTH                   4
 | 
|---|
| 136 | #define SERIAL_NUMBER_LENGTH              32
 | 
|---|
| 137 | 
 | 
|---|
| 138 | typedef  struct _CHANGER_PRODUCT_DATA {
 | 
|---|
| 139 |         UCHAR  VendorId[VENDOR_ID_LENGTH];
 | 
|---|
| 140 |         UCHAR  ProductId[PRODUCT_ID_LENGTH];
 | 
|---|
| 141 |         UCHAR  Revision[REVISION_LENGTH];
 | 
|---|
| 142 |         UCHAR  SerialNumber[SERIAL_NUMBER_LENGTH];
 | 
|---|
| 143 |         UCHAR  DeviceType;
 | 
|---|
| 144 | } CHANGER_PRODUCT_DATA, *PCHANGER_PRODUCT_DATA;
 | 
|---|
| 145 | 
 | 
|---|
| 146 | /* CHANGER_SET_ACCESS.Control constants */
 | 
|---|
| 147 | #define LOCK_ELEMENT                      0
 | 
|---|
| 148 | #define UNLOCK_ELEMENT                    1
 | 
|---|
| 149 | #define EXTEND_IEPORT                     2
 | 
|---|
| 150 | #define RETRACT_IEPORT                    3
 | 
|---|
| 151 | 
 | 
|---|
| 152 | typedef struct _CHANGER_SET_ACCESS {
 | 
|---|
| 153 |   CHANGER_ELEMENT  Element;
 | 
|---|
| 154 |   ULONG  Control;
 | 
|---|
| 155 | } CHANGER_SET_ACCESS, *PCHANGER_SET_ACCESS;
 | 
|---|
| 156 | 
 | 
|---|
| 157 | 
 | 
|---|
| 158 | typedef enum _CHANGER_DEVICE_PROBLEM_TYPE {
 | 
|---|
| 159 |   DeviceProblemNone,
 | 
|---|
| 160 |   DeviceProblemHardware,
 | 
|---|
| 161 |   DeviceProblemCHMError,
 | 
|---|
| 162 |   DeviceProblemDoorOpen,
 | 
|---|
| 163 |   DeviceProblemCalibrationError,
 | 
|---|
| 164 |   DeviceProblemTargetFailure,
 | 
|---|
| 165 |   DeviceProblemCHMMoveError,
 | 
|---|
| 166 |   DeviceProblemCHMZeroError,
 | 
|---|
| 167 |   DeviceProblemCartridgeInsertError,
 | 
|---|
| 168 |   DeviceProblemPositionError,
 | 
|---|
| 169 |   DeviceProblemSensorError,
 | 
|---|
| 170 |   DeviceProblemCartridgeEjectError,
 | 
|---|
| 171 |   DeviceProblemGripperError,
 | 
|---|
| 172 |   DeviceProblemDriveError
 | 
|---|
| 173 | } CHANGER_DEVICE_PROBLEM_TYPE, *PCHANGER_DEVICE_PROBLEM_TYPE;
 | 
|---|
| 174 | 
 | 
|---|
| 175 | /* CHANGER_ELEMENT_STATUS(_EX).Flags constants */
 | 
|---|
| 176 | #define ELEMENT_STATUS_FULL               0x00000001
 | 
|---|
| 177 | #define ELEMENT_STATUS_IMPEXP             0x00000002
 | 
|---|
| 178 | #define ELEMENT_STATUS_EXCEPT             0x00000004
 | 
|---|
| 179 | #define ELEMENT_STATUS_ACCESS             0x00000008
 | 
|---|
| 180 | #define ELEMENT_STATUS_EXENAB             0x00000010
 | 
|---|
| 181 | #define ELEMENT_STATUS_INENAB             0x00000020
 | 
|---|
| 182 | #define ELEMENT_STATUS_PRODUCT_DATA       0x00000040
 | 
|---|
| 183 | #define ELEMENT_STATUS_LUN_VALID          0x00001000
 | 
|---|
| 184 | #define ELEMENT_STATUS_ID_VALID           0x00002000
 | 
|---|
| 185 | #define ELEMENT_STATUS_NOT_BUS            0x00008000
 | 
|---|
| 186 | #define ELEMENT_STATUS_INVERT             0x00400000
 | 
|---|
| 187 | #define ELEMENT_STATUS_SVALID             0x00800000
 | 
|---|
| 188 | #define ELEMENT_STATUS_PVOLTAG            0x10000000
 | 
|---|
| 189 | #define ELEMENT_STATUS_AVOLTAG            0x20000000
 | 
|---|
| 190 | 
 | 
|---|
| 191 | /* CHANGER_ELEMENT_STATUS(_EX).ExceptionCode constants */
 | 
|---|
| 192 | #define ERROR_LABEL_UNREADABLE            0x00000001
 | 
|---|
| 193 | #define ERROR_LABEL_QUESTIONABLE          0x00000002
 | 
|---|
| 194 | #define ERROR_SLOT_NOT_PRESENT            0x00000004
 | 
|---|
| 195 | #define ERROR_DRIVE_NOT_INSTALLED         0x00000008
 | 
|---|
| 196 | #define ERROR_TRAY_MALFUNCTION            0x00000010
 | 
|---|
| 197 | #define ERROR_INIT_STATUS_NEEDED          0x00000011
 | 
|---|
| 198 | #define ERROR_UNHANDLED_ERROR             0xFFFFFFFF
 | 
|---|
| 199 | 
 | 
|---|
| 200 | typedef struct _CHANGER_ELEMENT_STATUS {
 | 
|---|
| 201 |   CHANGER_ELEMENT  Element;
 | 
|---|
| 202 |   CHANGER_ELEMENT  SrcElementAddress;
 | 
|---|
| 203 |   ULONG  Flags;
 | 
|---|
| 204 |   ULONG  ExceptionCode;
 | 
|---|
| 205 |   UCHAR  TargetId;
 | 
|---|
| 206 |   UCHAR  Lun;
 | 
|---|
| 207 |   USHORT  Reserved;
 | 
|---|
| 208 |   UCHAR  PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
 | 
|---|
| 209 |   UCHAR  AlternateVolumeID[MAX_VOLUME_ID_SIZE];
 | 
|---|
| 210 | } CHANGER_ELEMENT_STATUS, *PCHANGER_ELEMENT_STATUS;
 | 
|---|
| 211 | 
 | 
|---|
| 212 | typedef  struct _CHANGER_ELEMENT_STATUS_EX {
 | 
|---|
| 213 |   CHANGER_ELEMENT  Element;
 | 
|---|
| 214 |   CHANGER_ELEMENT  SrcElementAddress;
 | 
|---|
| 215 |   ULONG  Flags;
 | 
|---|
| 216 |   ULONG  ExceptionCode;
 | 
|---|
| 217 |   UCHAR  TargetId;
 | 
|---|
| 218 |   UCHAR  Lun;
 | 
|---|
| 219 |   USHORT  Reserved;
 | 
|---|
| 220 |   UCHAR  PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
 | 
|---|
| 221 |   UCHAR  AlternateVolumeID[MAX_VOLUME_ID_SIZE];
 | 
|---|
| 222 |   UCHAR  VendorIdentification[VENDOR_ID_LENGTH];
 | 
|---|
| 223 |   UCHAR  ProductIdentification[PRODUCT_ID_LENGTH];
 | 
|---|
| 224 |   UCHAR  SerialNumber[SERIAL_NUMBER_LENGTH];
 | 
|---|
| 225 | } CHANGER_ELEMENT_STATUS_EX, *PCHANGER_ELEMENT_STATUS_EX;
 | 
|---|
| 226 | 
 | 
|---|
| 227 | /* CHANGER_SEND_VOLUME_TAG_INFORMATION.ActionCode constants */
 | 
|---|
| 228 | #define SEARCH_ALL                        0x0
 | 
|---|
| 229 | #define SEARCH_PRIMARY                    0x1
 | 
|---|
| 230 | #define SEARCH_ALTERNATE                  0x2
 | 
|---|
| 231 | #define SEARCH_ALL_NO_SEQ                 0x4
 | 
|---|
| 232 | #define SEARCH_PRI_NO_SEQ                 0x5
 | 
|---|
| 233 | #define SEARCH_ALT_NO_SEQ                 0x6
 | 
|---|
| 234 | #define ASSERT_PRIMARY                    0x8
 | 
|---|
| 235 | #define ASSERT_ALTERNATE                  0x9
 | 
|---|
| 236 | #define REPLACE_PRIMARY                   0xA
 | 
|---|
| 237 | #define REPLACE_ALTERNATE                 0xB
 | 
|---|
| 238 | #define UNDEFINE_PRIMARY                  0xC
 | 
|---|
| 239 | #define UNDEFINE_ALTERNATE                0xD
 | 
|---|
| 240 | 
 | 
|---|
| 241 | typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION {
 | 
|---|
| 242 |   CHANGER_ELEMENT StartingElement;
 | 
|---|
| 243 |   ULONG  ActionCode;
 | 
|---|
| 244 |   UCHAR  VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE];
 | 
|---|
| 245 | } CHANGER_SEND_VOLUME_TAG_INFORMATION, *PCHANGER_SEND_VOLUME_TAG_INFORMATION;
 | 
|---|
| 246 | 
 | 
|---|
| 247 | /* GET_CHANGER_PARAMETERS.Features0 constants */
 | 
|---|
| 248 | #define CHANGER_BAR_CODE_SCANNER_INSTALLED  0x00000001
 | 
|---|
| 249 | #define CHANGER_INIT_ELEM_STAT_WITH_RANGE   0x00000002
 | 
|---|
| 250 | #define CHANGER_CLOSE_IEPORT                0x00000004
 | 
|---|
| 251 | #define CHANGER_OPEN_IEPORT                 0x00000008
 | 
|---|
| 252 | #define CHANGER_STATUS_NON_VOLATILE         0x00000010
 | 
|---|
| 253 | #define CHANGER_EXCHANGE_MEDIA              0x00000020
 | 
|---|
| 254 | #define CHANGER_CLEANER_SLOT                0x00000040
 | 
|---|
| 255 | #define CHANGER_LOCK_UNLOCK                 0x00000080
 | 
|---|
| 256 | #define CHANGER_CARTRIDGE_MAGAZINE          0x00000100
 | 
|---|
| 257 | #define CHANGER_MEDIUM_FLIP                 0x00000200
 | 
|---|
| 258 | #define CHANGER_POSITION_TO_ELEMENT         0x00000400
 | 
|---|
| 259 | #define CHANGER_REPORT_IEPORT_STATE         0x00000800
 | 
|---|
| 260 | #define CHANGER_STORAGE_DRIVE               0x00001000
 | 
|---|
| 261 | #define CHANGER_STORAGE_IEPORT              0x00002000
 | 
|---|
| 262 | #define CHANGER_STORAGE_SLOT                0x00004000
 | 
|---|
| 263 | #define CHANGER_STORAGE_TRANSPORT           0x00008000
 | 
|---|
| 264 | #define CHANGER_DRIVE_CLEANING_REQUIRED     0x00010000
 | 
|---|
| 265 | #define CHANGER_PREDISMOUNT_EJECT_REQUIRED  0x00020000
 | 
|---|
| 266 | #define CHANGER_CLEANER_ACCESS_NOT_VALID    0x00040000
 | 
|---|
| 267 | #define CHANGER_PREMOUNT_EJECT_REQUIRED     0x00080000
 | 
|---|
| 268 | #define CHANGER_VOLUME_IDENTIFICATION       0x00100000
 | 
|---|
| 269 | #define CHANGER_VOLUME_SEARCH               0x00200000
 | 
|---|
| 270 | #define CHANGER_VOLUME_ASSERT               0x00400000
 | 
|---|
| 271 | #define CHANGER_VOLUME_REPLACE              0x00800000
 | 
|---|
| 272 | #define CHANGER_VOLUME_UNDEFINE             0x01000000
 | 
|---|
| 273 | #define CHANGER_SERIAL_NUMBER_VALID         0x04000000
 | 
|---|
| 274 | #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000
 | 
|---|
| 275 | #define CHANGER_KEYPAD_ENABLE_DISABLE       0x10000000
 | 
|---|
| 276 | #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS  0x20000000
 | 
|---|
| 277 | #define CHANGER_RESERVED_BIT                0x80000000
 | 
|---|
| 278 | 
 | 
|---|
| 279 | /* GET_CHANGER_PARAMETERS.Features1 constants */
 | 
|---|
| 280 | #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT   0x80000001
 | 
|---|
| 281 | #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE  0x80000002
 | 
|---|
| 282 | #define CHANGER_CLEANER_AUTODISMOUNT        0x80000004
 | 
|---|
| 283 | #define CHANGER_TRUE_EXCHANGE_CAPABLE       0x80000008
 | 
|---|
| 284 | #define CHANGER_SLOTS_USE_TRAYS             0x80000010
 | 
|---|
| 285 | #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR  0x80000020
 | 
|---|
| 286 | #define CHANGER_CLEANER_OPS_NOT_SUPPORTED   0x80000040
 | 
|---|
| 287 | #define CHANGER_IEPORT_USER_CONTROL_OPEN    0x80000080
 | 
|---|
| 288 | #define CHANGER_IEPORT_USER_CONTROL_CLOSE   0x80000100
 | 
|---|
| 289 | #define CHANGER_MOVE_EXTENDS_IEPORT         0x80000200
 | 
|---|
| 290 | #define CHANGER_MOVE_RETRACTS_IEPORT        0x80000400
 | 
|---|
| 291 | 
 | 
|---|
| 292 | /* GET_CHANGER_PARAMETERS.MoveFrom,ExchangeFrom,PositionCapabilities constants */
 | 
|---|
| 293 | #define CHANGER_TO_TRANSPORT              0x01
 | 
|---|
| 294 | #define CHANGER_TO_SLOT                   0x02
 | 
|---|
| 295 | #define CHANGER_TO_IEPORT                 0x04
 | 
|---|
| 296 | #define CHANGER_TO_DRIVE                  0x08
 | 
|---|
| 297 | 
 | 
|---|
| 298 | /* GET_CHANGER_PARAMETERS.LockUnlockCapabilities constants */
 | 
|---|
| 299 | #define LOCK_UNLOCK_IEPORT                0x01
 | 
|---|
| 300 | #define LOCK_UNLOCK_DOOR                  0x02
 | 
|---|
| 301 | #define LOCK_UNLOCK_KEYPAD                0x04
 | 
|---|
| 302 | 
 | 
|---|
| 303 | typedef struct _GET_CHANGER_PARAMETERS {
 | 
|---|
| 304 |   ULONG  Size;
 | 
|---|
| 305 |   USHORT  NumberTransportElements;
 | 
|---|
| 306 |   USHORT  NumberStorageElements;
 | 
|---|
| 307 |   USHORT  NumberCleanerSlots;
 | 
|---|
| 308 |   USHORT  NumberIEElements;
 | 
|---|
| 309 |   USHORT  NumberDataTransferElements;
 | 
|---|
| 310 |   USHORT  NumberOfDoors;
 | 
|---|
| 311 |   USHORT  FirstSlotNumber;
 | 
|---|
| 312 |   USHORT  FirstDriveNumber;
 | 
|---|
| 313 |   USHORT  FirstTransportNumber;
 | 
|---|
| 314 |   USHORT  FirstIEPortNumber;
 | 
|---|
| 315 |   USHORT  FirstCleanerSlotAddress;
 | 
|---|
| 316 |   USHORT  MagazineSize;
 | 
|---|
| 317 |   ULONG  DriveCleanTimeout;
 | 
|---|
| 318 |   ULONG  Features0;
 | 
|---|
| 319 |   ULONG  Features1;
 | 
|---|
| 320 |   UCHAR  MoveFromTransport;
 | 
|---|
| 321 |   UCHAR  MoveFromSlot;
 | 
|---|
| 322 |   UCHAR  MoveFromIePort;
 | 
|---|
| 323 |   UCHAR  MoveFromDrive;
 | 
|---|
| 324 |   UCHAR  ExchangeFromTransport;
 | 
|---|
| 325 |   UCHAR  ExchangeFromSlot;
 | 
|---|
| 326 |   UCHAR  ExchangeFromIePort;
 | 
|---|
| 327 |   UCHAR  ExchangeFromDrive;
 | 
|---|
| 328 |   UCHAR  LockUnlockCapabilities;
 | 
|---|
| 329 |   UCHAR  PositionCapabilities;
 | 
|---|
| 330 |   UCHAR  Reserved1[2];
 | 
|---|
| 331 |   ULONG  Reserved2[2];
 | 
|---|
| 332 | } GET_CHANGER_PARAMETERS, * PGET_CHANGER_PARAMETERS;
 | 
|---|
| 333 | 
 | 
|---|
| 334 | typedef struct READ_ELEMENT_ADDRESS_INFO {
 | 
|---|
| 335 |   ULONG  NumberOfElements;
 | 
|---|
| 336 |   CHANGER_ELEMENT_STATUS  ElementStatus[1];
 | 
|---|
| 337 | } READ_ELEMENT_ADDRESS_INFO, *PREAD_ELEMENT_ADDRESS_INFO;
 | 
|---|
| 338 | 
 | 
|---|
| 339 | typedef struct _TAPE_WMI_OPERATIONS {
 | 
|---|
| 340 |   ULONG  Method;
 | 
|---|
| 341 |   ULONG  DataBufferSize;
 | 
|---|
| 342 |   PVOID  DataBuffer;
 | 
|---|
| 343 | } TAPE_WMI_OPERATIONS, *PTAPE_WMI_OPERATIONS;
 | 
|---|
| 344 | 
 | 
|---|
| 345 | typedef struct _WMI_CHANGER_PROBLEM_DEVICE_ERROR {
 | 
|---|
| 346 |   ULONG  ChangerProblemType;
 | 
|---|
| 347 | } WMI_CHANGER_PROBLEM_DEVICE_ERROR, *PWMI_CHANGER_PROBLEM_DEVICE_ERROR;
 | 
|---|
| 348 | 
 | 
|---|
| 349 | #ifdef __cplusplus
 | 
|---|
| 350 | }
 | 
|---|
| 351 | #endif
 | 
|---|
| 352 | 
 | 
|---|
| 353 | #endif /* __NTDDCHGR_H */
 | 
|---|