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