mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Limit free disk space to 2GB
Fixes startup issue in some games (e.g. Infinity Engine).
This commit is contained in:
parent
439750e174
commit
7cf5d8e738
@ -8,6 +8,49 @@ namespace
|
||||
{
|
||||
void limitTo2Gb(SIZE_T& mem);
|
||||
|
||||
BOOL WINAPI getDiskFreeSpaceW(LPCWSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector,
|
||||
LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters)
|
||||
{
|
||||
LOG_FUNC("GetDiskFreeSpaceW", lpRootPathName, lpSectorsPerCluster, lpBytesPerSector,
|
||||
lpNumberOfFreeClusters, lpTotalNumberOfClusters);
|
||||
|
||||
DWORD sectorsPerCluster = 0;
|
||||
DWORD bytesPerSector = 0;
|
||||
DWORD numberOfFreeClusters = 0;
|
||||
DWORD totalNumberOfClusters = 0;
|
||||
|
||||
if (!lpSectorsPerCluster)
|
||||
{
|
||||
lpSectorsPerCluster = §orsPerCluster;
|
||||
}
|
||||
if (!lpBytesPerSector)
|
||||
{
|
||||
lpBytesPerSector = &bytesPerSector;
|
||||
}
|
||||
if (!lpNumberOfFreeClusters)
|
||||
{
|
||||
lpNumberOfFreeClusters = &numberOfFreeClusters;
|
||||
}
|
||||
if (!lpTotalNumberOfClusters)
|
||||
{
|
||||
lpTotalNumberOfClusters = &totalNumberOfClusters;
|
||||
}
|
||||
|
||||
auto result = CALL_ORIG_FUNC(GetDiskFreeSpaceW)(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector,
|
||||
lpNumberOfFreeClusters, lpTotalNumberOfClusters);
|
||||
if (result)
|
||||
{
|
||||
const DWORD bytesPerCluster = *lpSectorsPerCluster * *lpBytesPerSector;
|
||||
if (0 != bytesPerCluster)
|
||||
{
|
||||
const DWORD maxClusters = INT_MAX / bytesPerCluster;
|
||||
*lpNumberOfFreeClusters = std::min(*lpNumberOfFreeClusters, maxClusters);
|
||||
*lpTotalNumberOfClusters = std::min(*lpTotalNumberOfClusters, maxClusters);
|
||||
}
|
||||
}
|
||||
return LOG_RESULT(result);
|
||||
}
|
||||
|
||||
void WINAPI globalMemoryStatus(LPMEMORYSTATUS lpBuffer)
|
||||
{
|
||||
LOG_FUNC("GlobalMemoryStatus", lpBuffer);
|
||||
@ -35,6 +78,7 @@ namespace Win32
|
||||
{
|
||||
void installHooks()
|
||||
{
|
||||
HOOK_FUNCTION(kernel32, GetDiskFreeSpaceW, getDiskFreeSpaceW);
|
||||
HOOK_FUNCTION(kernel32, GlobalMemoryStatus, globalMemoryStatus);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user