There is no need for FreeResource. When the module containing the resource is loaded, the resource is loaded into a read-only page(s) of system memory. LoadResource returns a pointer to this area of read-only memory to all who ask for it. Since it's read-only the OS doesn't need to perform a copy on write so only one copy need be in memory at a time. The way you free this bit of memory is to unload the module.
Also disregard that blurb in the docs about using DeleteObject, DestroyCursor, etc. in order to free the resource. That's just wrong. In the case of bitmap resources, GDI only knows about handles to GDI objects and the LoadResource does not return a GDI handle. Passing in the value returned by LoadResource to DeleteObject will fail.
All those Lock/Unlock shenanigans are a hold over from Win16 where you would have to lock global memory before using it and then unlock afterwards so the memory manager could defragment the global heap.