home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / ntddchgr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  12.0 KB  |  359 lines

  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. #pragma pack(push,4)
  35.  
  36. #include "ntddk.h"
  37. #include "ntddstor.h"
  38.  
  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. #pragma pack(pop)
  353.  
  354. #ifdef __cplusplus
  355. }
  356. #endif
  357.  
  358. #endif /* __NTDDCHGR_H */
  359.