44 if (ListEntry ==
NULL)
47 TRACE(
"Add entry %p\n", ListEntry);
60 TRACE(
"Remove entry %p\n", ListEntry);
80 if (Current->
hWnd == hwndDlg)
82 TRACE(
"Found entry: %p\n", Current);
86 ListEntry = ListEntry->
Flink;
89 TRACE(
"Found no entry!\n");
109 ListEntry = ListEntry->
Flink;
130 TRACE(
"Set dialog handle: %p\n", hwndDlg);
131 ListEntry->
hWnd = hwndDlg;
138 if (ListEntry ==
NULL)
188 TRACE(
"WlxUseCtrlAltDel()\n");
204 TRACE(
"WlxSetContextPointer(%p)\n", pWlxContext);
220 TRACE(
"WlxSasNotify(0x%lx)\n", dwSasType);
277 TRACE(
"WlxMessageBox()\n");
279 return MessageBoxW(hwndOwner, lpszText, lpszTitle, fuStyle);
296 TRACE(
"WlxDialogBox()\n");
319 TRACE(
"WlxDialogBoxParam()\n");
322 if (ListEntry ==
NULL)
326 ListEntry->
lParam = dwInitParam;
349 TRACE(
"WlxDialogBoxIndirect()\n");
372 TRACE(
"WlxDialogBoxIndirectParam()\n");
375 if (ListEntry ==
NULL)
379 ListEntry->
lParam = dwInitParam;
398 TRACE(
"WlxSwitchDesktopToUser()\n");
413 TRACE(
"WlxSwitchDesktopToWinlogon()\n");
477 PWSTR pszDesktopName,
543 TRACE(
"WlxSetOption(%lu)\n", Option);
575 TRACE(
"WlxGetOption(%lu)\n", Option);
766 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
827 if (!Functions->WlxInitialize)
830 if (!Functions->WlxNegotiate)
837 TRACE(
"About to negotiate with Gina %S. Winlogon uses version %x\n",
843 TRACE(
"Gina uses WLX_VERSION %lx\n", *DllVersion);
848 if (!Functions->WlxActivateUserShell)
goto cleanup;
850 if (!Functions->WlxDisplayLockedNotice)
goto cleanup;
852 if (!Functions->WlxDisplaySASNotice)
goto cleanup;
854 if (!Functions->WlxIsLockOk)
goto cleanup;
856 if (!Functions->WlxIsLogoffOk)
goto cleanup;
858 if (!Functions->WlxLoggedOnSAS)
goto cleanup;
860 if (!Functions->WlxLoggedOutSAS)
goto cleanup;
862 if (!Functions->WlxLogoff)
goto cleanup;
864 if (!Functions->WlxShutdown)
goto cleanup;
866 if (!Functions->WlxWkstaLockedSAS)
goto cleanup;
878 if (!Functions->WlxDisplayStatusMessage)
goto cleanup;
880 if (!Functions->WlxGetStatusMessage)
goto cleanup;
882 if (!Functions->WlxNetworkProviderLoad)
goto cleanup;
884 if (!Functions->WlxRemoveStatusMessage)
goto cleanup;
888 if (!Functions->WlxScreenSaverNotify)
900 *GinaInstance = hGina;
908 DWORD GinaDllVersion;
910 if (!
LoadGina(&Session->Gina.Functions, &GinaDllVersion, &Session->Gina.hDllInstance))
913 Session->Gina.Context =
NULL;
914 Session->Gina.Version = GinaDllVersion;
915 Session->Gina.UseCtrlAltDelete =
FALSE;
916 Session->SuppressStatus =
FALSE;
918 TRACE(
"Calling WlxInitialize(\"%S\")\n", Session->InteractiveWindowStationName);
919 return Session->Gina.Functions.WlxInitialize(
920 Session->InteractiveWindowStationName,
924 &Session->Gina.Context);
943 ERR(
"WL: Failed to create winsta security!\n");
953 ERR(
"WL: Failed to create application desktop security!\n");
963 ERR(
"WL: Failed to create winlogon desktop security!\n");
973 ERR(
"WL: Failed to create winlogon desktop security!\n");
984 Session->InteractiveWindowStationName =
L"WinSta0";
986 Session->InteractiveWindowStationName,
990 if (!Session->InteractiveWindowStation)
998 ERR(
"WL: SetProcessWindowStation() failed (error %lu)\n",
GetLastError());
1011 &ApplicationDesktopSecurity);
1012 if (!Session->ApplicationDesktop)
1027 &WinlogonDesktopSecurity);
1028 if (!Session->WinlogonDesktop)
1043 &ScreenSaverDesktopSecurity);
1044 if(!Session->ScreenSaverDesktop)
1046 ERR(
"WL: Failed to create Screen-Saver desktop (%lu)\n",
GetLastError());
1068 if (Session->ApplicationDesktop)
1071 Session->ApplicationDesktop =
NULL;
1073 if (Session->WinlogonDesktop)
1076 Session->WinlogonDesktop =
NULL;
1078 if (Session->ScreenSaverDesktop)
1081 Session->ScreenSaverDesktop =
NULL;
1083 if (Session->InteractiveWindowStation)
1086 Session->InteractiveWindowStation =
NULL;
1088 if (WlWinstaSecurityDescriptor)
1090 RtlFreeHeap(RtlGetProcessHeap(), 0, WlWinstaSecurityDescriptor);
1092 if (WlApplicationDesktopSecurityDescriptor)
1094 RtlFreeHeap(RtlGetProcessHeap(), 0, WlApplicationDesktopSecurityDescriptor);
1096 if (WlWinlogonDesktopSecurityDescriptor)
1098 RtlFreeHeap(RtlGetProcessHeap(), 0, WlWinlogonDesktopSecurityDescriptor);
1100 if (WlScreenSaverDesktopSecurityDescriptor)
1102 RtlFreeHeap(RtlGetProcessHeap(), 0, WlScreenSaverDesktopSecurityDescriptor);
int WINAPI WlxDialogBoxIndirectParam(HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam)
BOOL WINAPI SetWindowStationUser(IN HWINSTA hWindowStation, IN PLUID pluid, IN PSID psid OPTIONAL, IN DWORD size)
int WINAPI WlxDialogBoxIndirect(HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc)
struct _WLSESSION * PWLSESSION
PFWLXISLOGOFFOK WlxIsLogoffOk
struct _WLX_DISPATCH_VERSION_1_0 WLX_DISPATCH_VERSION_1_0
static VOID RemoveDialogListEntry(PDIALOG_LIST_ENTRY ListEntry)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
VOID WINAPI WlxWin31Migrate(HANDLE hWlx)
BOOL WINAPI WlxSetTimeout(HANDLE hWlx, DWORD Timeout)
static BOOL WINAPI DefaultWlxScreenSaverNotify(IN PVOID pWlxContext, IN OUT BOOL *pSecure)
#define UNREFERENCED_PARAMETER(P)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
BOOL CreateScreenSaverSecurity(_Out_ PSECURITY_DESCRIPTOR *ScreenSaverDesktopSd)
Creates a security descriptor for the screen saver desktop.
BOOL(WINAPI * PFWLXSCREENSAVERNOTIFY)(PVOID, BOOL *)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
BOOL(WINAPI * PFWLXDISPLAYSTATUSMESSAGE)(PVOID, HDESK, DWORD, PWSTR, PWSTR)
IN PVOID IN PVOID IN USHORT IN USHORT Size
DWORD WINAPI GetLastError(VOID)
int WINAPI WlxAssignShellProtection(HANDLE hWlx, HANDLE hToken, HANDLE hProcess, HANDLE hThread)
_In_ BOOL _In_ HANDLE hProcess
#define WLX_OPTION_DISPATCH_TABLE_SIZE
BOOL WINAPI SetProcessWindowStation(_In_ HWINSTA)
static INT_PTR CALLBACK DefaultWlxWindowProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
int(WINAPI * PFWLXLOGGEDONSAS)(PVOID, DWORD, PVOID)
int(WINAPI * PFWLXWKSTALOCKEDSAS)(PVOID, DWORD)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
VOID WINAPI WlxSetContextPointer(HANDLE hWlx, PVOID pWlxContext)
BOOL(WINAPI * PFWLXINITIALIZE)(LPWSTR, HANDLE, PVOID, PVOID, PVOID *)
BOOL WINAPI SetThreadDesktop(_In_ HDESK)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
BOOL CreateWinlogonDesktopSecurity(_Out_ PSECURITY_DESCRIPTOR *WinlogonDesktopSd)
Creates a security descriptor for the default Winlogon desktop. This descriptor serves as a security ...
int WINAPI WlxDialogBox(HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc)
BOOL(WINAPI * PFWLXREMOVESTATUSMESSAGE)(PVOID)
VOID(WINAPI * PFWLXSHUTDOWN)(PVOID, DWORD)
VOID WINAPI WlxSasNotify(HANDLE hWlx, DWORD dwSasType)
BOOL WINAPI WlxCloseUserDesktop(HANDLE hWlx, PWLX_DESKTOP pDesktop, HANDLE hToken)
BOOL WINAPI WlxGetSourceDesktop(HANDLE hWlx, PWLX_DESKTOP *ppDesktop)
BOOL CreateWindowStationAndDesktops(_Inout_ PWLSESSION Session)
#define WLX_OPTION_SMART_CARD_INFO
BOOL WINAPI WlxCreateUserDesktop(HANDLE hWlx, HANDLE hToken, DWORD Flags, PWSTR pszDesktopName, PWLX_DESKTOP *ppDesktop)
_Reserved_ PVOID Reserved
int WINAPI WlxChangePasswordNotifyEx(HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo, PWSTR ProviderName, PVOID Reserved)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
DWORD WINAPI WlxQueryTerminalServicesData(HANDLE hWlx, PWLX_TERMINAL_SERVICES_DATA pTSData, WCHAR *UserName, WCHAR *Domain)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
static LIST_ENTRY DialogListHead
int WINAPI WlxMessageBox(HANDLE hWlx, HWND hwndOwner, LPWSTR lpszText, LPWSTR lpszTitle, UINT fuStyle)
BOOL(WINAPI * PFWLXNETWORKPROVIDERLOAD)(PVOID, PWLX_MPR_NOTIFY_INFO)
#define WLX_OPTION_SMART_CARD_PRESENT
#define WLX_OPTION_CONTEXT_POINTER
struct _LIST_ENTRY * Flink
VOID(WINAPI * PFWLXDISPLAYLOCKEDNOTICE)(PVOID)
#define WLX_OPTION_USE_CTRL_ALT_DEL
_Must_inspect_result_ _In_ ULONG Flags
#define WLX_OPTION_USE_SMART_CARD
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
BOOL WINAPI WlxQueryClientCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred)
DWORD WINAPI WlxQueryConsoleSwitchCredentials(PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred)
static BOOL GetGinaPath(OUT LPWSTR Path, IN DWORD Len)
BOOL WINAPI SwitchDesktop(_In_ HDESK)
BOOL WINAPI WlxQueryTsLogonCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred)
VOID(WINAPI * PFWLXLOGOFF)(PVOID)
struct _WLX_DISPATCH_VERSION_1_4 WLX_DISPATCH_VERSION_1_4
BOOL(WINAPI * PFWLXACTIVATEUSERSHELL)(PVOID, PWSTR, PWSTR, PVOID)
#define WLX_SAS_TYPE_CTRL_ALT_DEL
VOID(WINAPI * PFWLXDISPLAYSASNOTICE)(PVOID)
int(WINAPI * PFWLXLOGGEDOUTSAS)(PVOID, DWORD, PLUID, PSID, PDWORD, PHANDLE, PWLX_MPR_NOTIFY_INFO, PVOID *)
BOOL(WINAPI * PFWLXSTARTAPPLICATION)(PVOID, PWSTR, PVOID, PWSTR)
BOOL(WINAPI * PFWLXISLOCKOK)(PVOID)
struct _WLX_DISPATCH_VERSION_1_1 WLX_DISPATCH_VERSION_1_1
BOOL CreateApplicationDesktopSecurity(_Out_ PSECURITY_DESCRIPTOR *ApplicationDesktopSd)
Creates a security descriptor for the default application desktop upon its creation.
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
int WINAPI WlxSwitchDesktopToWinlogon(HANDLE hWlx)
static BOOL LoadGina(IN OUT PGINAFUNCTIONS Functions, OUT DWORD *DllVersion, OUT HMODULE *GinaInstance)
#define WLX_CURRENT_VERSION
PRTL_UNICODE_STRING_BUFFER Path
#define WLX_SAS_TYPE_MAX_MSFT_VALUE
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
LPVOID lpSecurityDescriptor
struct _WLX_DISPATCH_VERSION_1_3 WLX_DISPATCH_VERSION_1_3
static PDIALOG_LIST_ENTRY GetDialogListEntry(HWND hwndDlg)
#define InitializeListHead(ListHead)
INT_PTR WINAPI DialogBoxIndirectParamW(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
VOID InitDialogListHead(VOID)
struct _DIALOG_LIST_ENTRY * PDIALOG_LIST_ENTRY
struct _WLX_DISPATCH_VERSION_1_2 WLX_DISPATCH_VERSION_1_2
BOOL CreateWinstaSecurity(_Out_ PSECURITY_DESCRIPTOR *WinstaSd)
Creates a security descriptor for the default window station upon its creation.
BOOL(WINAPI * PFWLXISLOGOFFOK)(PVOID)
BOOL WINAPI WlxDisconnect(VOID)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI WlxSetOption(HANDLE hWlx, DWORD Option, ULONG_PTR Value, ULONG_PTR *OldValue)
HWINSTA WINAPI CreateWindowStationW(_In_opt_ LPCWSTR lpwinsta, _In_ DWORD dwFlags, _In_ ACCESS_MASK dwDesiredAccess, _In_opt_ LPSECURITY_ATTRIBUTES lpsa)
BOOL WINAPI CloseDesktop(_In_ HDESK)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
static PDIALOG_LIST_ENTRY AddDialogListEntry(VOID)
BOOL GinaInit(IN OUT PWLSESSION Session)
char * cleanup(char *str)
static WLX_DISPATCH_VERSION_1_4 FunctionTable
#define GetProcAddress(x, y)
BOOL(WINAPI * PFWLXNEGOTIATE)(DWORD, DWORD *)
VOID WINAPI WlxUseCtrlAltDel(HANDLE hWlx)
int WINAPI WlxChangePasswordNotify(HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo)
HDESK WINAPI CreateDesktopW(LPCWSTR lpszDesktop, LPCWSTR lpszDevice, LPDEVMODEW pDevmode, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa)
BOOL WINAPI WlxQueryInetConnectorCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred)
VOID CloseAllDialogWindows(VOID)
#define RegCloseKey(hKey)
base of all file and directory entries
BOOL WINAPI WlxSetReturnDesktop(HANDLE hWlx, PWLX_DESKTOP pDesktop)
BOOL WINAPI CloseWindowStation(_In_ HWINSTA)
BOOL WINAPI WlxGetOption(HANDLE hWlx, DWORD Option, ULONG_PTR *Value)
int WINAPI WlxDialogBoxParam(HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam)
struct _DIALOG_LIST_ENTRY DIALOG_LIST_ENTRY
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
BOOL(WINAPI * PFWLXGETSTATUSMESSAGE)(PVOID, DWORD *, PWSTR, DWORD)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define HKEY_LOCAL_MACHINE
int WINAPI WlxSwitchDesktopToUser(HANDLE hWlx)