Fix bogus calls to GetMemoryStatus and GetMemoryStatusEx: need to set the dwLength member of the struct prior to calling. Otherwise it's just a garbage value from the stack. Also, pay attention to return value of GetMemoryStatusEx: if it indicates failure then just return 0 without using any of the other data the call returns.
This commit is contained in:
parent
5fbefd66dc
commit
ba21622048
@ -2279,11 +2279,16 @@ int SystemInformationImplementation::QueryMemory()
|
|||||||
#elif _WIN32
|
#elif _WIN32
|
||||||
#if _MSC_VER < 1300
|
#if _MSC_VER < 1300
|
||||||
MEMORYSTATUS ms;
|
MEMORYSTATUS ms;
|
||||||
|
ms.dwLength = sizeof(ms);
|
||||||
GlobalMemoryStatus(&ms);
|
GlobalMemoryStatus(&ms);
|
||||||
#define MEM_VAL(value) dw##value
|
#define MEM_VAL(value) dw##value
|
||||||
#else
|
#else
|
||||||
MEMORYSTATUSEX ms;
|
MEMORYSTATUSEX ms;
|
||||||
GlobalMemoryStatusEx(&ms);
|
ms.dwLength = sizeof(ms);
|
||||||
|
if (0 == GlobalMemoryStatusEx(&ms))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#define MEM_VAL(value) ull##value
|
#define MEM_VAL(value) ull##value
|
||||||
#endif
|
#endif
|
||||||
unsigned long tv = ms.MEM_VAL(TotalVirtual);
|
unsigned long tv = ms.MEM_VAL(TotalVirtual);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user