540d550a38
d4iface.h, ddkmapi.h, hidclass.h, hidpi.h, hidusage.h, mcd.h, miniport.h, minitape.h, mountdev.h, mountmgr.h, ndis.h, ndisquid.h, ndistapi.h, ndisvan.h, netevent.h, netpnp.h, netdev.h, ntapi.h, ntdd8042.h, ntddbeep.h, ntddcdrm.h, ntddcdvd.h, ntddchgr.h, ntdddisk.h, ntddk.h, ntddkbd.h, ntddmou.h, ntddndis.h, ntddpar.h, ntddpcm.h, ntddscsi.h, ntddser.h, ntddstor.h, ntddtape.h, ntddtdi.h, ntddvdeo.h, ntddvol.h, ntifs.h, ntpoapi.h, ntstatus.h, parallel.h, pfhook.h, poclass.h, scsi.h, scsiscan.h, scsiwmi.h, smbus.h, srb.h, storport.h, tdi.h, tdiinfo.h, tdikrnl.h, tdistat.h, tvout.h, upssvc.h, usb.h, usb100.h, usbcamdi.h, usbdi.h, usbioctl.h, usbiodef.h, usbscan.h, usbuser.h, video.h, videoagp.h, win2k.h, winddi.h, winddk.h, winnt4.h, winxp.h, ws2san.h, xfilter.h): Change comment to refer w32api package, not MinGW.
215 lines
5.7 KiB
C
215 lines
5.7 KiB
C
/*
|
|
* ntddcdvd.h
|
|
*
|
|
* DVD IOCTL interface.
|
|
*
|
|
* This file is part of the w32api package.
|
|
*
|
|
* Contributors:
|
|
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
|
|
*
|
|
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
*
|
|
* This source code is offered for use in the public domain. You may
|
|
* use, modify or distribute it freely.
|
|
*
|
|
* This code is distributed in the hope that it will be useful but
|
|
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
* DISCLAIMED. This includes but is not limited to warranties of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
*/
|
|
|
|
#ifndef __NTDDCDVD_H
|
|
#define __NTDDCDVD_H
|
|
|
|
#if __GNUC__ >=3
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#pragma pack(push,4)
|
|
|
|
#include "ntddk.h"
|
|
#include "ntddstor.h"
|
|
|
|
|
|
#define IOCTL_DVD_BASE FILE_DEVICE_DVD
|
|
|
|
#define IOCTL_DVD_END_SESSION \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_GET_REGION \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_READ_KEY \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_READ_STRUCTURE \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_SEND_KEY \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_START_SESSION \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
#define IOCTL_DVD_SET_READ_AHEAD \
|
|
CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
|
|
typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
|
|
|
|
typedef struct _STORAGE_SET_READ_AHEAD {
|
|
LARGE_INTEGER TriggerAddress;
|
|
LARGE_INTEGER TargetAddress;
|
|
} STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
|
|
|
|
typedef enum DVD_STRUCTURE_FORMAT {
|
|
DvdPhysicalDescriptor,
|
|
DvdCopyrightDescriptor,
|
|
DvdDiskKeyDescriptor,
|
|
DvdBCADescriptor,
|
|
DvdManufacturerDescriptor,
|
|
DvdMaxDescriptor
|
|
} DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
|
|
|
|
typedef struct DVD_READ_STRUCTURE {
|
|
LARGE_INTEGER BlockByteOffset;
|
|
DVD_STRUCTURE_FORMAT Format;
|
|
DVD_SESSION_ID SessionId;
|
|
UCHAR LayerNumber;
|
|
} DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
|
|
|
|
typedef struct _DVD_DESCRIPTOR_HEADER {
|
|
USHORT Length;
|
|
UCHAR Reserved[2];
|
|
UCHAR Data[0];
|
|
} DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
|
|
|
|
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;
|
|
UCHAR Reserved6;
|
|
} DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR;
|
|
|
|
typedef struct _DVD_COPYRIGHT_DESCRIPTOR {
|
|
UCHAR CopyrightProtectionType;
|
|
UCHAR RegionManagementInformation;
|
|
USHORT Reserved;
|
|
} DVD_COPYRIGHT_DESCRIPTOR, *PDVD_COPYRIGHT_DESCRIPTOR;
|
|
|
|
typedef struct _DVD_DISK_KEY_DESCRIPTOR {
|
|
UCHAR DiskKeyData[2048];
|
|
} DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
|
|
|
|
typedef enum _DVD_KEY_TYPE {
|
|
DvdChallengeKey = 0x01,
|
|
DvdBusKey1,
|
|
DvdBusKey2,
|
|
DvdTitleKey,
|
|
DvdAsf,
|
|
DvdSetRpcKey = 0x6,
|
|
DvdGetRpcKey = 0x8,
|
|
DvdDiskKey = 0x80,
|
|
DvdInvalidateAGID = 0x3f
|
|
} DVD_KEY_TYPE;
|
|
|
|
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[0];
|
|
} DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
|
|
|
|
#define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_BUS_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_RPC_KEY_LENGTH (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_SET_RPC_KEY_LENGTH (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
|
|
#define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
|
|
|
|
#define DVD_END_ALL_SESSIONS ((DVD_SESSION_ID) 0xffffffff)
|
|
|
|
|
|
#define DVD_CGMS_RESERVED_MASK 0x00000078
|
|
|
|
#define DVD_CGMS_COPY_PROTECT_MASK 0x00000018
|
|
#define DVD_CGMS_COPY_PERMITTED 0x00000000
|
|
#define DVD_CGMS_COPY_ONCE 0x00000010
|
|
#define DVD_CGMS_NO_COPY 0x00000018
|
|
|
|
#define DVD_COPYRIGHT_MASK 0x00000040
|
|
#define DVD_NOT_COPYRIGHTED 0x00000000
|
|
#define DVD_COPYRIGHTED 0x00000040
|
|
|
|
#define DVD_SECTOR_PROTECT_MASK 0x00000020
|
|
#define DVD_SECTOR_NOT_PROTECTED 0x00000000
|
|
#define DVD_SECTOR_PROTECTED 0x00000020
|
|
|
|
|
|
typedef struct _DVD_BCA_DESCRIPTOR {
|
|
UCHAR BCAInformation[0];
|
|
} DVD_BCA_DESCRIPTOR, *PDVD_BCA_DESCRIPTOR;
|
|
|
|
typedef struct _DVD_MANUFACTURER_DESCRIPTOR {
|
|
UCHAR ManufacturingInformation[2048];
|
|
} DVD_MANUFACTURER_DESCRIPTOR, *PDVD_MANUFACTURER_DESCRIPTOR;
|
|
|
|
typedef struct _DVD_RPC_KEY {
|
|
UCHAR UserResetsAvailable : 3;
|
|
UCHAR ManufacturerResetsAvailable : 3;
|
|
UCHAR TypeCode : 2;
|
|
UCHAR RegionMask;
|
|
UCHAR RpcScheme;
|
|
UCHAR Reserved2[1];
|
|
} DVD_RPC_KEY, *PDVD_RPC_KEY;
|
|
|
|
typedef struct _DVD_SET_RPC_KEY {
|
|
UCHAR PreferredDriveRegionCode;
|
|
UCHAR Reserved[3];
|
|
} DVD_SET_RPC_KEY, *PDVD_SET_RPC_KEY;
|
|
|
|
typedef struct _DVD_ASF {
|
|
UCHAR Reserved0[3];
|
|
UCHAR SuccessFlag : 1;
|
|
UCHAR Reserved1 : 7;
|
|
} DVD_ASF, *PDVD_ASF;
|
|
|
|
typedef struct _DVD_REGION {
|
|
UCHAR CopySystem;
|
|
UCHAR RegionData;
|
|
UCHAR SystemRegion;
|
|
UCHAR ResetCount;
|
|
} DVD_REGION, *PDVD_REGION;
|
|
|
|
#pragma pack(pop)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __NTDDCDVD_H */
|