holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/ntddchgr.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     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 */