}
#endif
#ifdef HAVE_MS_WINDOWS
- if (strcmp(display_use, "x") != 0)
- display_use = "mswindows";
+ if (strcmp(display_use, "tty") == 0)
+ {
+ /* Check if the process is executing within
+ the interactive window station.
+ This check is only applicable on
+ Windows NT product line (WinNT, Win2k, WinXP) */
+ DWORD dwVersion = GetVersion();
+ if (dwVersion < 0x80000000) /* Are we runnging WinNT ? */
+ {
+ HMODULE hDLL = GetModuleHandle("User32.dll");
+ if (hDLL)
+ {
+ typedef HWINSTA (WINAPI *GetProcessWindowStationProc)(void);
+ typedef BOOL (WINAPI *GetUserObjectInformationProc)(HANDLE hObj, int nIndex, PVOID pvInfo, DWORD nLength, LPDWORD lpnLengthNeeded);
+ GetProcessWindowStationProc pGetProcessWindowStationProc;
+ GetUserObjectInformationProc pGetUserObjectInformationProc;
+
+ pGetProcessWindowStationProc = (GetProcessWindowStationProc) GetProcAddress(hDLL, "GetProcessWindowStation");
+ pGetUserObjectInformationProc = (GetUserObjectInformationProc) GetProcAddress(hDLL, "GetUserObjectInformationA");
+ if (pGetProcessWindowStationProc && pGetUserObjectInformationProc)
+ {
+ HWINSTA hWindowStation = (*pGetProcessWindowStationProc)();
+ if (hWindowStation != NULL)
+ {
+ char strBuffer[100];
+ DWORD nSize;
+ if ((*pGetUserObjectInformationProc)(hWindowStation,
+ UOI_NAME,
+ strBuffer,
+ sizeof(strBuffer),
+ &nSize))
+ if (strcmp(strBuffer, "WinSta0") == 0)
+ display_use = "mswindows";
+ }
+ }
+ }
+ }
+ else
+ {
+ display_use = "mswindows";
+ }
+ }
#endif /* HAVE_MS_WINDOWS */
}
#endif /* HAVE_WINDOW_SYSTEM */