/* * WinWlx.h * * WinLogon eXtension * * Contributors: * Created by Thomas Weidenmueller * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __WINWLX_H #define __WINWLX_H #ifdef __cplusplus extern "C" { #endif #define WLX_VERSION_1_0 0x00010000 #define WLX_VERSION_1_1 0x00010001 #define WLX_VERSION_1_2 0x00010002 #define WLX_VERSION_1_3 0x00010003 #define WLX_VERSION_1_4 0x00010004 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4) #define WLX_SAS_TYPE_TIMEOUT 0x0000 #define WLX_SAS_TYPE_CTRL_ALT_DEL 0x0001 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT 0x0002 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY 0x0003 #define WLX_SAS_TYPE_USER_LOGOFF 0x0004 #define WLX_SAS_TYPE_SC_INSERT 0x0005 #define WLX_SAS_TYPE_SC_REMOVE 0x0006 #define WLX_SAS_TYPE_AUTHENTICATED 0x0007 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED 0x0008 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED 0x0009 #define WLX_SAS_TYPE_SWITCHUSER 0x000A #define WLX_SAS_TYPE_MAX_MSFT_VALUE 0x007F #define WLX_LOGON_OPT_NO_PROFILE 0x0001 #define WLX_PROFILE_TYPE_V1_0 0x0001 #define WLX_PROFILE_TYPE_V2_0 0x0002 /* Default */ #define WLX_SAS_ACTION_LOGON 0x0001 #define WLX_SAS_ACTION_NONE 0x0002 #define WLX_SAS_ACTION_LOCK_WKSTA 0x0003 #define WLX_SAS_ACTION_LOGOFF 0x0004 #define WLX_SAS_ACTION_SHUTDOWN 0x0005 #define WLX_SAS_ACTION_PWD_CHANGED 0x0006 #define WLX_SAS_ACTION_TASKLIST 0x0007 #define WLX_SAS_ACTION_UNLOCK_WKSTA 0x0008 #define WLX_SAS_ACTION_FORCE_LOGOFF 0x0009 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF 0x000A #define WLX_SAS_ACTION_SHUTDOWN_REBOOT 0x000B #define WLX_SAS_ACTION_SHUTDOWN_SLEEP 0x000C #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 0x000D #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE 0x000E #define WLX_SAS_ACTION_RECONNECTED 0x000F #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF 0x0010 #define WLX_SAS_ACTION_SWITCH_CONSOLE 0x0011 #define WLX_WM_SAS (WM_USER + 0x0259) #define WLX_DLG_SAS 0x0065 #define WLX_DLG_INPUT_TIMEOUT 0x0066 /* Input (keys, ...) timed out */ #define WLX_DLG_SCREEN_SAVER_TIMEOUT 0x0067 /* Screen saver activated */ #define WLX_DLG_USER_LOGOFF 0x0068 /* User logged off */ #define WLX_DIRECTORY_LENGTH 0x0100 #define WLX_CREDENTIAL_TYPE_V1_0 0x0001 #define WLX_CREDENTIAL_TYPE_V2_0 0x0002 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 0x0001 #define STATUSMSG_OPTION_NOANIMATION 0x0001 #define STATUSMSG_OPTION_SETFOREGROUND 0x0002 typedef struct _WLX_CLIENT_CREDENTIALS_INFO { DWORD dwType; PWSTR pszUserName; PWSTR pszDomain; PWSTR pszPassword; BOOL fPromptForPassword; } WLX_CLIENT_CREDENTIALS_INFO_V1_0, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0; typedef struct _WLX_CLIENT_CREDENTIALS_INFO_2_0 { DWORD dwType; PWSTR pszUserName; PWSTR pszDomain; PWSTR pszPassword; BOOL fPromptForPassword; BOOL fDisconnectOnLogonFailure; } WLX_CLIENT_CREDENTIALS_INFO_V2_0, *PWLX_CLIENT_CREDENTIALS_INFO_V2_0; typedef struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO { DWORD dwType; HANDLE UserToken; LUID LogonId; QUOTA_LIMITS Quotas; PWSTR UserName; PWSTR Domain; LARGE_INTEGER LogonTime; BOOL SmartCardLogon; ULONG ProfileLength; DWORD MessageType; USHORT LogonCount; USHORT BadPasswordCount; LARGE_INTEGER ProfileLogonTime; LARGE_INTEGER LogoffTime; LARGE_INTEGER KickOffTime; LARGE_INTEGER PasswordLastSet; LARGE_INTEGER PasswordCanChange; LARGE_INTEGER PasswordMustChange; PWSTR LogonScript; PWSTR HomeDirectory; PWSTR FullName; PWSTR ProfilePath; PWSTR HomeDirectoryDrive; PWSTR LogonServer; ULONG UserFlags; ULONG PrivateDataLen; PBYTE PrivateData; } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0, *PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0; typedef struct _WLX_MPR_NOTIFY_INFO { PWSTR pszUserName; PWSTR pszDomain; PWSTR pszPassword; PWSTR pszOldPassword; } WLX_MPR_NOTIFY_INFO, *PWLX_MPR_NOTIFY_INFO; typedef struct _WLX_PROFILE_V1_0 { DWORD dwType; PWSTR pszProfile; } WLX_PROFILE_V1_0, *PWLX_PROFILE_V1_0; typedef struct _WLX_PROFILE_V2_0 { DWORD dwType; PWSTR pszProfile; PWSTR pszPolicy; PWSTR pszNetworkDefaultUserProfile; PWSTR pszServerName; PWSTR pszEnvironment; } WLX_PROFILE_V2_0, *PWLX_PROFILE_V2_0; typedef struct _WLX_SC_NOTIFICATION_INFO { PWSTR pszCard; PWSTR pszReader; PWSTR pszContainer; PWSTR pszCryptoProvider; } WLX_SC_NOTIFICATION_INFO, *PWLX_SC_NOTIFICATION_INFO; typedef struct _WLX_TERMINAL_SERVICES_DATA { WCHAR ProfilePath[WLX_DIRECTORY_LENGTH + 1]; WCHAR HomeDir[WLX_DIRECTORY_LENGTH + 1]; WCHAR HomeDirDrive[4]; } WLX_TERMINAL_SERVICES_DATA, *PWLX_TERMINAL_SERVICES_DATA; /* GINA Version 1.0 */ BOOL WINAPI WlxActivateUserShell( _In_ PVOID pWlxContext, _In_ PWSTR pszDesktopName, _In_ PWSTR pszMprLogonScript, _In_ PVOID pEnvironment); VOID WINAPI WlxDisplayLockedNotice( _In_ PVOID pWlxContext); VOID WINAPI WlxDisplaySASNotice( _In_ PVOID pWlxContext); BOOL WINAPI WlxInitialize( _In_ LPWSTR lpWinsta, _In_ HANDLE hWlx, _In_ PVOID pvReserved, _In_ PVOID pWinlogonFunctions, _Out_ PVOID *pWlxContext); BOOL WINAPI WlxIsLockOk( _In_ PVOID pWlxContext); BOOL WINAPI WlxIsLogoffOk( _In_ PVOID pWlxContext); INT WINAPI WlxLoggedOnSAS( _In_ PVOID pWlxContext, _In_ DWORD dwSasType, _In_ PVOID pReserved); INT WINAPI WlxLoggedOutSAS( _In_ PVOID pWlxContext, _In_ DWORD dwSasType, _Out_ PLUID pAuthenticationId, _Inout_ PSID pLogonSid, _Out_ PDWORD pdwOptions, _Out_ PHANDLE phToken, _Out_ PWLX_MPR_NOTIFY_INFO pNprNotifyInfo, _Out_ PVOID *pProfile); VOID WINAPI WlxLogoff( _In_ PVOID pWlxContext); BOOL WINAPI WlxNegotiate( _In_ DWORD dwWinlogonVersion, _Out_ PDWORD pdwDllVersion); VOID WINAPI WlxShutdown( _In_ PVOID pWlxContext, _In_ DWORD ShutdownType); INT WINAPI WlxWkstaLockedSAS( _In_ PVOID pWlxContext, _In_ DWORD dwSasType); /* GINA Version 1.1 */ BOOL WINAPI WlxScreenSaverNotify( _In_ PVOID pWlxContext, _Inout_ BOOL *pSecure); BOOL WINAPI WlxStartApplication( _In_ PVOID pWlxContext, _In_ PWSTR pszDesktopName, _In_ PVOID pEnvironment, _In_ PWSTR pszCmdLine); /* GINA Version 1.3 */ BOOL WINAPI WlxDisplayStatusMessage( _In_ PVOID pWlxContext, _In_ HDESK hDesktop, _In_ DWORD dwOptions, _In_ PWSTR pTitle, _In_ PWSTR pMessage); BOOL WINAPI WlxGetStatusMessage( _In_ PVOID pWlxContext, _Out_ DWORD *pdwOptions, _Out_ PWSTR pMessage, _In_ DWORD dwBufferSize); BOOL WINAPI WlxNetworkProviderLoad( _In_ PVOID pWlxContext, _Out_ PWLX_MPR_NOTIFY_INFO pNprNotifyInfo); BOOL WINAPI WlxRemoveStatusMessage( _In_ PVOID pWlxContext); /* GINA Version 1.4 */ VOID WINAPI WlxDisconnectNotify( _In_ PVOID pWlxContext); BOOL WINAPI WlxGetConsoleSwitchCredentials( _In_ PVOID pWlxContext, _Out_ PVOID pCredInfo); VOID WINAPI WlxReconnectNotify( _In_ PVOID pWlxContext); /* Services that Winlogon provides */ #define WLX_DESKTOP_NAME 0x0001 /* Name present */ #define WLX_DESKTOP_HANDLE 0x0002 /* Handle present */ #define WLX_CREATE_INSTANCE_ONLY 0x0001 #define WLX_CREATE_USER 0x0002 #define WLX_OPTION_USE_CTRL_ALT_DEL 0x0001 #define WLX_OPTION_CONTEXT_POINTER 0x0002 #define WLX_OPTION_USE_SMART_CARD 0x0003 #define WLX_OPTION_FORCE_LOGOFF_TIME 0x0004 #define WLX_OPTION_IGNORE_AUTO_LOGON 0x0008 #define WLX_OPTION_NO_SWITCH_ON_SAS 0x0009 #define WLX_OPTION_SMART_CARD_PRESENT 0x00010001 #define WLX_OPTION_SMART_CARD_INFO 0x00010002 #define WLX_OPTION_DISPATCH_TABLE_SIZE 0x00010003 typedef struct _WLX_DESKTOP { DWORD Size; DWORD Flags; HDESK hDesktop; PWSTR pszDesktopName; } WLX_DESKTOP, *PWLX_DESKTOP; typedef INT (WINAPI *PWLX_ASSIGN_SHELL_PROTECTION)( _In_ HANDLE hWlx, _In_ HANDLE hToken, _In_ HANDLE hProcess, _In_ HANDLE hThread); typedef INT (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY)( _In_ HANDLE hWlx, _In_ PWLX_MPR_NOTIFY_INFO pMprInfo, _In_ DWORD dwChangeInfo); typedef INT (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY_EX)( _In_ HANDLE hWlx, _In_ PWLX_MPR_NOTIFY_INFO pMprInfo, _In_ DWORD dwChangeInfo, _In_ PWSTR ProviderName, _In_ PVOID Reserved); typedef BOOL (WINAPI *PWLX_CLOSE_USER_DESKTOP)( _In_ HANDLE hWlx, _In_ PWLX_DESKTOP pDesktop, _In_ HANDLE hToken); typedef BOOL (WINAPI *PWLX_CREATE_USER_DESKTOP)( _In_ HANDLE hWlx, _In_ HANDLE hToken, _In_ DWORD Flags, _In_ PWSTR pszDesktopName, _Out_ PWLX_DESKTOP *ppDesktop); typedef INT (WINAPI *PWLX_DIALOG_BOX)( _In_ HANDLE hWlx, _In_ HANDLE hInst, _In_ LPWSTR lpszTemplate, _In_ HWND hwndOwner, _In_ DLGPROC dlgprc); typedef INT (WINAPI *PWLX_DIALOG_BOX_INDIRECT)( _In_ HANDLE hWlx, _In_ HANDLE hInst, _In_ LPCDLGTEMPLATE hDialogTemplate, _In_ HWND hwndOwner, _In_ DLGPROC dlgprc); typedef INT (WINAPI *PWLX_DIALOG_BOX_INDIRECT_PARAM)( _In_ HANDLE hWlx, _In_ HANDLE hInst, _In_ LPCDLGTEMPLATE hDialogTemplate, _In_ HWND hwndOwner, _In_ DLGPROC dlgprc, _In_ LPARAM dwInitParam); typedef INT (WINAPI *PWLX_DIALOG_BOX_PARAM)( _In_ HANDLE hWlx, _In_ HANDLE hInst, _In_ LPWSTR lpszTemplate, _In_ HWND hwndOwner, _In_ DLGPROC dlgprc, _In_ LPARAM dwInitParam); typedef BOOL (WINAPI *PWLX_DISCONNECT)(VOID); typedef BOOL (WINAPI *PWLX_GET_OPTION)( _In_ HANDLE hWlx, _In_ DWORD Option, _Out_ ULONG_PTR *Value); typedef BOOL (WINAPI *PWLX_GET_SOURCE_DESKTOP)( _In_ HANDLE hWlx, _Out_ PWLX_DESKTOP *ppDesktop); typedef INT (WINAPI *PWLX_MESSAGE_BOX)( _In_ HANDLE hWlx, _In_ HWND hwndOwner, _In_ LPWSTR lpszText, _In_ LPWSTR lpszTitle, _In_ UINT fuStyle); typedef BOOL (WINAPI *PWLX_QUERY_CLIENT_CREDENTIALS)( _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred); typedef DWORD (WINAPI *PWLX_QUERY_CONSOLESWITCH_CREDENTIALS)( _Out_ PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred); typedef BOOL (WINAPI *PWLX_QUERY_IC_CREDENTIALS)( _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred); typedef DWORD (WINAPI *PWLX_QUERY_TERMINAL_SERVICES_DATA)( _In_ HANDLE hWlx, _Out_ PWLX_TERMINAL_SERVICES_DATA pTSData, _In_ WCHAR *UserName, _In_ WCHAR *Domain); typedef BOOL (WINAPI *PWLX_QUERY_TS_LOGON_CREDENTIALS)( _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred); typedef VOID (WINAPI *PWLX_SAS_NOTIFY)( _In_ HANDLE hWlx, _In_ DWORD dwSasType); typedef VOID (WINAPI *PWLX_SET_CONTEXT_POINTER)( _In_ HANDLE hWlx, _In_ PVOID pWlxContext); typedef BOOL (WINAPI *PWLX_SET_OPTION)( _In_ HANDLE hWlx, _In_ DWORD Option, _In_ ULONG_PTR Value, _Out_ ULONG_PTR *OldValue); typedef BOOL (WINAPI *PWLX_SET_RETURN_DESKTOP)( _In_ HANDLE hWlx, _In_ PWLX_DESKTOP pDesktop); typedef BOOL (WINAPI *PWLX_SET_TIMEOUT)( _In_ HANDLE hWlx, _In_ DWORD Timeout); typedef INT (WINAPI *PWLX_SWITCH_DESKTOP_TO_USER)( _In_ HANDLE hWlx); typedef INT (WINAPI *PWLX_SWITCH_DESKTOP_TO_WINLOGON)( _In_ HANDLE hWlx); typedef VOID (WINAPI *PWLX_USE_CTRL_ALT_DEL)( _In_ HANDLE hWlx); typedef VOID (WINAPI *PWLX_WIN31_MIGRATE)( _In_ HANDLE hWlx); /* Function dispatch tables */ typedef struct _WLX_DISPATCH_VERSION_1_0 { PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel; PWLX_SET_CONTEXT_POINTER WlxSetContextPointer; PWLX_SAS_NOTIFY WlxSasNotify; PWLX_SET_TIMEOUT WlxSetTimeout; PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection; PWLX_MESSAGE_BOX WlxMessageBox; PWLX_DIALOG_BOX WlxDialogBox; PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect; PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser; PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon; PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify; } WLX_DISPATCH_VERSION_1_0, *PWLX_DISPATCH_VERSION_1_0; typedef struct _WLX_DISPATCH_VERSION_1_1 { PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel; PWLX_SET_CONTEXT_POINTER WlxSetContextPointer; PWLX_SAS_NOTIFY WlxSasNotify; PWLX_SET_TIMEOUT WlxSetTimeout; PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection; PWLX_MESSAGE_BOX WlxMessageBox; PWLX_DIALOG_BOX WlxDialogBox; PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect; PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser; PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon; PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify; PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop; PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop; PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop; PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx; } WLX_DISPATCH_VERSION_1_1, *PWLX_DISPATCH_VERSION_1_1; typedef struct _WLX_DISPATCH_VERSION_1_2 { PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel; PWLX_SET_CONTEXT_POINTER WlxSetContextPointer; PWLX_SAS_NOTIFY WlxSasNotify; PWLX_SET_TIMEOUT WlxSetTimeout; PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection; PWLX_MESSAGE_BOX WlxMessageBox; PWLX_DIALOG_BOX WlxDialogBox; PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect; PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser; PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon; PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify; PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop; PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop; PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop; PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx; PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop; } WLX_DISPATCH_VERSION_1_2, *PWLX_DISPATCH_VERSION_1_2; typedef struct _WLX_DISPATCH_VERSION_1_3 { PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel; PWLX_SET_CONTEXT_POINTER WlxSetContextPointer; PWLX_SAS_NOTIFY WlxSasNotify; PWLX_SET_TIMEOUT WlxSetTimeout; PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection; PWLX_MESSAGE_BOX WlxMessageBox; PWLX_DIALOG_BOX WlxDialogBox; PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect; PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser; PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon; PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify; PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop; PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop; PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop; PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx; PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop; PWLX_SET_OPTION WlxSetOption; PWLX_GET_OPTION WlxGetOption; PWLX_WIN31_MIGRATE WlxWin31Migrate; PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials; PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials; PWLX_DISCONNECT WlxDisconnect; PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData; } WLX_DISPATCH_VERSION_1_3, *PWLX_DISPATCH_VERSION_1_3; typedef struct _WLX_DISPATCH_VERSION_1_4 { PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel; PWLX_SET_CONTEXT_POINTER WlxSetContextPointer; PWLX_SAS_NOTIFY WlxSasNotify; PWLX_SET_TIMEOUT WlxSetTimeout; PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection; PWLX_MESSAGE_BOX WlxMessageBox; PWLX_DIALOG_BOX WlxDialogBox; PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect; PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser; PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon; PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify; PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop; PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop; PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop; PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx; PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop; PWLX_SET_OPTION WlxSetOption; PWLX_GET_OPTION WlxGetOption; PWLX_WIN31_MIGRATE WlxWin31Migrate; PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials; PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials; PWLX_DISCONNECT WlxDisconnect; PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData; PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials; PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials; } WLX_DISPATCH_VERSION_1_4, *PWLX_DISPATCH_VERSION_1_4; /* Non-GINA notification DLLs */ typedef DWORD (CALLBACK *PFNMSGECALLBACK)( _In_ BOOL bVerbose, _In_ LPWSTR lpMessage); typedef struct _WLX_NOTIFICATION_INFO { ULONG Size; ULONG Flags; PWSTR UserName; PWSTR Domain; PWSTR WindowStation; HANDLE hToken; HDESK hDesktop; PFNMSGECALLBACK pStatusCallback; } WLX_NOTIFICATION_INFO, *PWLX_NOTIFICATION_INFO; #ifdef __cplusplus } #endif #endif /*__WINWLX_H */