- fixed capacity function on Windows XP using IOCTL_DISK_GET_LENGTH_INFO
This commit is contained in:
parent
6d1e5d6d05
commit
107d68f385
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cdrom.cc,v 1.82 2005-11-01 19:10:24 vruppert Exp $
|
||||
// $Id: cdrom.cc,v 1.83 2005-11-01 21:43:47 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -203,6 +203,7 @@ static HINSTANCE hASPI = NULL;
|
||||
|
||||
#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
|
||||
#define IOCTL_CDROM_READ_TOC_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
typedef struct _CDROM_READ_TOC_EX {
|
||||
UCHAR Format : 4;
|
||||
@ -527,7 +528,7 @@ cdrom_interface::cdrom_interface(char *dev)
|
||||
|
||||
void
|
||||
cdrom_interface::init(void) {
|
||||
BX_DEBUG(("Init $Id: cdrom.cc,v 1.82 2005-11-01 19:10:24 vruppert Exp $"));
|
||||
BX_DEBUG(("Init $Id: cdrom.cc,v 1.83 2005-11-01 21:43:47 vruppert Exp $"));
|
||||
BX_INFO(("file = '%s'",path));
|
||||
}
|
||||
|
||||
@ -1317,11 +1318,17 @@ cdrom_interface::capacity()
|
||||
FileSize.LowPart = GetFileSize(hFile, &FileSize.HighPart);
|
||||
return (Bit32u)((FileSize.QuadPart / 2048) + 150);
|
||||
} else { /* direct device access */
|
||||
ULARGE_INTEGER FreeBytesForCaller;
|
||||
ULARGE_INTEGER TotalNumOfBytes;
|
||||
ULARGE_INTEGER TotalFreeBytes;
|
||||
GetDiskFreeSpaceEx( path, &FreeBytesForCaller, &TotalNumOfBytes, &TotalFreeBytes);
|
||||
return (Bit32u)(TotalNumOfBytes.QuadPart / 2048);
|
||||
if (isWindowsXP) {
|
||||
LARGE_INTEGER length;
|
||||
DWORD iBytesReturned;
|
||||
DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &length, sizeof(length), &iBytesReturned, NULL);
|
||||
return (Bit32u)(length.QuadPart / 2048);
|
||||
} else {
|
||||
ULARGE_INTEGER FreeBytesForCaller;
|
||||
ULARGE_INTEGER TotalNumOfBytes;
|
||||
ULARGE_INTEGER TotalFreeBytes;
|
||||
GetDiskFreeSpaceEx( path, &FreeBytesForCaller, &TotalNumOfBytes, &TotalFreeBytes);
|
||||
return (Bit32u)(TotalNumOfBytes.QuadPart / 2048);
|
||||
}
|
||||
}
|
||||
#elif defined __APPLE__
|
||||
|
Loading…
x
Reference in New Issue
Block a user