Geoff Chappell, Software Analyst
The PS_QUOTA_TYPE enumeration selects from the various types of resource that are subject to quotas.
The PS_QUOTA_TYPE is here thought to have been introduced with the reorganisation of the EPROCESS_QUOTA_BLOCK for Windows XP. This structure had treated quota properties such as current usage, peak usage and limit as separate members for the two pool types and the page file. For the two pool types, each member was already an array, indexed by the NonPagedPool (0) and PagedPool (1) values from the POOL_TYPE enumeration. The reorganisation gathered the properties for each quota type into an EPROCESS_QUOTA_ENTRY and made an array of these as the QuotaEntry member of the EPROCESS_QUOTA_BLOCK. The PS_QUOTA_TYPE indexes that array.
Though the PS_QUOTA_TYPE itself is not documented, its existence is hinted at in Microsoft’s documentation of the QUOTA_UNDERFLOW (0x21) bug check, whose second argument is described as “The quota type.” As if to prove that Microsoft writes its Windows documentation first for its own programmers and support staff, the documentation advises
For the list of all possible quota type values, see the header file Ps.h in the Windows Driver Kit (WDK).
Of course, no PS.H is present in any known edition of the WDK or of any similar development kit that Microsoft publishes without requiring a non-disclosure agreement.
All the “possible quota type values” are disclosed as type information in public symbol files for the kernel in Windows XP and Windows Server 2003 only. The type then disappears completely from the public symbol files.
|0||PsNonPagedPool||5.1 and higher|
|1||PsPagedPool||5.1 and higher|
|2||PsPageFile||5.1 and higher|
|3||working set||6.0 and higher|
|4||CPU rate||6.0 only|
|3 (5.1 to 5.2);
|PsQuotaTypes||5.1 and higher|
Microsoft’s names for the types added in version 6.0 may never be known.