Geoff Chappell - Software Analyst
The PARTITION_INFORMATION_CLASS (formally _PARTITION_INFORMATION_CLASS) is an enumeration whose values are intended as input to the NtManagePartition function. Different values select different operations to perform on one or two memory partitions.
Memory partitions are new for Windows 10. From the start they had an API for user-mode callers. This API was at first exposed by the Memory Manager and the enumeration was then named MEMORY_PARTITION_INFORMATION_CLASS. For the 1709 release, Microsoft reclassified the API as belonging to the kernel’s Process Structure modules. With this came some renaming, such that PARTITION_INFORMATION_CLASS is the new name for Version 1709 and higher.
The PARTITION_INFORMATION_CLASS is not documented. Neither does it have a C-language declaration in any header that Microsoft supplies with any Windows Driver Kit (WDK) up to and including the edition for Version 2004. Microsoft’s names for the PARTITION_INFORMATION_CLASS itself and for its values are available, however, as type information in private symbol files that Microsoft has included in downloadable packages of public symbol files and still makes available at the public symbol server. The applicable symbol files are not those of the kernel, where the enumeration is interpreted, but of higher-level user-mode modules such as COMBASE.DLL and OLE32.DLL, and even as high-level as URLMON.DLL (before Version 1803) and MSXML6.DLL (at least up to Version 2004).
The documentation status may be changing. Online documentation of the NtManagePartition function, dated 25th February 2022, shows the enumeration’s type among the function’s arguments. Publication may be an oversight. The documentation lists no possible values for the information class and does not describe what information is required or produced. Neither, for that matter, is there (yet) any documentation of the NtCreatePartition or NtOpenPartition functions that are the obvious ways of obtaining a handle to a partition object to manage.
For the following tabulation of the enumeration’s defined values, the Versions reach back to the enumeration’s existence before 1709 as MEMORY_PARTITION_INFORMATION_CLASS.
|0||SystemMemoryPartitionInformation||10.0 and higher|
|1||SystemMemoryPartitionMoveMemory||10.0 and higher|
|2||SystemMemoryPartitionAddPagefile||10.0 and higher|
|3||SystemMemoryPartitionCombineMemory||10.0 and higher|
|4||SystemMemoryPartitionInitialAddMemory||10.0 and higher|
|5||SystemMemoryPartitionGetMemoryEvents||1703 and higher|
|6||SystemMemoryPartitionSetAttributes||2004 and higher|
|7||SystemMemoryPartitionNodeInformation||2004 and higher|
|8||SystemMemoryPartitionCreateLargePages||2004 and higher|
|6 (1709 to 1903);
|SystemMemoryPartitionMax||1709 and higher|