ntdll: Implement DVD_GetRegion() on both Linux and Mac OS.
This commit is contained in:
parent
816a78b0cf
commit
ca786887a2
@ -2348,13 +2348,73 @@ static NTSTATUS DVD_ReadKey(int fd, PDVD_COPY_PROTECT_KEY key)
|
|||||||
/******************************************************************
|
/******************************************************************
|
||||||
* DVD_GetRegion
|
* DVD_GetRegion
|
||||||
*
|
*
|
||||||
*
|
* This IOCTL combines information from both IOCTL_DVD_READ_KEY
|
||||||
|
* with key type DvdGetRpcKey and IOCTL_DVD_READ_STRUCTURE with
|
||||||
|
* structure type DvdCopyrightInformation into one structure.
|
||||||
*/
|
*/
|
||||||
static NTSTATUS DVD_GetRegion(int dev, PDVD_REGION region)
|
static NTSTATUS DVD_GetRegion(int fd, PDVD_REGION region)
|
||||||
{
|
{
|
||||||
FIXME("\n");
|
#if defined(linux)
|
||||||
return STATUS_SUCCESS;
|
NTSTATUS ret = STATUS_NOT_SUPPORTED;
|
||||||
|
dvd_struct dvd;
|
||||||
|
dvd_authinfo auth_info;
|
||||||
|
|
||||||
|
dvd.type = DVD_STRUCT_COPYRIGHT;
|
||||||
|
dvd.copyright.layer_num = 0;
|
||||||
|
auth_info.type = DVD_LU_SEND_RPC_STATE;
|
||||||
|
|
||||||
|
ret = CDROM_GetStatusCode(ioctl( fd, DVD_AUTH, &auth_info ));
|
||||||
|
|
||||||
|
if (ret == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
ret = CDROM_GetStatusCode(ioctl( fd, DVD_READ_STRUCT, &dvd ));
|
||||||
|
|
||||||
|
if (ret == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
region->CopySystem = dvd.copyright.cpst;
|
||||||
|
region->RegionData = dvd.copyright.rmi;
|
||||||
|
region->SystemRegion = auth_info.lrpcs.region_mask;
|
||||||
|
region->ResetCount = auth_info.lrpcs.ucca;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
#elif defined(__FreeBSD__) || defined(__NetBSD__)
|
||||||
|
TRACE("bsd\n");
|
||||||
|
return STATUS_NOT_SUPPORTED;
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
dk_dvd_report_key_t key;
|
||||||
|
dk_dvd_read_structure_t dvd;
|
||||||
|
DVDRegionPlaybackControlInfo rpc;
|
||||||
|
DVDCopyrightInfo copy;
|
||||||
|
NTSTATUS ret = STATUS_NOT_SUPPORTED;
|
||||||
|
|
||||||
|
key.format = kDVDKeyFormatRegionState;
|
||||||
|
key.keyClass = kDVDKeyClassCSS_CPPM_CPRM;
|
||||||
|
key.bufferLength = sizeof(rpc);
|
||||||
|
key.buffer = &rpc;
|
||||||
|
dvd.format = kDVDStructureFormatCopyrightInfo;
|
||||||
|
dvd.bufferLength = sizeof(copy);
|
||||||
|
dvd.buffer = ©
|
||||||
|
|
||||||
|
ret = CDROM_GetStatusCode(ioctl( fd, DKIOCDVDREPORTKEY, &key ));
|
||||||
|
|
||||||
|
if (ret == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
ret = CDROM_GetStatusCode(ioctl( fd, DKIOCDVDREADSTRUCTURE, &dvd ));
|
||||||
|
|
||||||
|
if (ret == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
region->CopySystem = copy.copyrightProtectionSystemType;
|
||||||
|
region->RegionData = copy.regionMask;
|
||||||
|
region->SystemRegion = rpc.driveRegion;
|
||||||
|
region->ResetCount = rpc.numberUserResets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
FIXME("\n");
|
||||||
|
return STATUS_NOT_SUPPORTED;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
|
Loading…
x
Reference in New Issue
Block a user