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);