Geoff Chappell - Software Analyst
When the IsOS function is given OS_WELCOMELOGONUI as its dwOS argument, it tests whether the Welcome Logon User Interface is both supported and enabled.
The answer is obtained by different methods in different builds of SHLWAPI. All builds agree on a test for whether the Welcome Logon User Interface is enabled, but they differ in how they test whether the feature is supported.
To SHLWAPI version 6.0 from Windows Vista, the Welcome Logon User Interface is supported only if running on an operating system from before Windows Vista and only then for workstations. The test for Windows Vista or higher is that of OS_VISTAORGREATER. The test for a workstation is that the wProductType member of the version information obtained from GetVersionEx is VER_NT_WORKSTATION.
For version 6.0 from Windows XP SP2 and higher, but before Windows Vista, the feature is supported only on workstations that are not domain members. The test for domain membership is essentially that of OS_DOMAINMEMBER.
The earliest builds of version 6.0 check just that the local computer is not a domain member.
As for whether the supported feature is enabled, all builds check the registry. The feature is enabled if the GinaDLL value is not present and the LogonType value is non-zero. The GinaDLL value is from one key only:
Keys | HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon |
Value | GinaDLL |
If the value is present but has more than 260 bytes of data, it is interpreted as being not present. The LogonType value is from either of two keys in the registry, listed below in order of decreasing precedence:
Keys | HKEY_LOCAL_MACHINE\Software\\Microsoft\Windows\CurrentVersion\policies\system
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon |
Value | LogonType |
Type | REG_DWORD |
Default | 0 |
If the value is present but has the wrong data type, it evaluates as zero.
The OS_WELCOMELOGONUI case of the SHLWAPI function IsOS is supported in version 6.0 only. (SHLWAPI version 6.1 and higher are hard-coded to return FALSE.)