Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntddcdvd.h Source File

ntddcdvd.h

00001 /*
00002  * ntddcdvd.h
00003  *
00004  * DVD 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 #ifndef __NTDDCDVD_H
00024 #define __NTDDCDVD_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 #include "ntddstor.h"
00036 
00037 #define IOCTL_DVD_BASE                    FILE_DEVICE_DVD
00038 
00039 #define IOCTL_DVD_END_SESSION \
00040   CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
00041 
00042 #define IOCTL_DVD_GET_REGION \
00043   CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
00044 
00045 #define IOCTL_DVD_READ_KEY \
00046   CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
00047 
00048 #define IOCTL_DVD_READ_STRUCTURE \
00049   CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
00050 
00051 #define IOCTL_DVD_SEND_KEY \
00052   CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
00053 
00054 #define IOCTL_DVD_START_SESSION \
00055   CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
00056 
00057 #define IOCTL_DVD_SET_READ_AHEAD \
00058   CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
00059 
00060 
00061 typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
00062 
00063 typedef struct _STORAGE_SET_READ_AHEAD {
00064     LARGE_INTEGER  TriggerAddress;
00065     LARGE_INTEGER  TargetAddress;
00066 } STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
00067 
00068 typedef enum DVD_STRUCTURE_FORMAT {
00069   DvdPhysicalDescriptor,
00070   DvdCopyrightDescriptor,
00071   DvdDiskKeyDescriptor,
00072   DvdBCADescriptor,
00073   DvdManufacturerDescriptor,
00074   DvdMaxDescriptor
00075 } DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
00076 
00077 #include <pshpack1.h>
00078 typedef struct DVD_READ_STRUCTURE {
00079   LARGE_INTEGER  BlockByteOffset;
00080   DVD_STRUCTURE_FORMAT  Format;
00081   DVD_SESSION_ID  SessionId;
00082   UCHAR  LayerNumber;
00083 } DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
00084 #include <poppack.h>
00085 
00086 typedef struct _DVD_DESCRIPTOR_HEADER {
00087     USHORT Length;
00088     UCHAR Reserved[2];
00089     UCHAR Data[0];
00090 } DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
00091 
00092 #include <pshpack1.h>
00093 typedef struct _DVD_LAYER_DESCRIPTOR {
00094   UCHAR  BookVersion : 4;
00095   UCHAR  BookType : 4;
00096   UCHAR  MinimumRate : 4;
00097   UCHAR  DiskSize : 4;
00098   UCHAR  LayerType : 4;
00099   UCHAR  TrackPath : 1;
00100   UCHAR  NumberOfLayers : 2;
00101   UCHAR  Reserved1 : 1;
00102   UCHAR  TrackDensity : 4;
00103   UCHAR  LinearDensity : 4;
00104   ULONG  StartingDataSector;
00105   ULONG  EndDataSector;
00106   ULONG  EndLayerZeroSector;
00107   UCHAR  Reserved5 : 7;
00108   UCHAR  BCAFlag : 1;
00109   UCHAR  Reserved6;
00110 } DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR;
00111 #include <poppack.h>
00112 
00113 typedef struct _DVD_COPYRIGHT_DESCRIPTOR {
00114   UCHAR  CopyrightProtectionType;
00115   UCHAR  RegionManagementInformation;
00116   USHORT  Reserved;
00117 } DVD_COPYRIGHT_DESCRIPTOR, *PDVD_COPYRIGHT_DESCRIPTOR;
00118 
00119 typedef struct _DVD_DISK_KEY_DESCRIPTOR {
00120   UCHAR  DiskKeyData[2048];
00121 } DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
00122 
00123 typedef enum _DVD_KEY_TYPE {
00124     DvdChallengeKey = 0x01,
00125     DvdBusKey1,
00126     DvdBusKey2,
00127     DvdTitleKey,
00128     DvdAsf,
00129     DvdSetRpcKey = 0x6,
00130     DvdGetRpcKey = 0x8,
00131     DvdDiskKey = 0x80,
00132     DvdInvalidateAGID = 0x3f
00133 } DVD_KEY_TYPE;
00134 
00135 typedef struct _DVD_COPY_PROTECT_KEY {
00136     ULONG  KeyLength;
00137     DVD_SESSION_ID  SessionId;
00138     DVD_KEY_TYPE  KeyType;
00139     ULONG  KeyFlags;
00140     union {
00141         HANDLE  FileHandle;
00142         LARGE_INTEGER  TitleOffset;
00143     } Parameters;
00144     UCHAR  KeyData[0];
00145 } DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
00146 
00147 #define DVD_CHALLENGE_KEY_LENGTH          (12 + sizeof(DVD_COPY_PROTECT_KEY))
00148 #define DVD_BUS_KEY_LENGTH                (8 + sizeof(DVD_COPY_PROTECT_KEY))
00149 #define DVD_TITLE_KEY_LENGTH              (8 + sizeof(DVD_COPY_PROTECT_KEY))
00150 #define DVD_DISK_KEY_LENGTH               (2048 + sizeof(DVD_COPY_PROTECT_KEY))
00151 #define DVD_RPC_KEY_LENGTH                (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
00152 #define DVD_SET_RPC_KEY_LENGTH            (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
00153 #define DVD_ASF_LENGTH                    (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
00154 
00155 #define DVD_END_ALL_SESSIONS              ((DVD_SESSION_ID) 0xffffffff)
00156 
00157 
00158 #define DVD_CGMS_RESERVED_MASK            0x00000078
00159 
00160 #define DVD_CGMS_COPY_PROTECT_MASK        0x00000018
00161 #define DVD_CGMS_COPY_PERMITTED           0x00000000
00162 #define DVD_CGMS_COPY_ONCE                0x00000010
00163 #define DVD_CGMS_NO_COPY                  0x00000018
00164 
00165 #define DVD_COPYRIGHT_MASK                0x00000040
00166 #define DVD_NOT_COPYRIGHTED               0x00000000
00167 #define DVD_COPYRIGHTED                   0x00000040
00168 
00169 #define DVD_SECTOR_PROTECT_MASK           0x00000020
00170 #define DVD_SECTOR_NOT_PROTECTED          0x00000000
00171 #define DVD_SECTOR_PROTECTED              0x00000020
00172 
00173 
00174 typedef struct _DVD_BCA_DESCRIPTOR {
00175   UCHAR  BCAInformation[0];
00176 } DVD_BCA_DESCRIPTOR, *PDVD_BCA_DESCRIPTOR;
00177 
00178 typedef struct _DVD_MANUFACTURER_DESCRIPTOR {
00179   UCHAR  ManufacturingInformation[2048];
00180 } DVD_MANUFACTURER_DESCRIPTOR, *PDVD_MANUFACTURER_DESCRIPTOR;
00181 
00182 typedef struct _DVD_RPC_KEY {
00183   UCHAR  UserResetsAvailable : 3;
00184   UCHAR  ManufacturerResetsAvailable : 3;
00185   UCHAR  TypeCode : 2;
00186   UCHAR  RegionMask;
00187   UCHAR  RpcScheme;
00188   UCHAR  Reserved2[1];
00189 } DVD_RPC_KEY, *PDVD_RPC_KEY;
00190 
00191 typedef struct _DVD_SET_RPC_KEY {
00192   UCHAR  PreferredDriveRegionCode;
00193   UCHAR  Reserved[3];
00194 } DVD_SET_RPC_KEY, *PDVD_SET_RPC_KEY;
00195 
00196 typedef struct _DVD_ASF {
00197   UCHAR  Reserved0[3];
00198   UCHAR  SuccessFlag : 1;
00199   UCHAR  Reserved1 : 7;
00200 } DVD_ASF, *PDVD_ASF;
00201 
00202 typedef struct _DVD_REGION {
00203     UCHAR  CopySystem;
00204     UCHAR  RegionData;
00205     UCHAR  SystemRegion;
00206     UCHAR  ResetCount;
00207 } DVD_REGION, *PDVD_REGION;
00208 
00209 #ifdef __cplusplus
00210 }
00211 #endif
00212 
00213 #endif /* __NTDDCDVD_H */