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

  1. /*
  2.  * ntddcdrm.h
  3.  *
  4.  * CDROM 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 __NTDDCDRM_H
  24. #define __NTDDCDRM_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 IOCTL_CDROM_BASE                  FILE_DEVICE_CD_ROM
  41.  
  42. #define IOCTL_CDROM_CHECK_VERIFY \
  43.   CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
  44.  
  45. #define IOCTL_CDROM_FIND_NEW_DEVICES \
  46.   CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
  47.  
  48. #define IOCTL_CDROM_GET_CONTROL \
  49.   CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
  50.  
  51. #define IOCTL_CDROM_GET_DRIVE_GEOMETRY \
  52.   CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
  53.  
  54. #define IOCTL_CDROM_GET_LAST_SESSION \
  55.   CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
  56.  
  57. #define IOCTL_CDROM_GET_VOLUME \
  58.   CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
  59.  
  60. #define IOCTL_CDROM_PAUSE_AUDIO \
  61.   CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
  62.  
  63. #define IOCTL_CDROM_PLAY_AUDIO_MSF \
  64.   CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
  65.  
  66. #define IOCTL_CDROM_RAW_READ \
  67.   CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT,  FILE_READ_ACCESS)
  68.  
  69. #define IOCTL_CDROM_READ_Q_CHANNEL \
  70.   CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
  71.  
  72. #define IOCTL_CDROM_READ_TOC \
  73.   CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
  74.  
  75. #define IOCTL_CDROM_READ_TOC_EX \
  76.   CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
  77.  
  78. #define IOCTL_CDROM_RESUME_AUDIO \
  79.   CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
  80.  
  81. #define IOCTL_CDROM_SEEK_AUDIO_MSF \
  82.   CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
  83.  
  84. #define IOCTL_CDROM_SET_VOLUME \
  85.   CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
  86.  
  87. #define IOCTL_CDROM_SIMBAD \
  88.   CTL_CODE(IOCTL_CDROM_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS)
  89.  
  90. #define IOCTL_CDROM_STOP_AUDIO \
  91.   CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
  92.  
  93.  
  94. #define MAXIMUM_NUMBER_TRACKS             100
  95. #define MAXIMUM_CDROM_SIZE                804
  96. #define MINIMUM_CDROM_READ_TOC_EX_SIZE    2
  97.  
  98. typedef struct _TRACK_DATA {
  99.   UCHAR  Reserved;
  100.   UCHAR  Control : 4;
  101.   UCHAR  Adr : 4;
  102.   UCHAR  TrackNumber;
  103.   UCHAR  Reserved1;
  104.   UCHAR  Address[4];
  105. } TRACK_DATA, *PTRACK_DATA;
  106.  
  107. /* CDROM_DISK_DATA.DiskData flags */
  108. #define CDROM_DISK_AUDIO_TRACK            0x00000001
  109. #define CDROM_DISK_DATA_TRACK             0x00000002
  110.  
  111. typedef struct _CDROM_DISK_DATA {
  112.   ULONG  DiskData;
  113. } CDROM_DISK_DATA, *PCDROM_DISK_DATA;
  114.  
  115. typedef struct _CDROM_PLAY_AUDIO_MSF {
  116.   UCHAR  StartingM;
  117.   UCHAR  StartingS;
  118.   UCHAR  StartingF;
  119.   UCHAR  EndingM;
  120.   UCHAR  EndingS;
  121.   UCHAR  EndingF;
  122. } CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
  123.  
  124. /* CDROM_READ_TOC_EX.Format constants */
  125. #define CDROM_READ_TOC_EX_FORMAT_TOC      0x00
  126. #define CDROM_READ_TOC_EX_FORMAT_SESSION  0x01
  127. #define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02
  128. #define CDROM_READ_TOC_EX_FORMAT_PMA      0x03
  129. #define CDROM_READ_TOC_EX_FORMAT_ATIP     0x04
  130. #define CDROM_READ_TOC_EX_FORMAT_CDTEXT   0x05
  131.  
  132. typedef struct _CDROM_READ_TOC_EX {
  133.   UCHAR  Format : 4;
  134.   UCHAR  Reserved1 : 3; 
  135.   UCHAR  Msf : 1;
  136.   UCHAR  SessionTrack;
  137.   UCHAR  Reserved2;
  138.   UCHAR  Reserved3;
  139. } CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX;
  140.  
  141. typedef struct _CDROM_SEEK_AUDIO_MSF {
  142.   UCHAR  M;
  143.   UCHAR  S;
  144.   UCHAR  F;
  145. } CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
  146.  
  147. /* CDROM_SUB_Q_DATA_FORMAT.Format constants */
  148. #define IOCTL_CDROM_SUB_Q_CHANNEL         0x00
  149. #define IOCTL_CDROM_CURRENT_POSITION      0x01
  150. #define IOCTL_CDROM_MEDIA_CATALOG         0x02
  151. #define IOCTL_CDROM_TRACK_ISRC            0x03
  152.  
  153. typedef struct _CDROM_SUB_Q_DATA_FORMAT {
  154.   UCHAR Format;
  155.   UCHAR Track;
  156. } CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
  157.  
  158. typedef struct _CDROM_TOC {
  159.   UCHAR  Length[2];
  160.   UCHAR  FirstTrack;
  161.   UCHAR  LastTrack;
  162.   TRACK_DATA  TrackData[MAXIMUM_NUMBER_TRACKS];
  163. } CDROM_TOC, *PCDROM_TOC;
  164.  
  165. #define CDROM_TOC_SIZE sizeof(CDROM_TOC)
  166.  
  167. typedef struct _CDROM_TOC_ATIP_DATA_BLOCK {
  168.   UCHAR  CdrwReferenceSpeed : 3;
  169.   UCHAR  Reserved3 : 1;
  170.   UCHAR  WritePower : 3;
  171.   UCHAR  True1 : 1;
  172.   UCHAR  Reserved4 : 6;
  173.   UCHAR  UnrestrictedUse : 1;
  174.   UCHAR  Reserved5 : 1;
  175.   UCHAR  A3Valid : 1;
  176.   UCHAR  A2Valid : 1;
  177.   UCHAR  A1Valid : 1;
  178.   UCHAR  Reserved6 : 3;
  179.   UCHAR  IsCdrw : 1;
  180.   UCHAR  True2 : 1;
  181.   UCHAR  Reserved7;
  182.   UCHAR  LeadInMsf[3];
  183.   UCHAR  Reserved8;
  184.   UCHAR  LeadOutMsf[3];
  185.   UCHAR  Reserved9;
  186.   UCHAR  A1Values[3];
  187.   UCHAR  Reserved10;
  188.   UCHAR  A2Values[3];
  189.   UCHAR  Reserved11;
  190.   UCHAR  A3Values[3];
  191.   UCHAR  Reserved12;
  192. } CDROM_TOC_ATIP_DATA_BLOCK, *PCDROM_TOC_ATIP_DATA_BLOCK;
  193.  
  194. typedef struct _CDROM_TOC_ATIP_DATA {
  195.   UCHAR  Length[2];
  196.   UCHAR  Reserved1;
  197.   UCHAR  Reserved2;
  198.   CDROM_TOC_ATIP_DATA_BLOCK  Descriptors[0];
  199. } CDROM_TOC_ATIP_DATA, *PCDROM_TOC_ATIP_DATA;
  200.  
  201. /* CDROM_TOC_CD_TEXT_DATA_BLOCK.PackType constants */
  202. #define CDROM_CD_TEXT_PACK_ALBUM_NAME 0x80
  203. #define CDROM_CD_TEXT_PACK_PERFORMER  0x81
  204. #define CDROM_CD_TEXT_PACK_SONGWRITER 0x82
  205. #define CDROM_CD_TEXT_PACK_COMPOSER   0x83
  206. #define CDROM_CD_TEXT_PACK_ARRANGER   0x84
  207. #define CDROM_CD_TEXT_PACK_MESSAGES   0x85
  208. #define CDROM_CD_TEXT_PACK_DISC_ID    0x86
  209. #define CDROM_CD_TEXT_PACK_GENRE      0x87
  210. #define CDROM_CD_TEXT_PACK_TOC_INFO   0x88
  211. #define CDROM_CD_TEXT_PACK_TOC_INFO2  0x89
  212. #define CDROM_CD_TEXT_PACK_UPC_EAN    0x8e
  213. #define CDROM_CD_TEXT_PACK_SIZE_INFO  0x8f
  214.  
  215. typedef struct _CDROM_TOC_CD_TEXT_DATA_BLOCK {
  216.   UCHAR  PackType;
  217.   UCHAR  TrackNumber : 7;
  218.   UCHAR  ExtensionFlag : 1;
  219.   UCHAR  SequenceNumber;
  220.   UCHAR  CharacterPosition : 4;
  221.   UCHAR  BlockNumber : 3;
  222.   UCHAR  Unicode : 1;
  223.   union {
  224.     UCHAR  Text[12];
  225.     WCHAR  WText[6];
  226.   };
  227.   UCHAR  CRC[2];
  228. } CDROM_TOC_CD_TEXT_DATA_BLOCK, *PCDROM_TOC_CD_TEXT_DATA_BLOCK;
  229.  
  230. typedef struct _CDROM_TOC_CD_TEXT_DATA {
  231.   UCHAR  Length[2];
  232.   UCHAR  Reserved1;
  233.   UCHAR  Reserved2;
  234.   CDROM_TOC_CD_TEXT_DATA_BLOCK  Descriptors[0];
  235. } CDROM_TOC_CD_TEXT_DATA, *PCDROM_TOC_CD_TEXT_DATA;
  236.  
  237. /* CDROM_TOC_FULL_TOC_DATA_BLOCK.Adr constants */
  238. #define ADR_NO_MODE_INFORMATION           0x0
  239. #define ADR_ENCODES_CURRENT_POSITION      0x1
  240. #define ADR_ENCODES_MEDIA_CATALOG         0x2
  241. #define ADR_ENCODES_ISRC                  0x3
  242.  
  243. typedef struct _CDROM_TOC_FULL_TOC_DATA_BLOCK {
  244.   UCHAR  SessionNumber;
  245.   UCHAR  Control : 4;
  246.   UCHAR  Adr : 4;
  247.   UCHAR  Reserved1;
  248.   UCHAR  Point;
  249.   UCHAR  MsfExtra[3];
  250.   UCHAR  Zero;
  251.   UCHAR  Msf[3];
  252. } CDROM_TOC_FULL_TOC_DATA_BLOCK, *PCDROM_TOC_FULL_TOC_DATA_BLOCK;
  253.  
  254. typedef struct _CDROM_TOC_FULL_TOC_DATA {
  255.   UCHAR  Length[2];
  256.   UCHAR  FirstCompleteSession;
  257.   UCHAR  LastCompleteSession;
  258.   CDROM_TOC_FULL_TOC_DATA_BLOCK  Descriptors[0];
  259. } CDROM_TOC_FULL_TOC_DATA, *PCDROM_TOC_FULL_TOC_DATA;
  260.  
  261. typedef struct _CDROM_TOC_PMA_DATA {
  262.   UCHAR  Length[2];
  263.   UCHAR  Reserved1;
  264.   UCHAR  Reserved2;
  265.   CDROM_TOC_FULL_TOC_DATA_BLOCK  Descriptors[0];
  266. } CDROM_TOC_PMA_DATA, *PCDROM_TOC_PMA_DATA;
  267.  
  268. /* SUB_Q_HEADER.AudioStatus constants */
  269. #define AUDIO_STATUS_NOT_SUPPORTED  0x00
  270. #define AUDIO_STATUS_IN_PROGRESS    0x11
  271. #define AUDIO_STATUS_PAUSED         0x12
  272. #define AUDIO_STATUS_PLAY_COMPLETE  0x13
  273. #define AUDIO_STATUS_PLAY_ERROR     0x14
  274. #define AUDIO_STATUS_NO_STATUS      0x15
  275.  
  276. typedef struct _SUB_Q_HEADER {
  277.   UCHAR  Reserved;
  278.   UCHAR  AudioStatus;
  279.   UCHAR  DataLength[2];
  280. } SUB_Q_HEADER, *PSUB_Q_HEADER;
  281.  
  282. typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
  283.   SUB_Q_HEADER  Header;
  284.   UCHAR  FormatCode;
  285.   UCHAR  Reserved[3];
  286.   UCHAR  Reserved1 : 7;
  287.   UCHAR  Mcval :1;
  288.   UCHAR  MediaCatalog[15];
  289. } SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
  290.  
  291. typedef struct _SUB_Q_TRACK_ISRC {
  292.   SUB_Q_HEADER  Header;
  293.   UCHAR  FormatCode;
  294.   UCHAR  Reserved0;
  295.   UCHAR  Track;
  296.   UCHAR  Reserved1;
  297.   UCHAR  Reserved2 : 7;
  298.   UCHAR  Tcval : 1;
  299.   UCHAR  TrackIsrc[15];
  300. } SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
  301.  
  302. typedef struct _SUB_Q_CURRENT_POSITION {
  303.   SUB_Q_HEADER  Header;
  304.   UCHAR  FormatCode;
  305.   UCHAR  Control : 4;
  306.   UCHAR  ADR : 4;
  307.   UCHAR  TrackNumber;
  308.   UCHAR  IndexNumber;
  309.   UCHAR  AbsoluteAddress[4];
  310.   UCHAR  TrackRelativeAddress[4];
  311. } SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
  312.  
  313. typedef union _SUB_Q_CHANNEL_DATA {
  314.   SUB_Q_CURRENT_POSITION  CurrentPosition;
  315.   SUB_Q_MEDIA_CATALOG_NUMBER  MediaCatalog;
  316.   SUB_Q_TRACK_ISRC  TrackIsrc;
  317. } SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
  318.  
  319. /* CDROM_AUDIO_CONTROL.LbaFormat constants */
  320. #define AUDIO_WITH_PREEMPHASIS            0x1
  321. #define DIGITAL_COPY_PERMITTED            0x2
  322. #define AUDIO_DATA_TRACK                  0x4
  323. #define TWO_FOUR_CHANNEL_AUDIO            0x8
  324.  
  325. typedef struct _CDROM_AUDIO_CONTROL {
  326.     UCHAR  LbaFormat;
  327.     USHORT  LogicalBlocksPerSecond;
  328. } CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
  329.  
  330. typedef struct _VOLUME_CONTROL {
  331.   UCHAR  PortVolume[4];
  332. } VOLUME_CONTROL, *PVOLUME_CONTROL;
  333.  
  334. typedef enum _TRACK_MODE_TYPE {
  335.     YellowMode2,
  336.     XAForm2,
  337.     CDDA
  338. } TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
  339.  
  340. typedef struct __RAW_READ_INFO {
  341.     LARGE_INTEGER  DiskOffset;
  342.     ULONG  SectorCount;
  343.     TRACK_MODE_TYPE  TrackMode;
  344. } RAW_READ_INFO, *PRAW_READ_INFO;
  345.  
  346. #pragma pack(pop)
  347.  
  348. #ifdef __cplusplus
  349. }
  350. #endif
  351.  
  352. #endif /* __NTDDCDRM_H */
  353.