650 lines
23 KiB
C
650 lines
23 KiB
C
|
/*
|
||
|
* ntddcdvd.h DVD device I/O control codes
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*
|
||
|
* Open Watcom Project
|
||
|
*
|
||
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
||
|
*
|
||
|
* This file is automatically generated. Do not edit directly.
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef _NTDDCDVD_
|
||
|
#define _NTDDCDVD_
|
||
|
|
||
|
#ifndef _ENABLE_AUTODEPEND
|
||
|
#pragma read_only_file;
|
||
|
#endif
|
||
|
|
||
|
#include <ntddstor.h>
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Primitive data types */
|
||
|
typedef ULONG DVD_SESSION_ID;
|
||
|
typedef ULONG *PDVD_SESSION_ID;
|
||
|
typedef ULONG AACS_LAYER_NUMBER;
|
||
|
typedef ULONG *PAACS_LAYER_NUMBER;
|
||
|
typedef const ULONG CAACS_LAYER_NUMBER;
|
||
|
typedef const ULONG *PCAACS_LAYER_NUMBER;
|
||
|
|
||
|
/* DVD device I/O control codes */
|
||
|
#define IOCTL_DVD_BASE FILE_DEVICE_DVD
|
||
|
#define IOCTL_DVD_START_SESSION \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_READ_KEY \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_SEND_KEY \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_END_SESSION \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_SET_READ_AHEAD \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_GET_REGION \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_DVD_SEND_KEY2 \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
||
|
FILE_WRITE_ACCESS )
|
||
|
#define IOCTL_AACS_READ_MEDIA_KEY_BLOCK_SIZE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0430, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_READ_MEDIA_KEY_BLOCK \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0431, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_START_SESSION \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0432, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_END_SESSION \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0433, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_SEND_CERTIFICATE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0434, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_GET_CERTIFICATE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0435, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_GET_CHALLENGE_KEY \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0436, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_SEND_CHALLENGE_KEY \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0437, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_READ_VOLUME_ID \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0438, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_READ_SERIAL_NUMBER \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0439, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_READ_MEDIA_ID \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x043A, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_READ_BINDING_NONCE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x043B, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_AACS_GENERATE_BINDING_NONCE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x043C, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
||
|
FILE_WRITE_ACCESS )
|
||
|
#define IOCTL_DVD_READ_STRUCTURE \
|
||
|
CTL_CODE( IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
|
||
|
/* Storage device I/O control codes */
|
||
|
#define IOCTL_STORAGE_SET_READ_AHEAD \
|
||
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
|
||
|
/* DVD session identifier special value */
|
||
|
#define DVD_END_ALL_SESSIONS ((DVD_SESSION_ID)0xFFFFFFFFL)
|
||
|
|
||
|
/* DVD copy protection flags */
|
||
|
#define DVD_CGMS_COPY_PROTECT_MASK 0x00000018L
|
||
|
#define DVD_CGMS_COPY_PERMITTED 0x00000000L
|
||
|
#define DVD_CGMS_COPY_ONCE 0x00000010L
|
||
|
#define DVD_CGMS_NO_COPY 0x00000018L
|
||
|
#define DVD_COPYRIGHT_MASK 0x00000040L
|
||
|
#define DVD_NOT_COPYRIGHTED 0x00000000L
|
||
|
#define DVD_COPYRIGHTED 0x00000040L
|
||
|
#define DVD_SECTOR_PROTECT_MASK 0x00000020L
|
||
|
#define DVD_SECTOR_NOT_PROTECTED 0x00000000L
|
||
|
#define DVD_SECTOR_PROTECTED 0x00000020L
|
||
|
|
||
|
/* DVD key types */
|
||
|
typedef enum {
|
||
|
DvdChallengeKey = 0x01,
|
||
|
DvdBusKey1 = 0x02,
|
||
|
DvdBusKey2 = 0x03,
|
||
|
DvdTitleKey = 0x04,
|
||
|
DvdAsf = 0x05,
|
||
|
DvdSetRpcKey = 0x06,
|
||
|
DvdGetRpcKey = 0x08,
|
||
|
DvdDiskKey = 0x80,
|
||
|
DvdInvalidateAGID = 0x3F
|
||
|
} DVD_KEY_TYPE;
|
||
|
|
||
|
/* The following structures get one-byte packing. */
|
||
|
#include <pshpack1.h>
|
||
|
|
||
|
/* DVD copy protect key */
|
||
|
typedef struct _DVD_COPY_PROTECT_KEY {
|
||
|
ULONG KeyLength;
|
||
|
DVD_SESSION_ID SessionId;
|
||
|
DVD_KEY_TYPE KeyType;
|
||
|
ULONG KeyFlags;
|
||
|
union {
|
||
|
HANDLE FileHandle;
|
||
|
LARGE_INTEGER TitleOffset;
|
||
|
} Parameters;
|
||
|
UCHAR KeyData[1];
|
||
|
} DVD_COPY_PROTECT_KEY;
|
||
|
typedef DVD_COPY_PROTECT_KEY *PDVD_COPY_PROTECT_KEY;
|
||
|
|
||
|
/* IOCTL_STORAGE_SET_READ_AHEAD parameters */
|
||
|
typedef struct _STORAGE_SET_READ_AHEAD {
|
||
|
LARGE_INTEGER TriggerAddress;
|
||
|
LARGE_INTEGER TargetAddress;
|
||
|
} STORAGE_SET_READ_AHEAD;
|
||
|
typedef STORAGE_SET_READ_AHEAD *PSTORAGE_SET_READ_AHEAD;
|
||
|
|
||
|
/* DVD structure formats */
|
||
|
typedef enum DVD_STRUCTURE_FORMAT {
|
||
|
DvdPhysicalDescriptor = 0,
|
||
|
DvdCopyrightDescriptor = 1,
|
||
|
DvdDiskKeyDescriptor = 2,
|
||
|
DvdBCADescriptor = 3,
|
||
|
DvdManufacturerDescriptor = 4,
|
||
|
DvdMaxDescriptor = 5
|
||
|
} DVD_STRUCTURE_FORMAT;
|
||
|
typedef DVD_STRUCTURE_FORMAT *PDVD_STRUCTURE_FORMAT;
|
||
|
|
||
|
/* DVD read structure */
|
||
|
typedef struct DVD_READ_STRUCTURE {
|
||
|
LARGE_INTEGER BlockByteOffset;
|
||
|
DVD_STRUCTURE_FORMAT Format;
|
||
|
DVD_SESSION_ID SessionId;
|
||
|
UCHAR LayerNumber;
|
||
|
} DVD_READ_STRUCTURE;
|
||
|
typedef DVD_READ_STRUCTURE *PDVD_READ_STRUCTURE;
|
||
|
|
||
|
/* DVD descriptor header */
|
||
|
typedef struct _DVD_DESCRIPTOR_HEADER {
|
||
|
USHORT Length;
|
||
|
UCHAR Reserved[2];
|
||
|
UCHAR Data[1];
|
||
|
} DVD_DESCRIPTOR_HEADER;
|
||
|
typedef DVD_DESCRIPTOR_HEADER *PDVD_DESCRIPTOR_HEADER;
|
||
|
|
||
|
/* DVD layer descriptor */
|
||
|
typedef struct _DVD_LAYER_DESCRIPTOR {
|
||
|
UCHAR BookVersion : 4;
|
||
|
UCHAR BookType : 4;
|
||
|
UCHAR MinimumRate : 4;
|
||
|
UCHAR DiskSize : 4;
|
||
|
UCHAR LayerType : 4;
|
||
|
UCHAR TrackPath : 1;
|
||
|
UCHAR NumberOfLayers : 2;
|
||
|
UCHAR Reserved1 : 1;
|
||
|
UCHAR TrackDensity : 4;
|
||
|
UCHAR LinearDensity : 4;
|
||
|
ULONG StartingDataSector;
|
||
|
ULONG EndDataSector;
|
||
|
ULONG EndLayerZeroSector;
|
||
|
UCHAR Reserved5 : 7;
|
||
|
UCHAR BCAFlag : 1;
|
||
|
} DVD_LAYER_DESCRIPTOR;
|
||
|
typedef DVD_LAYER_DESCRIPTOR *PDVD_LAYER_DESCRIPTOR;
|
||
|
|
||
|
/* DVD full layer descriptor */
|
||
|
typedef struct _DVD_FULL_LAYER_DESCRIPTOR {
|
||
|
DVD_LAYER_DESCRIPTOR commonHeader;
|
||
|
UCHAR MediaSpecific[2031];
|
||
|
} DVD_FULL_LAYER_DESCRIPTOR;
|
||
|
typedef DVD_FULL_LAYER_DESCRIPTOR *PDVD_FULL_LAYER_DESCRIPTOR;
|
||
|
|
||
|
/* DVD copyright descriptor */
|
||
|
typedef struct _DVD_COPYRIGHT_DESCRIPTOR {
|
||
|
UCHAR CopyrightProtectionType;
|
||
|
UCHAR RegionManagementInformation;
|
||
|
USHORT Reserved;
|
||
|
} DVD_COPYRIGHT_DESCRIPTOR;
|
||
|
typedef DVD_COPYRIGHT_DESCRIPTOR *PDVD_COPYRIGHT_DESCRIPTOR;
|
||
|
|
||
|
/* DVD disk key descriptor */
|
||
|
typedef struct _DVD_DISK_KEY_DESCRIPTOR {
|
||
|
UCHAR DiskKeyData[2048];
|
||
|
} DVD_DISK_KEY_DESCRIPTOR;
|
||
|
typedef DVD_DISK_KEY_DESCRIPTOR *PDVD_DISK_KEY_DESCRIPTOR;
|
||
|
|
||
|
/* DVD BCA descriptor */
|
||
|
typedef struct _DVD_BCA_DESCRIPTOR {
|
||
|
UCHAR BCAInformation[1];
|
||
|
} DVD_BCA_DESCRIPTOR;
|
||
|
typedef DVD_BCA_DESCRIPTOR *PDVD_BCA_DESCRIPTOR;
|
||
|
|
||
|
/* DVD manufacturer descriptor */
|
||
|
typedef struct _DVD_MANUFACTURER_DESCRIPTOR {
|
||
|
UCHAR ManufacturingInformation[2048];
|
||
|
} DVD_MANUFACTURER_DESCRIPTOR;
|
||
|
typedef DVD_MANUFACTURER_DESCRIPTOR *PDVD_MANUFACTURER_DESCRIPTOR;
|
||
|
|
||
|
/* DVD copyright management descriptor */
|
||
|
typedef struct _DVD_COPYRIGHT_MANAGEMENT_DESCRIPTOR {
|
||
|
union {
|
||
|
struct {
|
||
|
UCHAR CopyProtectionMode : 4;
|
||
|
UCHAR ContentGenerationManagementSystem : 2;
|
||
|
UCHAR CopyProtectedSector : 1;
|
||
|
UCHAR CopyProtectedMaterial : 1;
|
||
|
} Dvdrom;
|
||
|
struct {
|
||
|
UCHAR Reserved0001 : 4;
|
||
|
UCHAR ContentGenerationManagementSystem : 2;
|
||
|
UCHAR Reserved0002 : 1;
|
||
|
UCHAR CopyProtectedMaterial : 1;
|
||
|
} DvdRecordable_Version1;
|
||
|
struct {
|
||
|
UCHAR Reserved0003;
|
||
|
} Dvdram;
|
||
|
struct {
|
||
|
UCHAR Reserved0004 : 2;
|
||
|
UCHAR ADP_TY : 2;
|
||
|
UCHAR Reserved0005 : 4;
|
||
|
} DvdRecordable;
|
||
|
UCHAR CPR_MAI;
|
||
|
};
|
||
|
UCHAR Reserved0[3];
|
||
|
} DVD_COPYRIGHT_MANAGEMENT_DESCRIPTOR;
|
||
|
typedef DVD_COPYRIGHT_MANAGEMENT_DESCRIPTOR *PDVD_COPYRIGHT_MANAGEMENT_DESCRIPTOR;
|
||
|
|
||
|
/* DVD-RAM medium status */
|
||
|
typedef struct _DVD_RAM_MEDIUM_STATUS {
|
||
|
UCHAR Reserved0 : 1;
|
||
|
UCHAR PersistentWriteProtect : 1;
|
||
|
UCHAR CartridgeWriteProtect : 1;
|
||
|
UCHAR MediaSpecificWriteInhibit : 1;
|
||
|
UCHAR Reserved1 : 2;
|
||
|
UCHAR CartridgeNotSealed : 1;
|
||
|
UCHAR MediaInCartridge : 1;
|
||
|
UCHAR DiscTypeIdentification;
|
||
|
UCHAR Reserved2;
|
||
|
UCHAR MediaSpecificWriteInhibitInformation;
|
||
|
} DVD_RAM_MEDIUM_STATUS;
|
||
|
typedef DVD_RAM_MEDIUM_STATUS *PDVD_RAM_MEDIUM_STATUS;
|
||
|
|
||
|
/* DVD-RAM spare area information */
|
||
|
typedef struct _DVD_RAM_SPARE_AREA_INFORMATION {
|
||
|
UCHAR FreePrimarySpareSectors[4];
|
||
|
UCHAR FreeSupplementalSpareSectors[4];
|
||
|
UCHAR AllocatedSupplementalSpareSectors[4];
|
||
|
} DVD_RAM_SPARE_AREA_INFORMATION;
|
||
|
typedef DVD_RAM_SPARE_AREA_INFORMATION *PDVD_RAM_SPARE_AREA_INFORMATION;
|
||
|
|
||
|
/* DVD-RAM recording types */
|
||
|
typedef struct _DVD_RAM_RECORDING_TYPE {
|
||
|
UCHAR Reserved0 : 4;
|
||
|
UCHAR RealTimeData : 1;
|
||
|
UCHAR Reserved1 : 3;
|
||
|
UCHAR Reserved2[3];
|
||
|
} DVD_RAM_RECORDING_TYPE;
|
||
|
typedef DVD_RAM_RECORDING_TYPE *PDVD_RAM_RECORDING_TYPE;
|
||
|
|
||
|
/* DVD recording management area data */
|
||
|
typedef struct _DVD_RECORDING_MANAGEMENT_AREA_DATA {
|
||
|
UCHAR LastRecordedRMASectorNumber[4];
|
||
|
UCHAR RMDBytes[1];
|
||
|
} DVD_RECORDING_MANAGEMENT_AREA_DATA;
|
||
|
typedef DVD_RECORDING_MANAGEMENT_AREA_DATA *PDVD_RECORDING_MANAGEMENT_AREA_DATA;
|
||
|
|
||
|
/* DVD prerecorded information */
|
||
|
typedef struct _DVD_PRERECORDED_INFORMATION {
|
||
|
UCHAR FieldID_1;
|
||
|
UCHAR DiscApplicationCode;
|
||
|
UCHAR DiscPhysicalCode;
|
||
|
UCHAR LastAddressOfDataRecordableArea[3];
|
||
|
UCHAR ExtensionCode : 4;
|
||
|
UCHAR PartVers1on : 4;
|
||
|
UCHAR Reserved0;
|
||
|
UCHAR FieldID_2;
|
||
|
UCHAR OpcSuggestedCode;
|
||
|
UCHAR WavelengthCode;
|
||
|
UCHAR WriteStrategyCode[4];
|
||
|
UCHAR Reserved2;
|
||
|
UCHAR FieldID_3;
|
||
|
UCHAR ManufacturerId_3[6];
|
||
|
UCHAR Reserved3;
|
||
|
UCHAR FieldID_4;
|
||
|
UCHAR ManufacturerId_4[6];
|
||
|
UCHAR Reserved4;
|
||
|
UCHAR FieldID_5;
|
||
|
UCHAR ManufacturerId_5[6];
|
||
|
UCHAR Reserved5;
|
||
|
UCHAR Reserved99[24];
|
||
|
} DVD_PRERECORDED_INFORMATION;
|
||
|
typedef DVD_PRERECORDED_INFORMATION *PDVD_PRERECORDED_INFORMATION;
|
||
|
|
||
|
/* DVD unique disc identifier */
|
||
|
typedef struct _DVD_UNIQUE_DISC_IDENTIFIER {
|
||
|
UCHAR Reserved0[2];
|
||
|
UCHAR RandomNumber[2];
|
||
|
UCHAR Year[4];
|
||
|
UCHAR Month[2];
|
||
|
UCHAR Day[2];
|
||
|
UCHAR Hour[2];
|
||
|
UCHAR Minute[2];
|
||
|
UCHAR Second[2];
|
||
|
} DVD_UNIQUE_DISC_INFORMATION;
|
||
|
typedef DVD_UNIQUE_DISC_INFORMATION *PDVD_UNIQUE_DISC_INFORMATION;
|
||
|
|
||
|
/* HD DVD-R medium status */
|
||
|
typedef struct _HD_DVD_R_MEDIUM_STATUS {
|
||
|
UCHAR ExtendedTestZone : 1;
|
||
|
UCHAR Reserved1 : 7;
|
||
|
UCHAR NumberOfRemainingRMDsInRDZ;
|
||
|
UCHAR NumberOfRemainingRMDsInCurrentRMZ[2];
|
||
|
} HD_DVD_R_MEDIUM_STATUS;
|
||
|
typedef HD_DVD_R_MEDIUM_STATUS *PHD_DVD_R_MEDIUM_STATUS;
|
||
|
|
||
|
/* DVD dual layer recording information */
|
||
|
typedef struct _DVD_DUAL_LAYER_RECORDING_INFORMATION {
|
||
|
UCHAR Reserved0 : 7;
|
||
|
UCHAR Layer0SectorsImmutable : 1;
|
||
|
UCHAR Reserved1[3];
|
||
|
UCHAR Layer0Sectors[4];
|
||
|
} DVD_DUAL_LAYER_RECORDING_INFORMATION;
|
||
|
typedef DVD_DUAL_LAYER_RECORDING_INFORMATION *PDVD_DUAL_LAYER_RECORDING_INFORMATION;
|
||
|
|
||
|
/* DVD dual layer middle zone start address */
|
||
|
typedef struct _DVD_DUAL_LAYER_MIDDLE_ZONE_START_ADDRESS {
|
||
|
UCHAR Reserved0 : 7;
|
||
|
UCHAR InitStatus : 1;
|
||
|
UCHAR Reserved1[3];
|
||
|
UCHAR ShiftedMiddleAreaStartAddress[4];
|
||
|
} DVD_DUAL_LAYER_MIDDLE_ZONE_START_ADDRESS;
|
||
|
typedef DVD_DUAL_LAYER_MIDDLE_ZONE_START_ADDRESS *PDVD_DUAL_LAYER_MIDDLE_ZONE_START_ADDRESS;
|
||
|
|
||
|
/* DVD dual layer jump interval size */
|
||
|
typedef struct _DVD_DUAL_LAYER_JUMP_INTERVAL_SIZE {
|
||
|
UCHAR Reserved1[4];
|
||
|
UCHAR JumpIntervalSize[4];
|
||
|
} DVD_DUAL_LAYER_JUMP_INTERVAL_SIZE;
|
||
|
typedef DVD_DUAL_LAYER_JUMP_INTERVAL_SIZE *PDVD_DUAL_LAYER_JUMP_INTERVAL_SIZE;
|
||
|
|
||
|
/* DVD dual layer manual layer jump */
|
||
|
typedef struct _DVD_DUAL_LAYER_MANUAL_LAYER_JUMP {
|
||
|
UCHAR Reserved1[4];
|
||
|
UCHAR ManualJumpLayerAddress[4];
|
||
|
} DVD_DUAL_LAYER_MANUAL_LAYER_JUMP;
|
||
|
typedef DVD_DUAL_LAYER_MANUAL_LAYER_JUMP *PDVD_DUAL_LAYER_MANUAL_LAYER_JUMP;
|
||
|
|
||
|
/* DVD dual layer remapping information */
|
||
|
typedef struct _DVD_DUAL_LAYER_REMAPPING_INFORMATION {
|
||
|
UCHAR Reserved1[4];
|
||
|
UCHAR RemappingAddress[4];
|
||
|
} DVD_DUAL_LAYER_REMAPPING_INFORMATION;
|
||
|
typedef DVD_DUAL_LAYER_REMAPPING_INFORMATION *PDVD_DUAL_LAYER_REMAPPING_INFORMATION;
|
||
|
|
||
|
/* DVD disc control block header */
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_HEADER {
|
||
|
UCHAR ContentDescriptor[4];
|
||
|
union {
|
||
|
struct {
|
||
|
UCHAR ReservedDoNotUse_UseAsByteInstead_0[3];
|
||
|
UCHAR RecordingWithinTheUserDataArea : 1;
|
||
|
UCHAR ReadingDiscControlBlocks : 1;
|
||
|
UCHAR FormattingTheMedium : 1;
|
||
|
UCHAR ModificationOfThisDiscControlBlock : 1;
|
||
|
UCHAR ReservedDoNotUse_UseAsByteInstead_1 : 4;
|
||
|
};
|
||
|
UCHAR AsByte[4];
|
||
|
} ProhibitedActions;
|
||
|
UCHAR VendorId[32];
|
||
|
} DVD_DISC_CONTROL_BLOCK_HEADER;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_HEADER *PDVD_DISC_CONTROL_BLOCK_HEADER;
|
||
|
|
||
|
/* Disc control block types */
|
||
|
typedef enum _DISC_CONTROL_BLOCK_TYPE {
|
||
|
FormattingDiscControlBlock = 0x46444300,
|
||
|
WriteInhibitDiscControlBlock = 0x57444300,
|
||
|
SessionInfoDiscControlBlock = 0x53444300,
|
||
|
DiscControlBlockList = 0xFFFFFFFF
|
||
|
} DISC_CONTROL_BLOCK_TYPE;
|
||
|
typedef DISC_CONTROL_BLOCK_TYPE *PDISC_CONTROL_BLOCK_TYPE;
|
||
|
|
||
|
/* DVD disc control block write inhibit */
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_WRITE_INHIBIT {
|
||
|
DVD_DISC_CONTROL_BLOCK_HEADER header;
|
||
|
UCHAR UpdateCount[4];
|
||
|
union {
|
||
|
struct {
|
||
|
UCHAR ReservedDoNotUse_UseAsByteInstead_0[3];
|
||
|
UCHAR WriteProtectStatus : 2;
|
||
|
UCHAR ReservedDoNotUse_UseAsByteInstead_1 : 5;
|
||
|
UCHAR UpdateRequiresPassword : 1;
|
||
|
};
|
||
|
UCHAR AsByte[4];
|
||
|
} WriteProtectActions;
|
||
|
UCHAR Reserved0[16];
|
||
|
UCHAR UpdatePassword[32];
|
||
|
UCHAR Reserved1[32672];
|
||
|
} DVD_DISC_CONTROL_BLOCK_WRITE_INHIBIT;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_WRITE_INHIBIT *PDVD_DISC_CONTROL_BLOCK_WRITE_INHIBIT;
|
||
|
|
||
|
/* DVD disc control block session item */
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_SESSION_ITEM {
|
||
|
UCHAR AsByte[16];
|
||
|
} DVD_DISC_CONTROL_BLOCK_SESSION_ITEM;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_SESSION_ITEM *PDVD_DISC_CONTROL_BLOCK_SESSION_ITEM;
|
||
|
|
||
|
/* DVD disc control block session */
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_SESSION {
|
||
|
DVD_DISC_CONTROL_BLOCK_HEADER header;
|
||
|
UCHAR SessionNumber[2];
|
||
|
UCHAR Reserved0[22];
|
||
|
UCHAR DiscID[32];
|
||
|
UCHAR Reserved1[32];
|
||
|
DVD_DISC_CONTROL_BLOCK_SESSION_ITEM SessionItem[504];
|
||
|
UCHAR Reserved2[24576];
|
||
|
} DVD_DISC_CONTROL_BLOCK_SESSION;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_SESSION *PDVD_DISC_CONTROL_BLOCK_SESSION;
|
||
|
|
||
|
/* DVD disc control block list */
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_LIST_DCB {
|
||
|
UCHAR DcbIdentifier[4];
|
||
|
} DVD_DISC_CONTROL_BLOCK_LIST_DCB;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_LIST_DCB *PDVD_DISC_CONTROL_BLOCK_LIST_DCB;
|
||
|
typedef struct _DVD_DISC_CONTROL_BLOCK_LIST {
|
||
|
DVD_DISC_CONTROL_BLOCK_HEADER header;
|
||
|
UCHAR Reserved0;
|
||
|
UCHAR ReadabldDCBs;
|
||
|
UCHAR Reserved1;
|
||
|
UCHAR WritableDCBs;
|
||
|
DVD_DISC_CONTROL_BLOCK_LIST_DCB Dcbs[1];
|
||
|
} DVD_DISC_CONTROL_BLOCK_LIST;
|
||
|
typedef DVD_DISC_CONTROL_BLOCK_LIST *PDVD_DISC_CONTROL_BLOCK_LIST;
|
||
|
|
||
|
/* DVD write protection status */
|
||
|
typedef struct _DVD_WRITE_PROTECTION_STATUS {
|
||
|
UCHAR SoftwareWriteProtectUntilPowerdown : 1;
|
||
|
UCHAR MediaPersistentWriteProtect : 1;
|
||
|
UCHAR CartridgeWriteProtect : 1;
|
||
|
UCHAR MediaSpecificWriteProtect : 1;
|
||
|
UCHAR Reserved0 : 4;
|
||
|
UCHAR Reserved1[3];
|
||
|
} DVD_WRITE_PROTECTION_STATUS;
|
||
|
typedef DVD_WRITE_PROTECTION_STATUS *PDVD_WRITE_PROTECTION_STATUS;
|
||
|
|
||
|
/* DVD list of recognized format layers */
|
||
|
typedef struct _DVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS_TYPE_CODE {
|
||
|
UCHAR TypeCodeOfFormatLayer[2];
|
||
|
} DVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS_TYPE_CODE;
|
||
|
typedef DVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS_TYPE_CODE *PDVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS_TYPE_CODE;
|
||
|
typedef struct _DVD_LIST_OF_RECOGNZIED_FORMAT_LAYERS {
|
||
|
UCHAR NumberOfRecognizedFormatLayers;
|
||
|
UCHAR OnlineFormatlayer : 2;
|
||
|
UCHAR Reserved1 : 2;
|
||
|
UCHAR DefaultFormatLayer : 2;
|
||
|
UCHAR Reserved2 : 2;
|
||
|
} DVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS;
|
||
|
typedef DVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS *PDVD_LIST_OF_RECOGNIZED_FORMAT_LAYERS;
|
||
|
|
||
|
/* DVD structure list entry */
|
||
|
typedef struct _DVD_STRUCTURE_LIST_ENTRY {
|
||
|
UCHAR FormatCode;
|
||
|
UCHAR Reserved0 : 6;
|
||
|
UCHAR Readable : 1;
|
||
|
UCHAR Sendable : 1;
|
||
|
UCHAR FormatLength[2];
|
||
|
} DVD_STRUCTURE_LIST_ENTRY;
|
||
|
typedef DVD_STRUCTURE_LIST_ENTRY *PDVD_STRUCTURE_LIST_ENTRY;
|
||
|
|
||
|
/* DVD BD spare area information */
|
||
|
typedef struct _DVD_BD_SPARE_AREA_INFORMATION {
|
||
|
UCHAR Reserved1[4];
|
||
|
UCHAR NumberOfFreeSpareBlocks[4];
|
||
|
UCHAR NumberOfAllocatedSpareBlocks[4];
|
||
|
} DVD_BD_SPARE_AREA_INFORMATION;
|
||
|
typedef DVD_BD_SPARE_AREA_INFORMATION *PDVD_BD_SPARE_AREA_INFORMATION;
|
||
|
|
||
|
/* BD physical access control header */
|
||
|
typedef struct _BD_PAC_HEADER {
|
||
|
UCHAR PACId[3];
|
||
|
UCHAR PACFormatNumber;
|
||
|
UCHAR PACUpdateCount[4];
|
||
|
UCHAR UnknownPACRules[4];
|
||
|
UCHAR UnkownPACEntireDiscFlags;
|
||
|
UCHAR Reserved1[2];
|
||
|
UCHAR NumberOfSegments;
|
||
|
UCHAR Segments[8][32];
|
||
|
UCHAR Reserved2[112];
|
||
|
} BD_PAC_HEADER;
|
||
|
typedef BD_PAC_HEADER *PBD_PAC_HEADER;
|
||
|
|
||
|
/* BD disc write protect physical access control */
|
||
|
typedef struct _BD_DISC_WRITE_PROTECT_PAC {
|
||
|
BD_PAC_HEADER Header;
|
||
|
UCHAR KnownPACEntireDiscFlags;
|
||
|
UCHAR Reserved1[3];
|
||
|
UCHAR WriteProtectControlByte;
|
||
|
UCHAR Reserved2[7];
|
||
|
UCHAR WriteProtectPassword[32];
|
||
|
} BD_DISC_WRITE_PROTECT_PAC;
|
||
|
typedef BD_DISC_WRITE_PROTECT_PAC *PBD_DISC_WRITE_PROTECT_PAC;
|
||
|
|
||
|
/* DVD RPC key */
|
||
|
typedef struct _DVD_RPC_KEY {
|
||
|
UCHAR UserResetsAvailable : 3;
|
||
|
UCHAR ManufacturerResetsAvailable : 3;
|
||
|
UCHAR TypeCode : 2;
|
||
|
UCHAR RegionMask;
|
||
|
UCHAR RpcScheme;
|
||
|
UCHAR Reserved02;
|
||
|
} DVD_RPC_KEY;
|
||
|
typedef DVD_RPC_KEY *PDVD_RPC_KEY;
|
||
|
|
||
|
/* DVD set RPC key */
|
||
|
typedef struct _DVD_SET_RPC_KEY {
|
||
|
UCHAR PreferredDriveRegionCode;
|
||
|
UCHAR Reserved[3];
|
||
|
} DVD_SET_RPC_KEY;
|
||
|
typedef DVD_SET_RPC_KEY *PDVD_SET_RPC_KEY;
|
||
|
|
||
|
/* DVD authentication success flag */
|
||
|
typedef struct _DVD_ASF {
|
||
|
UCHAR Reserved0[3];
|
||
|
UCHAR SuccessFlag : 1;
|
||
|
UCHAR Reserved1 : 7;
|
||
|
} DVD_ASF;
|
||
|
typedef DVD_ASF *PDVD_ASF;
|
||
|
|
||
|
/* DVD region */
|
||
|
typedef struct _DVD_REGION {
|
||
|
UCHAR CopySystem;
|
||
|
UCHAR RegionData;
|
||
|
UCHAR SystemRegion;
|
||
|
UCHAR ResetCount;
|
||
|
} DVD_REGION;
|
||
|
typedef DVD_REGION *PDVD_REGION;
|
||
|
|
||
|
/* Revert to default packing. */
|
||
|
#include <poppack.h>
|
||
|
|
||
|
/* AACS certificate */
|
||
|
typedef struct _AACS_CERTIFICATE {
|
||
|
UCHAR Nonce[20];
|
||
|
UCHAR Certificate[92];
|
||
|
} AACS_CERTIFICATE;
|
||
|
typedef AACS_CERTIFICATE *PAACS_CERTIFICATE;
|
||
|
typedef const AACS_CERTIFICATE CAACS_CERTIFICATE;
|
||
|
typedef const AACS_CERTIFICATE *PCAACS_CERTIFICATE;
|
||
|
|
||
|
/* AACS challenge key */
|
||
|
typedef struct _AACS_CHALLENGE_KEY {
|
||
|
UCHAR EllipticCurvePoint[40];
|
||
|
UCHAR Signature[40];
|
||
|
} AACS_CHALLENGE_KEY;
|
||
|
typedef AACS_CHALLENGE_KEY *PAACS_CHALLENGE_KEY;
|
||
|
typedef const AACS_CHALLENGE_KEY CAACS_CHALLENGE_KEY;
|
||
|
typedef const AACS_CHALLENGE_KEY *PCAACS_CHALLENGE_KEY;
|
||
|
|
||
|
/* AACS volume identifier */
|
||
|
typedef struct _AACS_VOLUME_ID {
|
||
|
UCHAR VolumeID[16];
|
||
|
UCHAR MAC[16];
|
||
|
} AACS_VOLUME_ID;
|
||
|
typedef AACS_VOLUME_ID *PAACS_VOLUME_ID;
|
||
|
typedef const AACS_VOLUME_ID CAACS_VOLUME_ID;
|
||
|
typedef const AACS_VOLUME_ID *PCAACS_VOLUME_ID;
|
||
|
|
||
|
/* AACS serial number */
|
||
|
typedef struct _AACS_SERIAL_NUMBER {
|
||
|
UCHAR PrerecordedSerialNumber[16];
|
||
|
UCHAR MAC[16];
|
||
|
} AACS_SERIAL_NUMBER;
|
||
|
typedef AACS_SERIAL_NUMBER *PAACS_SERIAL_NUMBER;
|
||
|
typedef const AACS_SERIAL_NUMBER CAACS_SERIAL_NUMBER;
|
||
|
typedef const AACS_SERIAL_NUMBER *PCAACS_SERIAL_NUMBER;
|
||
|
|
||
|
/* AACS media identifier */
|
||
|
typedef struct _AACS_MEDIA_ID {
|
||
|
UCHAR MediaID[16];
|
||
|
UCHAR MAC[16];
|
||
|
} AACS_MEDIA_ID;
|
||
|
typedef AACS_MEDIA_ID *PAACS_MEDIA_ID;
|
||
|
typedef const AACS_MEDIA_ID CAACS_MEDIA_ID;
|
||
|
typedef const AACS_MEDIA_ID *PCAACS_MEDIA_ID;
|
||
|
|
||
|
/* AACS send certificate */
|
||
|
typedef struct _AACS_SEND_CERTIFICATE {
|
||
|
DVD_SESSION_ID SessionId;
|
||
|
AACS_CERTIFICATE Certificate;
|
||
|
} AACS_SEND_CERTIFICATE;
|
||
|
typedef AACS_SEND_CERTIFICATE *PAACS_SEND_CERTIFICATE;
|
||
|
typedef const AACS_SEND_CERTIFICATE CAACS_SEND_CERTIFICATE;
|
||
|
typedef const AACS_SEND_CERTIFICATE *PCAACS_SEND_CERTIFICATE;
|
||
|
|
||
|
/* AACS send challenge key */
|
||
|
typedef struct _AACS_SEND_CHALLENGE_KEY {
|
||
|
DVD_SESSION_ID SessionId;
|
||
|
AACS_CHALLENGE_KEY ChallengeKey;
|
||
|
} AACS_SEND_CHALLENGE_KEY;
|
||
|
typedef AACS_SEND_CHALLENGE_KEY *PAACS_SEND_CHALLENGE_KEY;
|
||
|
typedef const AACS_SEND_CHALLENGE_KEY CAACS_SEND_CHALLENGE_KEY;
|
||
|
typedef const AACS_SEND_CHALLENGE_KEY *PCAACS_SEND_CHALLENGE_KEY;
|
||
|
|
||
|
/* AACS binding nonce */
|
||
|
typedef struct _AACS_BINDING_NONCE {
|
||
|
UCHAR BindingNonce[16];
|
||
|
UCHAR MAC[16];
|
||
|
} AACS_BINDING_NONCE;
|
||
|
typedef AACS_BINDING_NONCE *PAACS_BINDING_NONCE;
|
||
|
typedef const AACS_BINDING_NONCE CAACS_BINDING_NONCE;
|
||
|
typedef const AACS_BINDING_NONCE *PCAACS_BINDING_NONCE;
|
||
|
|
||
|
/* AACS read binding nonce */
|
||
|
typedef struct _AACS_READ_BINDING_NONCE {
|
||
|
DVD_SESSION_ID SessionId;
|
||
|
ULONG NumberOfSectors;
|
||
|
ULONGLONG StartLba;
|
||
|
union {
|
||
|
HANDLE Handle;
|
||
|
ULONGLONG ForceStructureLengthToMatch64Bit;
|
||
|
};
|
||
|
} AACS_READ_BINDING_NONCE;
|
||
|
typedef AACS_READ_BINDING_NONCE *PAACS_READ_BINDING_NONCE;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#endif /* _NTDDCDVD_ */
|