The thread pool provides a number of functions named
...WhenCallbackReturns. What's the point of all these functions? Why can't you just do the operation yourself immediately before returning?
FreeLibraryWhenCallbackReturns last time. What's the point of the others?
Basically, the same thing as
FreeLibraryWhenCallbackReturns. It's a way to release a resource after execution has left the function and the callback is marked as complete. In the case of a synchronization resource, that resource may be what's keeping somebody from unloading your DLL, or it might protect a race condition between the callback function and a function that tries to cancel the callback.