I've tried looking into this a couple of times the last couple of years,
it seems like such a trivial thing (It was for the AmigaDos workbench),
but programming for the Windows shell is ugly;
actually programming anything in the Windows API is ugly. Its a horrible mess.
Be prepared for a bunch of hair pulling and heart ache.
Not to discourage you, but MicroSoft thinks it knows best when it comes
to icon placement in folder views and I have found little in a way to
implement 'permanent' icon placement (I.e. Icon view is far from permanent).
The MSDN docs offer little help in this regard (at least no examples).
The last thing I looked into was writing a shell extension to record and restore
icon position (I wouldn't record these in the registry, I was just going to store positions in the folder's desktop.ini file, but it would probably be better to create a file in the user's private settings folder).
Code Project has a number of articles on shell programming and extensions.
http://www.codeproject.com/KB/shell/
http://www.codeproject.com/KB/shell/shlext.aspx
I ended up writing my own little shell in nice clean pure C++
that does exactly what I want in the context of my application.