Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntddchgr.h Source File

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