I was able to get the Window Station Handle from the IIS process and get the name "Service-0x0" with GetUserObjectInformation. Similarly, when I got the Desktop Handle from the thread and got the name, I got "Desktop". I think there is a windowing station in the service for session 0, and no desktop. Why does it exist?
IntPtr hWinSta = GetProcessWindowStation();
IntPtr hDesktop = GetThreadDesktop(GetCurrentThreadId());
GetUserObjectInformation(hWinSta, ...
GetUserObjectInformation(hDesktop, ...