Canonical Property Names


Most of the property system uses PROPERTYKEYs to identify properties.  But you can also identify a property using its canonical name.  For instance, PKEY_DateModified corresponds to L”System.DateModified”. 


Whereas a PROPERTYKEY was good for coding and binary structures, the name is the ideal form for the registry or config files.  Canonical names are meant to be programmer friendly, composed of [0-9A-Za-z.], up to 63 characters long, and are structured as Company.Group.Property.  The only exception to the naming convension is that the built-in system properties are named System.Group.Property. 


Anyway, converting between a canonical name and a key is easy.  These two functions are very cheap (a hash table lookup, usually). 



// from propsys.h
HRESULT 
PSGetPropertyKeyFromName(__in PCWSTR pszName, __out PROPERTYKEY *ppropkey);
HRESULT 
PSGetNameFromPropertyKey(__in REFPROPERTYKEY propkey, __out PWSTR *ppszCanonicalName);


There’s even a version of PSGetPropertyDescription that takes canonical names…



PSSTDAPI PSGetPropertyDescriptionByName(LPCWSTR pszCanonicalName, __in REFIID riid, __deref_out void **ppv);

Comments (1)

  1. chrisg says:

    glad to see posts on the Vista property system! good stuff.