Processor Group Compatibility Library
Starting with Windows 7, support is available for kernel-mode drivers that use processor groups. The Processor Group (ProcGrp) compatibility library enables a kernel-mode driver that is written to use processor groups in Windows 7 to run on earlier versions of Windows, which do not support processor groups. When this driver runs on Windows 7, it can take advantage of multiple processor groups, if the hardware platform supports them. When this same driver runs on an earlier version of Windows, it is limited to a single processor group, regardless of the capabilities of the hardware platform. To use the ProcGrp library, the driver must call a library initialization routine. Additionally, the driver must be compiled for the Windows 7 environment in the WDK, and must be linked with Procgrp.lib.
The ProcGrp library is designed to meet the compatibility requirements of drivers that call the following KeXxx routines in Windows 7 but must also run on versions of Windows that do not implement these routines:
The ProcGrp library implements wrapper functions for the KeXxx routines in the preceding list. If the library runs on Windows 7 or Windows Server 2008 R2, the wrapper functions simply call the corresponding KeXxx routines. The wrapper functions have the same names as these KeXxx routines, and their behavior is identical to that of the KeXxx routines that they replace.
Earlier versions of Windows do not support processor groups and do not implement the KeXxx routines in the preceding list. If the ProcGrp library is linked to a driver that runs on one of these earlier versions of Windows, the library initialization function, WdmlibProcgrpInitialize, detects that the operating system does not support processor groups. To deal with this case, each wrapper function contains a simplified implementation of the corresponding KeXxx routine. This implementation supports only one processor group, group number 0. For example, the wrapper function for the KeQueryMaximumGroupCount routine always returns a count of one. For another example, the wrapper function for the KeGetCurrentProcessorNumberEx routine emulates this routine by calling the KeGetCurrentProcessorNumber routine. KeGetCurrentProcessorNumber is similar to KeGetCurrentProcessorNumberEx, but lacks support for processor groups, which, in this case, has the same effect as supporting just one processor group.
For more information about the support for processor groups in Windows 7, see the Supporting Systems That Have More Than 64 Processors white paper on the WHDC website.
The ProcGrp library is contained in the Windows 7 version of the WDK. The library functions are declared in the Procgrp.h header file and are implemented in the Procgrp.lib library file. The library can run on the following Windows operating systems:
Windows Server 2008 R2
Windows Server 2008
Windows Server 2003
In addition to the KeXxx wrapper functions, the ProcGrp library implements the following function to initialize the library: