I won't spam the mailing list yet, since I haven't had significant progress. However I have completed a custom DHCPv6 handshake with a Windows 7 machine and configured both the IPv6 address and IPv6 DNS server correctly. This is how Windows seems to handle the IPv6 address configuration:
1) When receive link up, send Router Solicitation messages 3 times between around one second
2) If after 3 Router Solicitation messages a Router Advertisement is not received, start sending DHCPv6 solicitations
3) If a Router Advertisement with managed flag set on is received, start sending DHCPv6 solicitations immediately
4) On all following link ups, if Router Advertisement with managed flag was received last time, start sending DHCPv6 solicitations immediately
The DHCPv6 handshake after the solicitation goes the usual way: Solicit -> Advertise -> Request -> Reply.
To make an efficient DHCPv6 handshake a reply to the Router Solicitation is necessary, otherwise the first address configuration after reboot or disabling the TAP-Win32 interface will be quite slow. Otherwise this all should be pretty doable.
I'll continue porting my sample code to C, since I wrote the small proof-of-concept in C#. And by the way if someone is interested, I wrote a C library and .NET API for the TAP device driver interface that can be found from
http://code.google.com/p/tapcfg/ website. This is not supposed to be an advertisement, just to let people know, since it's quite useful for experimenting and runs on many platforms.