ntddcdvd.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. /*
  2. * ntddcdvd.h
  3. *
  4. * DVD 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. #ifndef _NTDDCDVD_
  23. #define _NTDDCDVD_
  24. #include "ntddstor.h"
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #define IOCTL_DVD_BASE FILE_DEVICE_DVD
  29. #define IOCTL_STORAGE_SET_READ_AHEAD \
  30. CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS)
  31. #define IOCTL_DVD_END_SESSION \
  32. CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
  33. #define IOCTL_DVD_GET_REGION \
  34. CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
  35. #define IOCTL_DVD_SEND_KEY2 \
  36. CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  37. #define IOCTL_DVD_READ_KEY \
  38. CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
  39. #define IOCTL_DVD_READ_STRUCTURE \
  40. CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
  41. #define IOCTL_DVD_SEND_KEY \
  42. CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
  43. #define IOCTL_DVD_START_SESSION \
  44. CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
  45. #define IOCTL_DVD_SET_READ_AHEAD \
  46. CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
  47. typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
  48. typedef struct _STORAGE_SET_READ_AHEAD {
  49. LARGE_INTEGER TriggerAddress;
  50. LARGE_INTEGER TargetAddress;
  51. } STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
  52. typedef enum DVD_STRUCTURE_FORMAT {
  53. DvdPhysicalDescriptor,
  54. DvdCopyrightDescriptor,
  55. DvdDiskKeyDescriptor,
  56. DvdBCADescriptor,
  57. DvdManufacturerDescriptor,
  58. DvdMaxDescriptor
  59. } DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
  60. #include <pshpack1.h>
  61. typedef struct DVD_READ_STRUCTURE {
  62. LARGE_INTEGER BlockByteOffset;
  63. DVD_STRUCTURE_FORMAT Format;
  64. DVD_SESSION_ID SessionId;
  65. UCHAR LayerNumber;
  66. } DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
  67. #include <poppack.h>
  68. typedef struct _DVD_DESCRIPTOR_HEADER {
  69. USHORT Length;
  70. UCHAR Reserved[2];
  71. UCHAR Data[0];
  72. } DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
  73. #include <pshpack1.h>
  74. typedef struct _DVD_LAYER_DESCRIPTOR {
  75. UCHAR BookVersion : 4;
  76. UCHAR BookType : 4;
  77. UCHAR MinimumRate : 4;
  78. UCHAR DiskSize : 4;
  79. UCHAR LayerType : 4;
  80. UCHAR TrackPath : 1;
  81. UCHAR NumberOfLayers : 2;
  82. UCHAR Reserved1 : 1;
  83. UCHAR TrackDensity : 4;
  84. UCHAR LinearDensity : 4;
  85. ULONG StartingDataSector;
  86. ULONG EndDataSector;
  87. ULONG EndLayerZeroSector;
  88. UCHAR Reserved5 : 7;
  89. UCHAR BCAFlag : 1;
  90. UCHAR Reserved6;
  91. } DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR;
  92. #include <poppack.h>
  93. typedef struct _DVD_COPYRIGHT_DESCRIPTOR {
  94. UCHAR CopyrightProtectionType;
  95. UCHAR RegionManagementInformation;
  96. USHORT Reserved;
  97. } DVD_COPYRIGHT_DESCRIPTOR, *PDVD_COPYRIGHT_DESCRIPTOR;
  98. typedef struct _DVD_DISK_KEY_DESCRIPTOR {
  99. UCHAR DiskKeyData[2048];
  100. } DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
  101. typedef enum _DVD_KEY_TYPE {
  102. DvdChallengeKey = 0x01,
  103. DvdBusKey1,
  104. DvdBusKey2,
  105. DvdTitleKey,
  106. DvdAsf,
  107. DvdSetRpcKey = 0x6,
  108. DvdGetRpcKey = 0x8,
  109. DvdDiskKey = 0x80,
  110. DvdInvalidateAGID = 0x3f
  111. } DVD_KEY_TYPE;
  112. typedef struct _DVD_COPY_PROTECT_KEY {
  113. ULONG KeyLength;
  114. DVD_SESSION_ID SessionId;
  115. DVD_KEY_TYPE KeyType;
  116. ULONG KeyFlags;
  117. union {
  118. HANDLE FileHandle;
  119. LARGE_INTEGER TitleOffset;
  120. } Parameters;
  121. UCHAR KeyData[0];
  122. } DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
  123. #define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
  124. #define DVD_BUS_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
  125. #define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
  126. #define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
  127. #define DVD_RPC_KEY_LENGTH (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
  128. #define DVD_SET_RPC_KEY_LENGTH (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
  129. #define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
  130. #define DVD_END_ALL_SESSIONS ((DVD_SESSION_ID) 0xffffffff)
  131. #define DVD_CGMS_RESERVED_MASK 0x00000078
  132. #define DVD_CGMS_COPY_PROTECT_MASK 0x00000018
  133. #define DVD_CGMS_COPY_PERMITTED 0x00000000
  134. #define DVD_CGMS_COPY_ONCE 0x00000010
  135. #define DVD_CGMS_NO_COPY 0x00000018
  136. #define DVD_COPYRIGHT_MASK 0x00000040
  137. #define DVD_NOT_COPYRIGHTED 0x00000000
  138. #define DVD_COPYRIGHTED 0x00000040
  139. #define DVD_SECTOR_PROTECT_MASK 0x00000020
  140. #define DVD_SECTOR_NOT_PROTECTED 0x00000000
  141. #define DVD_SECTOR_PROTECTED 0x00000020
  142. typedef struct _DVD_BCA_DESCRIPTOR {
  143. UCHAR BCAInformation[0];
  144. } DVD_BCA_DESCRIPTOR, *PDVD_BCA_DESCRIPTOR;
  145. typedef struct _DVD_MANUFACTURER_DESCRIPTOR {
  146. UCHAR ManufacturingInformation[2048];
  147. } DVD_MANUFACTURER_DESCRIPTOR, *PDVD_MANUFACTURER_DESCRIPTOR;
  148. typedef struct _DVD_RPC_KEY {
  149. UCHAR UserResetsAvailable : 3;
  150. UCHAR ManufacturerResetsAvailable : 3;
  151. UCHAR TypeCode : 2;
  152. UCHAR RegionMask;
  153. UCHAR RpcScheme;
  154. UCHAR Reserved2[1];
  155. } DVD_RPC_KEY, *PDVD_RPC_KEY;
  156. typedef struct _DVD_SET_RPC_KEY {
  157. UCHAR PreferredDriveRegionCode;
  158. UCHAR Reserved[3];
  159. } DVD_SET_RPC_KEY, *PDVD_SET_RPC_KEY;
  160. typedef struct _DVD_ASF {
  161. UCHAR Reserved0[3];
  162. UCHAR SuccessFlag : 1;
  163. UCHAR Reserved1 : 7;
  164. } DVD_ASF, *PDVD_ASF;
  165. typedef struct _DVD_REGION {
  166. UCHAR CopySystem;
  167. UCHAR RegionData;
  168. UCHAR SystemRegion;
  169. UCHAR ResetCount;
  170. } DVD_REGION, *PDVD_REGION;
  171. #ifdef __cplusplus
  172. }
  173. #endif
  174. #endif /* _NTDDCDVD_ */