This brings up one of the things I have always wondered about win32. Why on earth can't you do an overlapped CreateFile? It doesn't sound like this is going to be changing in Vista either. I've *wanted* to use overlapped IO on many occasions, but I've
always been very turned off by this omission. Also, why is it that some overlapped IO calls block for hundreds of milliseconds? Shouldn't asynchronous really mean asynchronous?
I also have one question about user-mode drivers. You talked a little about how we don't want user-mode drivers to host a GUI, etc. But I wasn't sure if you mean that it is impossible for them to do that. Do user-mode drivers run in win32, or are they in
a separate subsystem?
OK, one more question and I'm done. In general you can only cancel an operation that is sufficiently started, and not sufficiently finished. Those two restrictions lead directly to the two main classes of bugs associated with "cancel" type API calls. Namely,
that you can't be sure you aren't trying to cancel it too early, and that you can't be sure you aren't trying to cancel it too late. The case of trying to cancel it too early can be handled carefully by the application with retries and synchronization, to
avoid turning it into a problem. But I can't see how you can, in general, solve the second class of problem, trying to cancel an operation that has just finished, and accidentally cancelling a different operation. Is this something that you have looked into?
Maybe those interfaces are strictly for internal use.
That argument doesn't work here, since we're talking about what is supposed to be an extensible framework. It has been 5 years, but as far as I can remember, that interface was used to talk between an IShellFolder implementation and an IShellView implementation.
If an extension is supposed to be able to replace either of those pieces, then it needs to be able to impersonate the stock implementation completely. If my replacement IShellView is to be used with the stock IShellFolder, then I need to be able to communicate
with it like the stock IShellView would. If I can't do that, then either 1) things aren't going to work right, or 2) I am locked out and can't do everything that the stock IShellView can do. Those are both unacceptable outcomes.
With the DOJ settlement, a number of new shell interfaces and functions were "documented." But this documentation is essentially useless: it basically amounts to function signatures, and leaves any idea of how to use it up to the developers' imaginations.
Function signatures and/or interface definitions would have been immensely helpful. Looking over my notes on shell extensions, I see that some of the interfaces that were undocumented at the time (around 2001) are now documented. But the interface "abcb3a00-1b2b-11cf-a49f-444553540000"
still isn't documented at all. It has something to do with IShellFolder and/or IPersistFolder.
The DirectShow stuff I've done recently uncovered an interface "94bc0598-c3d2-11d3-bedf-00c04f612986" that is only mentioned on the web in a post where someone else ran into it previously. There is no documentation of any kind.