A couple of years ago, I decided that it was high time to junk the old sample code and switch over to using the now well-defined and codified interface that Microsoft had written for property sets. I converted the property set code in our application, I converted the data read in under the old GUID that we'd grabbed so that we would in the future write it out using the defined GUID for the "User-defined Property Set", I read in old files, and they converted up just fine. And life was good.
One of our testers just tried out the app on Windows Vista. For reasons unknown to anyone, the IPropertySetStorage code that worked fine on Windows XP, that works just fine on Windows Server 2003 and 2008, fails on Vista, giving a 0x8007000d error return. That translates to "The data is invalid".
There's no documentation that suggests that Vista is doing something different in this area from all the other versions of Windows. After several hours of beating a dead Google horse, I finally found someone else who was having a different but similar problem with IPropertySetStorage and Vista.
I've now reinstated the old sample code to see if it will read our property set on Vista. If it does, then I can convert out of this mess successfully.
If it doesn't, I'm pretty much out of ideas.
And I'm really annoyed.
Update: And it works.
I'm still annoyed.