You should be able to skip step a) and in step c) directly use the pointer you get from the resource mapping call.
Now, you can also just allocate a local resource and when you map that resource, the routines will take care of copying data around for you. However, I don't know off hand if the initial map will end up copying over uninitialize GPU memory though.
If you want to be more explicit, just get rid of a) and modify c) as stated above.
Michael.