This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/ntddcdvd.h

650 lines
23 KiB
C
Raw Normal View History

/*
* 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_ */