Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntddchgr.h
Go to the documentation of this file.
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 #pragma once 00024 00025 #include "ntddstor.h" 00026 00027 #ifdef __cplusplus 00028 extern "C" { 00029 #endif 00030 00031 #define DD_CHANGER_DEVICE_NAME "\\Device\\Changer" 00032 #define DD_CHANGER_DEVICE_NAME_U L"\\Device\\Changer" 00033 00034 #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER 00035 00036 #define IOCTL_CHANGER_EXCHANGE_MEDIUM \ 00037 CTL_CODE(IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) 00038 00039 #define IOCTL_CHANGER_GET_ELEMENT_STATUS \ 00040 CTL_CODE(IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00041 00042 #define IOCTL_CHANGER_GET_PARAMETERS \ 00043 CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS) 00044 00045 #define IOCTL_CHANGER_GET_PRODUCT_DATA \ 00046 CTL_CODE(IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) 00047 00048 #define IOCTL_CHANGER_GET_STATUS \ 00049 CTL_CODE(IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00050 00051 #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \ 00052 CTL_CODE(IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS) 00053 00054 #define IOCTL_CHANGER_MOVE_MEDIUM \ 00055 CTL_CODE(IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS) 00056 00057 #define IOCTL_CHANGER_QUERY_VOLUME_TAGS \ 00058 CTL_CODE(IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00059 00060 #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \ 00061 CTL_CODE(IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS) 00062 00063 #define IOCTL_CHANGER_SET_ACCESS \ 00064 CTL_CODE(IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 00065 00066 #define IOCTL_CHANGER_SET_POSITION \ 00067 CTL_CODE(IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) 00068 00069 #define MAX_VOLUME_ID_SIZE 36 00070 #define MAX_VOLUME_TEMPLATE_SIZE 40 00071 00072 #define VENDOR_ID_LENGTH 8 00073 #define PRODUCT_ID_LENGTH 16 00074 #define REVISION_LENGTH 4 00075 #define SERIAL_NUMBER_LENGTH 32 00076 00077 /* GET_CHANGER_PARAMETERS.Features0 constants */ 00078 #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001 00079 #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002 00080 #define CHANGER_CLOSE_IEPORT 0x00000004 00081 #define CHANGER_OPEN_IEPORT 0x00000008 00082 #define CHANGER_STATUS_NON_VOLATILE 0x00000010 00083 #define CHANGER_EXCHANGE_MEDIA 0x00000020 00084 #define CHANGER_CLEANER_SLOT 0x00000040 00085 #define CHANGER_LOCK_UNLOCK 0x00000080 00086 #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100 00087 #define CHANGER_MEDIUM_FLIP 0x00000200 00088 #define CHANGER_POSITION_TO_ELEMENT 0x00000400 00089 #define CHANGER_REPORT_IEPORT_STATE 0x00000800 00090 #define CHANGER_STORAGE_DRIVE 0x00001000 00091 #define CHANGER_STORAGE_IEPORT 0x00002000 00092 #define CHANGER_STORAGE_SLOT 0x00004000 00093 #define CHANGER_STORAGE_TRANSPORT 0x00008000 00094 #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000 00095 #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000 00096 #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000 00097 #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000 00098 #define CHANGER_VOLUME_IDENTIFICATION 0x00100000 00099 #define CHANGER_VOLUME_SEARCH 0x00200000 00100 #define CHANGER_VOLUME_ASSERT 0x00400000 00101 #define CHANGER_VOLUME_REPLACE 0x00800000 00102 #define CHANGER_VOLUME_UNDEFINE 0x01000000 00103 #define CHANGER_SERIAL_NUMBER_VALID 0x04000000 00104 #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000 00105 #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000 00106 #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000 00107 #define CHANGER_RESERVED_BIT 0x80000000 00108 00109 /* GET_CHANGER_PARAMETERS.Features1 constants */ 00110 #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001 00111 #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002 00112 #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004 00113 #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008 00114 #define CHANGER_SLOTS_USE_TRAYS 0x80000010 00115 #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020 00116 #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040 00117 #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080 00118 #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100 00119 #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200 00120 #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400 00121 00122 /* GET_CHANGER_PARAMETERS.MoveFrom,ExchangeFrom,PositionCapabilities constants */ 00123 #define CHANGER_TO_TRANSPORT 0x01 00124 #define CHANGER_TO_SLOT 0x02 00125 #define CHANGER_TO_IEPORT 0x04 00126 #define CHANGER_TO_DRIVE 0x08 00127 00128 /* GET_CHANGER_PARAMETERS.LockUnlockCapabilities constants */ 00129 #define LOCK_UNLOCK_IEPORT 0x01 00130 #define LOCK_UNLOCK_DOOR 0x02 00131 #define LOCK_UNLOCK_KEYPAD 0x04 00132 00133 /* CHANGER_SET_ACCESS.Control constants */ 00134 #define LOCK_ELEMENT 0 00135 #define UNLOCK_ELEMENT 1 00136 #define EXTEND_IEPORT 2 00137 #define RETRACT_IEPORT 3 00138 00139 /* CHANGER_ELEMENT_STATUS(_EX).Flags constants */ 00140 #define ELEMENT_STATUS_FULL 0x00000001 00141 #define ELEMENT_STATUS_IMPEXP 0x00000002 00142 #define ELEMENT_STATUS_EXCEPT 0x00000004 00143 #define ELEMENT_STATUS_ACCESS 0x00000008 00144 #define ELEMENT_STATUS_EXENAB 0x00000010 00145 #define ELEMENT_STATUS_INENAB 0x00000020 00146 #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040 00147 #define ELEMENT_STATUS_LUN_VALID 0x00001000 00148 #define ELEMENT_STATUS_ID_VALID 0x00002000 00149 #define ELEMENT_STATUS_NOT_BUS 0x00008000 00150 #define ELEMENT_STATUS_INVERT 0x00400000 00151 #define ELEMENT_STATUS_SVALID 0x00800000 00152 #define ELEMENT_STATUS_PVOLTAG 0x10000000 00153 #define ELEMENT_STATUS_AVOLTAG 0x20000000 00154 00155 /* CHANGER_ELEMENT_STATUS(_EX).ExceptionCode constants */ 00156 #define ERROR_LABEL_UNREADABLE 0x00000001 00157 #define ERROR_LABEL_QUESTIONABLE 0x00000002 00158 #define ERROR_SLOT_NOT_PRESENT 0x00000004 00159 #define ERROR_DRIVE_NOT_INSTALLED 0x00000008 00160 #define ERROR_TRAY_MALFUNCTION 0x00000010 00161 #define ERROR_INIT_STATUS_NEEDED 0x00000011 00162 #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF 00163 00164 /* CHANGER_SEND_VOLUME_TAG_INFORMATION.ActionCode constants */ 00165 #define SEARCH_ALL 0x0 00166 #define SEARCH_PRIMARY 0x1 00167 #define SEARCH_ALTERNATE 0x2 00168 #define SEARCH_ALL_NO_SEQ 0x4 00169 #define SEARCH_PRI_NO_SEQ 0x5 00170 #define SEARCH_ALT_NO_SEQ 0x6 00171 #define ASSERT_PRIMARY 0x8 00172 #define ASSERT_ALTERNATE 0x9 00173 #define REPLACE_PRIMARY 0xA 00174 #define REPLACE_ALTERNATE 0xB 00175 #define UNDEFINE_PRIMARY 0xC 00176 #define UNDEFINE_ALTERNATE 0xD 00177 00178 typedef enum _ELEMENT_TYPE { 00179 AllElements, 00180 ChangerTransport, 00181 ChangerSlot, 00182 ChangerIEPort, 00183 ChangerDrive, 00184 ChangerDoor, 00185 ChangerKeypad, 00186 ChangerMaxElement 00187 } ELEMENT_TYPE, *PELEMENT_TYPE; 00188 00189 typedef struct _CHANGER_ELEMENT { 00190 ELEMENT_TYPE ElementType; 00191 ULONG ElementAddress; 00192 } CHANGER_ELEMENT, *PCHANGER_ELEMENT; 00193 00194 typedef struct _CHANGER_ELEMENT_LIST { 00195 CHANGER_ELEMENT Element; 00196 ULONG NumberOfElements; 00197 } CHANGER_ELEMENT_LIST, *PCHANGER_ELEMENT_LIST; 00198 00199 typedef struct _GET_CHANGER_PARAMETERS { 00200 ULONG Size; 00201 USHORT NumberTransportElements; 00202 USHORT NumberStorageElements; 00203 USHORT NumberCleanerSlots; 00204 USHORT NumberIEElements; 00205 USHORT NumberDataTransferElements; 00206 USHORT NumberOfDoors; 00207 USHORT FirstSlotNumber; 00208 USHORT FirstDriveNumber; 00209 USHORT FirstTransportNumber; 00210 USHORT FirstIEPortNumber; 00211 USHORT FirstCleanerSlotAddress; 00212 USHORT MagazineSize; 00213 ULONG DriveCleanTimeout; 00214 ULONG Features0; 00215 ULONG Features1; 00216 UCHAR MoveFromTransport; 00217 UCHAR MoveFromSlot; 00218 UCHAR MoveFromIePort; 00219 UCHAR MoveFromDrive; 00220 UCHAR ExchangeFromTransport; 00221 UCHAR ExchangeFromSlot; 00222 UCHAR ExchangeFromIePort; 00223 UCHAR ExchangeFromDrive; 00224 UCHAR LockUnlockCapabilities; 00225 UCHAR PositionCapabilities; 00226 UCHAR Reserved1[2]; 00227 ULONG Reserved2[2]; 00228 } GET_CHANGER_PARAMETERS, * PGET_CHANGER_PARAMETERS; 00229 00230 typedef struct _CHANGER_PRODUCT_DATA { 00231 UCHAR VendorId[VENDOR_ID_LENGTH]; 00232 UCHAR ProductId[PRODUCT_ID_LENGTH]; 00233 UCHAR Revision[REVISION_LENGTH]; 00234 UCHAR SerialNumber[SERIAL_NUMBER_LENGTH]; 00235 UCHAR DeviceType; 00236 } CHANGER_PRODUCT_DATA, *PCHANGER_PRODUCT_DATA; 00237 00238 typedef struct _CHANGER_SET_ACCESS { 00239 CHANGER_ELEMENT Element; 00240 ULONG Control; 00241 } CHANGER_SET_ACCESS, *PCHANGER_SET_ACCESS; 00242 00243 typedef struct _CHANGER_READ_ELEMENT_STATUS { 00244 CHANGER_ELEMENT_LIST ElementList; 00245 BOOLEAN VolumeTagInfo; 00246 } CHANGER_READ_ELEMENT_STATUS, *PCHANGER_READ_ELEMENT_STATUS; 00247 00248 typedef struct _CHANGER_ELEMENT_STATUS { 00249 CHANGER_ELEMENT Element; 00250 CHANGER_ELEMENT SrcElementAddress; 00251 ULONG Flags; 00252 ULONG ExceptionCode; 00253 UCHAR TargetId; 00254 UCHAR Lun; 00255 USHORT Reserved; 00256 UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 00257 UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 00258 } CHANGER_ELEMENT_STATUS, *PCHANGER_ELEMENT_STATUS; 00259 00260 typedef struct _CHANGER_ELEMENT_STATUS_EX { 00261 CHANGER_ELEMENT Element; 00262 CHANGER_ELEMENT SrcElementAddress; 00263 ULONG Flags; 00264 ULONG ExceptionCode; 00265 UCHAR TargetId; 00266 UCHAR Lun; 00267 USHORT Reserved; 00268 UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 00269 UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 00270 UCHAR VendorIdentification[VENDOR_ID_LENGTH]; 00271 UCHAR ProductIdentification[PRODUCT_ID_LENGTH]; 00272 UCHAR SerialNumber[SERIAL_NUMBER_LENGTH]; 00273 } CHANGER_ELEMENT_STATUS_EX, *PCHANGER_ELEMENT_STATUS_EX; 00274 00275 typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { 00276 CHANGER_ELEMENT_LIST ElementList; 00277 BOOLEAN BarCodeScan; 00278 } CHANGER_INITIALIZE_ELEMENT_STATUS, *PCHANGER_INITIALIZE_ELEMENT_STATUS; 00279 00280 typedef struct _CHANGER_SET_POSITION { 00281 CHANGER_ELEMENT Transport; 00282 CHANGER_ELEMENT Destination; 00283 BOOLEAN Flip; 00284 } CHANGER_SET_POSITION, *PCHANGER_SET_POSITION; 00285 00286 typedef struct _CHANGER_EXCHANGE_MEDIUM { 00287 CHANGER_ELEMENT Transport; 00288 CHANGER_ELEMENT Source; 00289 CHANGER_ELEMENT Destination1; 00290 CHANGER_ELEMENT Destination2; 00291 BOOLEAN Flip1; 00292 BOOLEAN Flip2; 00293 } CHANGER_EXCHANGE_MEDIUM, *PCHANGER_EXCHANGE_MEDIUM; 00294 00295 typedef struct _CHANGER_MOVE_MEDIUM { 00296 CHANGER_ELEMENT Transport; 00297 CHANGER_ELEMENT Source; 00298 CHANGER_ELEMENT Destination; 00299 BOOLEAN Flip; 00300 } CHANGER_MOVE_MEDIUM, *PCHANGER_MOVE_MEDIUM; 00301 00302 typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { 00303 CHANGER_ELEMENT StartingElement; 00304 ULONG ActionCode; 00305 UCHAR VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; 00306 } CHANGER_SEND_VOLUME_TAG_INFORMATION, *PCHANGER_SEND_VOLUME_TAG_INFORMATION; 00307 00308 typedef struct READ_ELEMENT_ADDRESS_INFO { 00309 ULONG NumberOfElements; 00310 CHANGER_ELEMENT_STATUS ElementStatus[1]; 00311 } READ_ELEMENT_ADDRESS_INFO, *PREAD_ELEMENT_ADDRESS_INFO; 00312 00313 typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { 00314 DeviceProblemNone, 00315 DeviceProblemHardware, 00316 DeviceProblemCHMError, 00317 DeviceProblemDoorOpen, 00318 DeviceProblemCalibrationError, 00319 DeviceProblemTargetFailure, 00320 DeviceProblemCHMMoveError, 00321 DeviceProblemCHMZeroError, 00322 DeviceProblemCartridgeInsertError, 00323 DeviceProblemPositionError, 00324 DeviceProblemSensorError, 00325 DeviceProblemCartridgeEjectError, 00326 DeviceProblemGripperError, 00327 DeviceProblemDriveError 00328 } CHANGER_DEVICE_PROBLEM_TYPE, *PCHANGER_DEVICE_PROBLEM_TYPE; 00329 00330 #ifdef __cplusplus 00331 } 00332 #endif Generated on Sat May 26 2012 04:30:51 for ReactOS by
1.7.6.1
|