I don't have a setup where I can easily try to reproduce your results, however, I notice that you don't do much with the return value of CreateService(). Per the module docs, you should be calling GetLastError() when CreateService() returns false. The underlying service docs go into a bit more detail about the data that might be returned. (You'll likely need to dig up the underlying constant values.)
I'd start by trying to get more extended error info. That should lead you to the next step in your investigation.
(One obvious question is "Are you running this as an admin?" The note on the CPAN doc (see link above) suggests that's a requirement.)
Hope this helps...