ref: 763cb3c28ac91ae0b847a3b6913114c651d003ae
parent: 75926842ab179c9354ff726532679b58c0fc7fb0
author: Håkan Hjort <[email protected]>
date: Mon Jul 1 05:02:25 EDT 2002
Getting ReportRPC for WIN32 a bit closer to working.
--- a/src/ioctl.c
+++ b/src/ioctl.c
@@ -2,7 +2,7 @@
* ioctl.c: DVD ioctl replacement function
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: ioctl.c,v 1.10 2002/06/04 07:10:07 sam Exp $
+ * $Id: ioctl.c,v 1.11 2002/07/01 09:02:25 hjort Exp $
*
* Authors: Markus Kuespert <[email protected]>
* Samuel Hocevar <[email protected]>
@@ -1476,28 +1476,31 @@
if( WIN2K ) /* NT/Win2000/Whistler */
{
DWORD tmp;
- u8 buffer[ DVD_ASF_LENGTH ]; /* correct this */
- PDVD_COPY_PROTECT_KEY key = (PDVD_COPY_PROTECT_KEY) &buffer;
+ u8 buffer[ DVD_REGION_LENGTH ];
+ PDVD_REGION region = (PDVD_REGION) &buffer;
memset( &buffer, 0, sizeof( buffer ) );
- key->KeyLength = DVD_ASF_LENGTH; /* correct this */
- key->KeyType = DvdGetRpcKey;
- key->KeyFlags = 0;
-
#if !defined(_MSC_VER)
# warning "Fix ReportRPC for WIN32!"
#endif
- /* The IOCTL_DVD_READ_KEY might be the right IOCTL */
- i_ret = DeviceIoControl( (HANDLE) i_fd, IOCTL_DVD_READ_KEY, key,
- key->KeyLength, key, key->KeyLength, &tmp, NULL ) ? 0 : -1;
+ i_ret = DeviceIoControl( (HANDLE) i_fd, IOCTL_DVD_GET_REGION, NULL, 0,
+ region, DVD_REGION_LENGTH, &tmp, NULL ) ? 0 : -1;
/* Someone who has the headers should correct all this. */
- *p_type = 0;
- *p_mask = 0;
- *p_scheme = 0;
- i_ret = -1; /* Remove this line when implemented. */
-
+ /* Use the IOCTL_SCSI_PASS_THROUGH_DIRECT so we get the reall
+ * values of theses entities? */
+ if(key->SystemRegion != 0) {
+ *p_type = key->ResetCount > 1 ? 1 : 3 - key->ResetCount;
+ *p_mask = 0xff ^ (1 << (key->SystemRegion - 1));
+ *p_scheme = 1;
+ }
+ else
+ {
+ *p_type = 0; /* ?? */
+ *p_mask = 0xff;
+ *p_scheme = 1; /* ?? */
+ }
}
else
{
--- a/src/ioctl.h
+++ b/src/ioctl.h
@@ -2,7 +2,7 @@
* ioctl.h: DVD ioctl replacement function
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: ioctl.h,v 1.4 2002/06/02 16:14:48 sam Exp $
+ * $Id: ioctl.h,v 1.5 2002/07/01 09:02:25 hjort Exp $
*
* Authors: Samuel Hocevar <[email protected]>
*
@@ -178,6 +178,7 @@
#define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
#define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
#define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_REGION_LENGTH (sizeof(DVD_REGION))
#define SCSI_IOCTL_DATA_OUT 0
#define SCSI_IOCTL_DATA_IN 1
@@ -221,6 +222,13 @@
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;
typedef struct _SCSI_PASS_THROUGH_DIRECT
{