/* * 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 #pragma pack(push,4) #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( PVOID pWlxContext, PWSTR pszDesktopName, PWSTR pszMprLogonScript, PVOID pEnvironment); VOID WINAPI WlxDisplayLockedNotice( PVOID pWlxContext); VOID WINAPI WlxDisplaySASNotice( PVOID pWlxContext); BOOL WINAPI WlxInitialize( LPWSTR lpWinsta, HANDLE hWlx, PVOID pvReserved, PVOID pWinlogonFunctions, PVOID *pWlxContext); BOOL WINAPI WlxIsLockOk( PVOID pWlxContext); BOOL WINAPI WlxIsLogoffOk( PVOID pWlxContext); int WINAPI WlxLoggedOnSAS( PVOID pWlxContext, DWORD dwSasType, PVOID pReserved); int WINAPI WlxLoggedOutSAS( PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId, PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken, PWLX_MPR_NOTIFY_INFO pNprNotifyInfo, PVOID *pProfile); VOID WINAPI WlxLogoff( PVOID pWlxContext); BOOL WINAPI WlxNegotiate( DWORD dwWinlogonVersion, PDWORD pdwDllVersion); VOID WINAPI WlxShutdown( PVOID pWlxContext, DWORD ShutdownType); int WINAPI WlxWkstaLockedSAS( PVOID pWlxContext, DWORD dwSasType); /* GINA Version 1.1 */ BOOL WINAPI WlxScreenSaverNotify( PVOID pWlxContext, BOOL *pSecure); BOOL WINAPI WlxStartApplication( PVOID pWlxContext, PWSTR pszDesktopName, PVOID pEnvironment, PWSTR pszCmdLine); /* GINA Version 1.3 */ BOOL WINAPI WlxDisplayStatusMessage( PVOID pWlxContext, HDESK hDesktop, DWORD dwOptions, PWSTR pTitle, PWSTR pMessage); BOOL WINAPI WlxGetStatusMessage( PVOID pWlxContext, DWORD *pdwOptions, PWSTR pMessage, DWORD dwBufferSize); BOOL WINAPI WlxNetworkProviderLoad( PVOID pWlxContext, PWLX_MPR_NOTIFY_INFO pNprNotifyInfo); BOOL WINAPI WlxRemoveStatusMessage( PVOID pWlxContext); /* GINA Version 1.4 */ VOID WINAPI WlxDisconnectNotify( PVOID pWlxContext); BOOL WINAPI WlxGetConsoleSwitchCredentials( PVOID pWlxContext, PVOID pCredInfo); VOID WINAPI WlxReconnectNotify( 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)( HANDLE hWlx, HANDLE hToken, HANDLE hProcess, HANDLE hThread); typedef BOOL (WINAPI *PWLX_CLOSE_USER_DESKTOP)( HANDLE hWlx, PWLX_DESKTOP pDesktop, HANDLE hToken); typedef int (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY)( HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo); typedef int (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY_EX)( HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo, PWSTR ProviderName, PVOID Reserved); typedef BOOL (WINAPI *PWLX_CREATE_USER_DESKTOP)( HANDLE hWlx, HANDLE hToken, DWORD Flags, PWSTR pszDesktopName, PWLX_DESKTOP *ppDesktop); typedef int (WINAPI *PWLX_DIALOG_BOX)( HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc); typedef int (WINAPI *PWLX_DIALOG_BOX_INDIRECT)( HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc); typedef int (WINAPI *PWLX_DIALOG_BOX_INDIRECT_PARAM)( HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam); typedef int (WINAPI *PWLX_DIALOG_BOX_PARAM)( HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam); typedef BOOL (WINAPI *PWLX_DISCONNECT)(); typedef BOOL (WINAPI *PWLX_GET_OPTION)( HANDLE hWlx, DWORD Option, ULONG_PTR *Value); typedef BOOL (WINAPI *PWLX_GET_SOURCE_DESKTOP)( HANDLE hWlx, PWLX_DESKTOP *ppDesktop); typedef int (WINAPI *PWLX_MESSAGE_BOX)( HANDLE hWlx, HWND hwndOwner, LPWSTR lpszText, LPWSTR lpszTitle, UINT fuStyle); typedef BOOL (WINAPI *PWLX_QUERY_CLIENT_CREDENTIALS)( PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred); typedef DWORD (WINAPI *PWLX_QUERY_CONSOLESWITCH_CREDENTIALS)( PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred); typedef BOOL (WINAPI *PWLX_QUERY_IC_CREDENTIALS)( PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred); typedef DWORD (WINAPI *PWLX_QUERY_TERMINAL_SERVICES_DATA)( HANDLE hWlx, PWLX_TERMINAL_SERVICES_DATA pTSData, WCHAR *UserName, WCHAR *Domain); typedef BOOL (WINAPI *PWLX_QUERY_TS_LOGON_CREDENTIALS)( PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred); typedef VOID (WINAPI *PWLX_SAS_NOTIFY)( HANDLE hWlx, DWORD dwSasType); typedef VOID (WINAPI *PWLX_SET_CONTEXT_POINTER)( HANDLE hWlx, PVOID pWlxContext); typedef BOOL (WINAPI *PWLX_SET_RETURN_DESKTOP)( HANDLE hWlx, PWLX_DESKTOP pDesktop); typedef BOOL (WINAPI *PWLX_SET_OPTION)( HANDLE hWlx, DWORD Option, ULONG_PTR Value, ULONG_PTR *OldValue); typedef BOOL (WINAPI *PWLX_SET_TIMEOUT)( HANDLE hWlx, DWORD Timeout); typedef int (WINAPI *PWLX_SWITCH_DESKTOP_TO_USER)( HANDLE hWlx); typedef int (WINAPI *PWLX_SWITCH_DESKTOP_TO_WINLOGON)( HANDLE hWlx); typedef VOID (WINAPI *PWLX_USE_CTRL_ALT_DEL)( HANDLE hWlx); typedef VOID (WINAPI *PWLX_WIN31_MIGRATE)( 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)( BOOL bVerbose, 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; #pragma pack(pop) #ifdef __cplusplus } #endif #endif /*__WINWLX_H */ /* EOF */