Geoff Chappell - Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED
The ControlPanelCategory class is one of many that SHELL32 exposes through its exported DllGetClass function. Instances can therefore be created using such well-documented COM functions as CoCreateInstance, by anyone who knows the CLSID:
Moreover, the class is a required item for the ShellDesktop class. In practice, therefore, a ControlPanelCategory object can be created and browsed with such programs as the Windows Explorer:
Note however that the Control Panel can be set to be non-enumerated, as a sort of deletion from the desktop, and this affects the ControlPanelCategory class.
The ControlPanelCategory class implements the following interfaces (in the SHELL32 version 6.00 from Windows Vista):
Each item in a ControlPanelCategory object is a ControlPanel object whose items are constrained to belong to a particular category. The order of enumeration is hard-coded in SHELL32:
|System and Maintenance||5|
|Network and Internet||3|
|Hardware and Sound||2|
User Accounts and Family Safety
|Appearance and Personalization||1|
|Clock, Language, and Region||6|
|Ease of Access||7|
Resource IDs for the friendly names are hard-coded into SHELL32. The choice for category 9 depends on whether Parental Controls are installed and permitted.
Category 11 is skipped unless the computer is a mobile PC (in the sense of the “shcond://v1#IsMobilePC” condition of the CTaskCondition object). Note however that although it is skipped when enumerating, it is still parsed (perhaps by oversight) and remains accessible by running a command such as
The ControlPanelCategory class is implemented in the SHELL32 version 6.00 from Windows Vista, and higher.
Though new for Windows Vista, this class is not documented by Microsoft in the January 2007 edition of the Software Development Kit (SDK) for Windows Vista.