Compiled service cannot see or access mapped drives
Posted on 2009-07-05
We have an application server that was running Windows 2003 that I upgraded yesterday to Server 2008. This server has several homegrown compiled services that interface with legacy systems by writing files out to mapped network drives.
After the upgrade the services couldn't access the drives. The logs showed a 1219 error, and some testing revealed that only the first connection to the server worked. We have a total of six connections to different folders on the same server, all under the same credentials.
In 2003 this worked fine. We used WNetAddConnection2 in VB6 inside of a drive mapping service. It read all the desired drive letters, paths and credentials from a database, then executed the maps, checking them periodically and re-mapping as needed.
The other services simply verified the drive letter's status they needed, then ran their extract. Worked great. All services ran under the System account. The drive letters weren't accessible in User mode but showed up as Disconnected drives in Explorer.
Once I saw that I couldn't find a quick fix for the 1219 error, since the central IT group doesn't want my service credentials to be able to make a single high-level map, I tried to trick the system by adding entries to the Hosts file that linked the same server IP to six different hostnames. It worked in that a ping to any of the names resolved to the correct IP, but now I got an error 52 on all of the map attempts, and I couldn't figure out much about that.
I thought I'd make it through the weekend by creating a quick little CMD to make the maps.
That part worked fine, but the services couldn't see the drives, even if I ran them under my personal credentials, to avoid the Null session of the system account.
Finally, I created a quick little test VB6 app that attempted to verify status of a mapped drive, then write to it. This would work fine in the IDE, or even if I ran the compiled EXE myself. As soon as I ran it as a service, the program could not 'see' or access the mapped drive, again, no matter what credentials I used for the service.
I will accept one of three things as a solution:
(1) help me find a way to configure my original VB6 drive mapping program so it doesn't get 1219 errors when it makes multiple maps to the same server with the same credentials. My research seems to show that MS says this is by design for 'security', but why does it work in 2003 and even in 2008 if I make the maps at the command line via CMD instead of via WNetAddConnection2?
(2) Help me figure out how to configure the services so they can see 'normal' mapped drives. Keep in mind that I've already tried to run the services as myself (I'm an admin), the actual Administrator, and the system account both with and without the Interact with Desktop ticked.
(3) A no- or low-cost completely different way to specify and create mapped drives that are accessible to compiled VB6 services that will attempt to access a drive letter. In other words, I need a way to create an 'X:' drive that a VB6 service can use, where all the VB program knows is that it needs to write to X:.