I stumbled on the function
QueryWorkingSet today. It seems to be usable for solving a problem I have… What’s really amazing about this function is its totally braindead signature:
BOOL QueryWorkingSet( HANDLE hProcess, PVOID pv, DWORD cb );
Please look beyond the weird Microsoft-isms with type names and the idiotic Hungarian notation. What does it do? Basically it takes a buffer (
pv) of a certain length (
cb) and tries to stuff some information in it. So, how big do we have to make the buffer? Who knows?
Microsoft seems to have a desire to force programmers to make 2 calls to each function that returns data in a buffer. Functions don’t take an
int as the bufffer’s length, instead they take
int *. The first call would pass in 0 as length (or rather a pointer to a variable that’s set to 0). The call would fail, but the value of the variable would be set to the required size of the buffer for a successful call.
So, back to
QueryWorkingSet. How does one find out the required size of the buffer
pv? The only way seems to be repeated calls with progressively larger buffers. Brilliant API Microsoft!