http://bugs.winehq.org/show_bug.cgi?id=4436
------- Additional Comments From J.A.Gow@furrybubble.co.uk 2006-11-02 15:22 ------- Ah - I think I misunderstood you with respect to the IStorage_Release() calls. Yes, ideally one should call IStream_Release followed by IStorage_Release, and that works on Windows and Wine. However, some apps, including this one, do _not_ appear to do this - they simply call IStorage_Release once. This closes the file and (it appears) all streams within it. The problem occurs under Wine when the app calls IStorage_Release to close the file and all streams, Wine does not close the file because streams are still open (reference held by each stream). Then, when the app subsequently tries to reopen the storage file, it fails on access violation because Wine has held the file open pending explicit closure of the streams.
The bottom line is that Windows seems to have a mechanism by which when IStorage_Release is called, the file and all open IStreams are implicitly closed with it. Apps take advantage of this. Wine, however does it properly - but this does not match the Windows mechanism!