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ぐらい許容して欲しいところなんだけど・・・。