- fixed capacity function on Windows XP using IOCTL_DISK_GET_LENGTH_INFO

This commit is contained in:
Volker Ruppert 2005-11-01 21:43:47 +00:00
parent 6d1e5d6d05
commit 107d68f385

View File

@ -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__