PROPERTYKEYに対する正規化

そこで、登場するのが、PSCoerceToCanonicalValue関数。この関数は、第一引数にPROPERTYKEYを受け取る。それによって、PROPVARIANTの中身をごにょごにょしてくれる。

// "2008/11/19:11:15:08.000" は、VT_LPWSTRとして処理される
PROPVARIANT pv;
InitPropVariantFromString(L"2008/11/19:11:15:08.000", &pv);

// "System.DateModified" ですよと教えると、VT_FILETIMEに変換される
PROPERTYKEY key;
PSGetPropertyKeyFromName(L"System.DateModified", &key);
PSCoerceToCanonicalValue(key, &pv);

...

PropVariantClear(&pv);

しかし、この関数、内部でいろいろやり過ぎているようで、本当のところ、何をやっているのかは不明。良きに計らってくれていることを祈るしかなさそう。ただ、タイムスタンプの認識に関しては、完全に、2008/11/19:11:15:08.000以外の形式は認めてくれないらしい。できれば、RFC3339ぐらい許容して欲しいところなんだけど・・・。