Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _WINWLX_
      7 #define _WINWLX_
      8 
      9 #define WLX_VERSION_1_0 (0X00010000)
     10 #define WLX_VERSION_1_1 (0X00010001)
     11 #define WLX_VERSION_1_2 (0X00010002)
     12 #define WLX_VERSION_1_3 (0X00010003)
     13 #define WLX_VERSION_1_4 (0X00010004)
     14 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
     15 
     16 #define WLX_SAS_TYPE_TIMEOUT (0)
     17 #define WLX_SAS_TYPE_CTRL_ALT_DEL (1)
     18 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT (2)
     19 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY (3)
     20 #define WLX_SAS_TYPE_USER_LOGOFF (4)
     21 #define WLX_SAS_TYPE_SC_INSERT (5)
     22 #define WLX_SAS_TYPE_SC_REMOVE (6)
     23 #define WLX_SAS_TYPE_AUTHENTICATED (7)
     24 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED (8)
     25 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED (9)
     26 #define WLX_SAS_TYPE_SWITCHUSER (10)
     27 #define WLX_SAS_TYPE_MAX_MSFT_VALUE (127)
     28 
     29 typedef struct _WLX_SC_NOTIFICATION_INFO {
     30   PWSTR pszCard;
     31   PWSTR pszReader;
     32   PWSTR pszContainer;
     33   PWSTR pszCryptoProvider;
     34 } WLX_SC_NOTIFICATION_INFO,*PWLX_SC_NOTIFICATION_INFO;
     35 
     36 #define WLX_LOGON_OPT_NO_PROFILE (0x00000001)
     37 
     38 #define WLX_PROFILE_TYPE_V1_0 (1)
     39 #define WLX_PROFILE_TYPE_V2_0 (2)
     40 
     41 #define WLX_SAS_ACTION_LOGON (1)
     42 #define WLX_SAS_ACTION_NONE (2)
     43 #define WLX_SAS_ACTION_LOCK_WKSTA (3)
     44 #define WLX_SAS_ACTION_LOGOFF (4)
     45 #define WLX_SAS_ACTION_SHUTDOWN (5)
     46 #define WLX_SAS_ACTION_PWD_CHANGED (6)
     47 #define WLX_SAS_ACTION_TASKLIST (7)
     48 #define WLX_SAS_ACTION_UNLOCK_WKSTA (8)
     49 #define WLX_SAS_ACTION_FORCE_LOGOFF (9)
     50 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF (10)
     51 #define WLX_SAS_ACTION_SHUTDOWN_REBOOT (11)
     52 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP (12)
     53 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 (13)
     54 #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE (14)
     55 #define WLX_SAS_ACTION_RECONNECTED (15)
     56 #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF (16)
     57 #define WLX_SAS_ACTION_SWITCH_CONSOLE (17)
     58 
     59 #define WLX_WM_SAS (WM_USER + 601)
     60 
     61 #define WLX_DLG_SAS 101
     62 #define WLX_DLG_INPUT_TIMEOUT 102
     63 #define WLX_DLG_SCREEN_SAVER_TIMEOUT 103
     64 #define WLX_DLG_USER_LOGOFF 104
     65 
     66 typedef struct _WLX_PROFILE_V1_0 {
     67   DWORD dwType;
     68   PWSTR pszProfile;
     69 } WLX_PROFILE_V1_0,*PWLX_PROFILE_V1_0;
     70 
     71 typedef struct _WLX_PROFILE_V2_0 {
     72   DWORD dwType;
     73   PWSTR pszProfile;
     74   PWSTR pszPolicy;
     75   PWSTR pszNetworkDefaultUserProfile;
     76   PWSTR pszServerName;
     77   PWSTR pszEnvironment;
     78 } WLX_PROFILE_V2_0,*PWLX_PROFILE_V2_0;
     79 
     80 typedef struct _WLX_MPR_NOTIFY_INFO {
     81   PWSTR pszUserName;
     82   PWSTR pszDomain;
     83   PWSTR pszPassword;
     84   PWSTR pszOldPassword;
     85 } WLX_MPR_NOTIFY_INFO,*PWLX_MPR_NOTIFY_INFO;
     86 
     87 #define WLX_DIRECTORY_LENGTH 256
     88 
     89 typedef struct _WLX_TERMINAL_SERVICES_DATA {
     90   WCHAR ProfilePath[WLX_DIRECTORY_LENGTH + 1];
     91   WCHAR HomeDir[WLX_DIRECTORY_LENGTH + 1];
     92   WCHAR HomeDirDrive[4];
     93 } WLX_TERMINAL_SERVICES_DATA,*PWLX_TERMINAL_SERVICES_DATA;
     94 
     95 #define WLX_CREDENTIAL_TYPE_V1_0 (1)
     96 #define WLX_CREDENTIAL_TYPE_V2_0 (2)
     97 
     98 typedef struct _WLX_CLIENT_CREDENTIALS_INFO {
     99   DWORD dwType;
    100   PWSTR pszUserName;
    101   PWSTR pszDomain;
    102   PWSTR pszPassword;
    103   WINBOOL fPromptForPassword;
    104 } WLX_CLIENT_CREDENTIALS_INFO_V1_0,*PWLX_CLIENT_CREDENTIALS_INFO_V1_0;
    105 
    106 typedef struct _WLX_CLIENT_CREDENTIALS_INFO_2_0 {
    107   DWORD dwType;
    108   PWSTR pszUserName;
    109   PWSTR pszDomain;
    110   PWSTR pszPassword;
    111   WINBOOL fPromptForPassword;
    112   WINBOOL fDisconnectOnLogonFailure;
    113 } WLX_CLIENT_CREDENTIALS_INFO_V2_0,*PWLX_CLIENT_CREDENTIALS_INFO_V2_0;
    114 
    115 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 (1)
    116 
    117 typedef struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO {
    118   DWORD dwType;
    119   HANDLE UserToken;
    120   LUID LogonId;
    121   QUOTA_LIMITS Quotas;
    122   PWSTR UserName;
    123   PWSTR Domain;
    124   LARGE_INTEGER LogonTime;
    125   WINBOOL SmartCardLogon;
    126   ULONG ProfileLength;
    127   DWORD MessageType;
    128   USHORT LogonCount;
    129   USHORT BadPasswordCount;
    130   LARGE_INTEGER ProfileLogonTime;
    131   LARGE_INTEGER LogoffTime;
    132   LARGE_INTEGER KickOffTime;
    133   LARGE_INTEGER PasswordLastSet;
    134   LARGE_INTEGER PasswordCanChange;
    135   LARGE_INTEGER PasswordMustChange;
    136   PWSTR LogonScript;
    137   PWSTR HomeDirectory;
    138   PWSTR FullName;
    139   PWSTR ProfilePath;
    140   PWSTR HomeDirectoryDrive;
    141   PWSTR LogonServer;
    142   ULONG UserFlags;
    143   ULONG PrivateDataLen;
    144   PBYTE PrivateData;
    145 } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0,*PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
    146 
    147 WINBOOL WINAPI WlxNegotiate(DWORD dwWinlogonVersion,PDWORD pdwDllVersion);
    148 WINBOOL WINAPI WlxInitialize(LPWSTR lpWinsta,HANDLE hWlx,PVOID pvReserved,PVOID pWinlogonFunctions,PVOID *pWlxContext);
    149 VOID WINAPI WlxDisplaySASNotice(PVOID pWlxContext);
    150 int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,PVOID *pProfile);
    151 WINBOOL WINAPI WlxActivateUserShell(PVOID pWlxContext,PWSTR pszDesktopName,PWSTR pszMprLogonScript,PVOID pEnvironment);
    152 int WINAPI WlxLoggedOnSAS(PVOID pWlxContext,DWORD dwSasType,PVOID pReserved);
    153 VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext);
    154 int WINAPI WlxWkstaLockedSAS(PVOID pWlxContext,DWORD dwSasType);
    155 WINBOOL WINAPI WlxIsLockOk(PVOID pWlxContext);
    156 WINBOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext);
    157 VOID WINAPI WlxLogoff(PVOID pWlxContext);
    158 VOID WINAPI WlxShutdown(PVOID pWlxContext,DWORD ShutdownType);
    159 WINBOOL WINAPI WlxScreenSaverNotify(PVOID pWlxContext,WINBOOL *pSecure);
    160 WINBOOL WINAPI WlxStartApplication(PVOID pWlxContext,PWSTR pszDesktopName,PVOID pEnvironment,PWSTR pszCmdLine);
    161 WINBOOL WINAPI WlxNetworkProviderLoad(PVOID pWlxContext,PWLX_MPR_NOTIFY_INFO pNprNotifyInfo);
    162 
    163 #define STATUSMSG_OPTION_NOANIMATION 0x00000001
    164 #define STATUSMSG_OPTION_SETFOREGROUND 0x00000002
    165 
    166 WINBOOL WINAPI WlxDisplayStatusMessage(PVOID pWlxContext,HDESK hDesktop,DWORD dwOptions,PWSTR pTitle,PWSTR pMessage);
    167 WINBOOL WINAPI WlxGetStatusMessage(PVOID pWlxContext,DWORD *pdwOptions,PWSTR pMessage,DWORD dwBufferSize);
    168 WINBOOL WINAPI WlxRemoveStatusMessage(PVOID pWlxContext);
    169 WINBOOL WINAPI WlxGetConsoleSwitchCredentials (PVOID pWlxContext,PVOID pCredInfo);
    170 VOID WINAPI WlxReconnectNotify (PVOID pWlxContext);
    171 VOID WINAPI WlxDisconnectNotify (PVOID pWlxContext);
    172 
    173 typedef struct _WLX_DESKTOP {
    174   DWORD Size;
    175   DWORD Flags;
    176   HDESK hDesktop;
    177   PWSTR pszDesktopName;
    178 } WLX_DESKTOP,*PWLX_DESKTOP;
    179 
    180 #define WLX_DESKTOP_NAME 0x00000001
    181 #define WLX_DESKTOP_HANDLE 0x00000002
    182 
    183 typedef VOID (WINAPI *PWLX_USE_CTRL_ALT_DEL)(HANDLE hWlx);
    184 typedef VOID (WINAPI *PWLX_SET_CONTEXT_POINTER)(HANDLE hWlx,PVOID pWlxContext);
    185 typedef VOID (WINAPI *PWLX_SAS_NOTIFY)(HANDLE hWlx,DWORD dwSasType);
    186 typedef WINBOOL (WINAPI *PWLX_SET_TIMEOUT)(HANDLE hWlx,DWORD Timeout);
    187 typedef int (WINAPI *PWLX_ASSIGN_SHELL_PROTECTION)(HANDLE hWlx,HANDLE hToken,HANDLE hProcess,HANDLE hThread);
    188 typedef int (WINAPI *PWLX_MESSAGE_BOX)(HANDLE hWlx,HWND hwndOwner,LPWSTR lpszText,LPWSTR lpszTitle,UINT fuStyle);
    189 typedef int (WINAPI *PWLX_DIALOG_BOX)(HANDLE hWlx,HANDLE hInst,LPWSTR lpszTemplate,HWND hwndOwner,DLGPROC dlgprc);
    190 typedef int (WINAPI *PWLX_DIALOG_BOX_INDIRECT)(HANDLE hWlx,HANDLE hInst,LPCDLGTEMPLATE hDialogTemplate,HWND hwndOwner,DLGPROC dlgprc);
    191 typedef int (WINAPI *PWLX_DIALOG_BOX_PARAM)(HANDLE hWlx,HANDLE hInst,LPWSTR lpszTemplate,HWND hwndOwner,DLGPROC dlgprc,LPARAM dwInitParam);
    192 typedef int (WINAPI *PWLX_DIALOG_BOX_INDIRECT_PARAM)(HANDLE hWlx,HANDLE hInst,LPCDLGTEMPLATE hDialogTemplate,HWND hwndOwner,DLGPROC dlgprc,LPARAM dwInitParam);
    193 typedef int (WINAPI *PWLX_SWITCH_DESKTOP_TO_USER)(HANDLE hWlx);
    194 typedef int (WINAPI *PWLX_SWITCH_DESKTOP_TO_WINLOGON)(HANDLE hWlx);
    195 typedef int (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY)(HANDLE hWlx,PWLX_MPR_NOTIFY_INFO pMprInfo,DWORD dwChangeInfo);
    196 typedef WINBOOL (WINAPI *PWLX_GET_SOURCE_DESKTOP)(HANDLE hWlx,PWLX_DESKTOP *ppDesktop);
    197 typedef WINBOOL (WINAPI *PWLX_SET_RETURN_DESKTOP)(HANDLE hWlx,PWLX_DESKTOP pDesktop);
    198 typedef WINBOOL (WINAPI *PWLX_CREATE_USER_DESKTOP)(HANDLE hWlx,HANDLE hToken,DWORD Flags,PWSTR pszDesktopName,PWLX_DESKTOP *ppDesktop);
    199 
    200 #define WLX_CREATE_INSTANCE_ONLY 0x00000001
    201 #define WLX_CREATE_USER 0x00000002
    202 
    203 typedef int (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY_EX)(HANDLE hWlx,PWLX_MPR_NOTIFY_INFO pMprInfo,DWORD dwChangeInfo,PWSTR ProviderName,PVOID Reserved);
    204 typedef WINBOOL (WINAPI *PWLX_CLOSE_USER_DESKTOP)(HANDLE hWlx,PWLX_DESKTOP pDesktop,HANDLE hToken);
    205 typedef WINBOOL (WINAPI *PWLX_SET_OPTION)(HANDLE hWlx,DWORD Option,ULONG_PTR Value,ULONG_PTR *OldValue);
    206 typedef WINBOOL (WINAPI *PWLX_GET_OPTION)(HANDLE hWlx,DWORD Option,ULONG_PTR *Value);
    207 typedef VOID (WINAPI *PWLX_WIN31_MIGRATE)(HANDLE hWlx);
    208 typedef WINBOOL (WINAPI *PWLX_QUERY_CLIENT_CREDENTIALS)(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
    209 typedef WINBOOL (WINAPI *PWLX_QUERY_IC_CREDENTIALS)(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
    210 typedef WINBOOL (WINAPI *PWLX_QUERY_TS_LOGON_CREDENTIALS)(PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred);
    211 typedef WINBOOL (WINAPI *PWLX_DISCONNECT)();
    212 typedef DWORD (WINAPI *PWLX_QUERY_TERMINAL_SERVICES_DATA)(HANDLE hWlx,PWLX_TERMINAL_SERVICES_DATA pTSData,WCHAR *UserName,WCHAR *Domain);
    213 typedef DWORD (WINAPI *PWLX_QUERY_CONSOLESWITCH_CREDENTIALS)(PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred);
    214 
    215 #define WLX_OPTION_USE_CTRL_ALT_DEL 0x00000001
    216 #define WLX_OPTION_CONTEXT_POINTER 0x00000002
    217 #define WLX_OPTION_USE_SMART_CARD 0x00000003
    218 #define WLX_OPTION_FORCE_LOGOFF_TIME 0x00000004
    219 #define WLX_OPTION_IGNORE_AUTO_LOGON 0x00000008
    220 #define WLX_OPTION_NO_SWITCH_ON_SAS 0x00000009
    221 
    222 #define WLX_OPTION_SMART_CARD_PRESENT 0x00010001
    223 #define WLX_OPTION_SMART_CARD_INFO 0x00010002
    224 #define WLX_OPTION_DISPATCH_TABLE_SIZE 0x00010003
    225 
    226 typedef struct _WLX_DISPATCH_VERSION_1_0 {
    227   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    228   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    229   PWLX_SAS_NOTIFY WlxSasNotify;
    230   PWLX_SET_TIMEOUT WlxSetTimeout;
    231   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    232   PWLX_MESSAGE_BOX WlxMessageBox;
    233   PWLX_DIALOG_BOX WlxDialogBox;
    234   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    235   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    236   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    237   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    238   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    239   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
    240 } WLX_DISPATCH_VERSION_1_0,*PWLX_DISPATCH_VERSION_1_0;
    241 
    242 typedef struct _WLX_DISPATCH_VERSION_1_1 {
    243   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    244   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    245   PWLX_SAS_NOTIFY WlxSasNotify;
    246   PWLX_SET_TIMEOUT WlxSetTimeout;
    247   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    248   PWLX_MESSAGE_BOX WlxMessageBox;
    249   PWLX_DIALOG_BOX WlxDialogBox;
    250   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    251   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    252   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    253   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    254   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    255   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
    256   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
    257   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
    258   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
    259   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
    260 } WLX_DISPATCH_VERSION_1_1,*PWLX_DISPATCH_VERSION_1_1;
    261 
    262 typedef struct _WLX_DISPATCH_VERSION_1_2 {
    263   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    264   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    265   PWLX_SAS_NOTIFY WlxSasNotify;
    266   PWLX_SET_TIMEOUT WlxSetTimeout;
    267   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    268   PWLX_MESSAGE_BOX WlxMessageBox;
    269   PWLX_DIALOG_BOX WlxDialogBox;
    270   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    271   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    272   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    273   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    274   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    275   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
    276   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
    277   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
    278   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
    279   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
    280   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
    281 } WLX_DISPATCH_VERSION_1_2,*PWLX_DISPATCH_VERSION_1_2;
    282 
    283 typedef struct _WLX_DISPATCH_VERSION_1_3 {
    284   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    285   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    286   PWLX_SAS_NOTIFY WlxSasNotify;
    287   PWLX_SET_TIMEOUT WlxSetTimeout;
    288   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    289   PWLX_MESSAGE_BOX WlxMessageBox;
    290   PWLX_DIALOG_BOX WlxDialogBox;
    291   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    292   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    293   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    294   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    295   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    296   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
    297   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
    298   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
    299   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
    300   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
    301   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
    302   PWLX_SET_OPTION WlxSetOption;
    303   PWLX_GET_OPTION WlxGetOption;
    304   PWLX_WIN31_MIGRATE WlxWin31Migrate;
    305   PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
    306   PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
    307   PWLX_DISCONNECT WlxDisconnect;
    308   PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
    309 } WLX_DISPATCH_VERSION_1_3,*PWLX_DISPATCH_VERSION_1_3;
    310 
    311 typedef struct _WLX_DISPATCH_VERSION_1_4 {
    312   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    313   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    314   PWLX_SAS_NOTIFY WlxSasNotify;
    315   PWLX_SET_TIMEOUT WlxSetTimeout;
    316   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    317   PWLX_MESSAGE_BOX WlxMessageBox;
    318   PWLX_DIALOG_BOX WlxDialogBox;
    319   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    320   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    321   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    322   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    323   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    324   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
    325   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
    326   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
    327   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
    328   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
    329   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
    330   PWLX_SET_OPTION WlxSetOption;
    331   PWLX_GET_OPTION WlxGetOption;
    332   PWLX_WIN31_MIGRATE WlxWin31Migrate;
    333   PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
    334   PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
    335   PWLX_DISCONNECT WlxDisconnect;
    336   PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
    337   PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials;
    338   PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials;
    339 } WLX_DISPATCH_VERSION_1_4,*PWLX_DISPATCH_VERSION_1_4;
    340 
    341 typedef DWORD (*PFNMSGECALLBACK)(WINBOOL bVerbose,LPWSTR lpMessage);
    342 
    343 typedef struct _WLX_NOTIFICATION_INFO {
    344   ULONG Size;
    345   ULONG Flags;
    346   PWSTR UserName;
    347   PWSTR Domain;
    348   PWSTR WindowStation;
    349   HANDLE hToken;
    350   HDESK hDesktop;
    351   PFNMSGECALLBACK pStatusCallback;
    352 } WLX_NOTIFICATION_INFO,*PWLX_NOTIFICATION_INFO;
    353 #endif
    354