OSDN Git Service

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