xref: /reactos/sdk/include/psdk/winwlx.h (revision 5100859e)
1 /*
2  * WinWlx.h
3  *
4  * WinLogon eXtension
5  *
6  * Contributors:
7  *   Created by Thomas Weidenmueller <w3seek@users.sourceforge.net>
8  *
9  * THIS SOFTWARE IS NOT COPYRIGHTED
10  *
11  * This source code is offered for use in the public domain. You may
12  * use, modify or distribute it freely.
13  *
14  * This code is distributed in the hope that it will be useful but
15  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
16  * DISCLAIMED. This includes but is not limited to warranties of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18  *
19  */
20 
21 #ifndef __WINWLX_H
22 #define __WINWLX_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #define WLX_VERSION_1_0     0x00010000
29 #define WLX_VERSION_1_1     0x00010001
30 #define WLX_VERSION_1_2     0x00010002
31 #define WLX_VERSION_1_3     0x00010003
32 #define WLX_VERSION_1_4     0x00010004
33 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
34 
35 #define WLX_SAS_TYPE_TIMEOUT                 0x0000
36 #define WLX_SAS_TYPE_CTRL_ALT_DEL            0x0001
37 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT         0x0002
38 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY        0x0003
39 #define WLX_SAS_TYPE_USER_LOGOFF             0x0004
40 #define WLX_SAS_TYPE_SC_INSERT               0x0005
41 #define WLX_SAS_TYPE_SC_REMOVE               0x0006
42 #define WLX_SAS_TYPE_AUTHENTICATED           0x0007
43 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED 0x0008
44 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED  0x0009
45 #define WLX_SAS_TYPE_SWITCHUSER              0x000A
46 #define WLX_SAS_TYPE_MAX_MSFT_VALUE          0x007F
47 
48 #define WLX_LOGON_OPT_NO_PROFILE 0x0001
49 
50 #define WLX_PROFILE_TYPE_V1_0 0x0001
51 #define WLX_PROFILE_TYPE_V2_0 0x0002 /* Default */
52 
53 #define WLX_SAS_ACTION_LOGON                0x0001
54 #define WLX_SAS_ACTION_NONE                 0x0002
55 #define WLX_SAS_ACTION_LOCK_WKSTA           0x0003
56 #define WLX_SAS_ACTION_LOGOFF               0x0004
57 #define WLX_SAS_ACTION_SHUTDOWN             0x0005
58 #define WLX_SAS_ACTION_PWD_CHANGED          0x0006
59 #define WLX_SAS_ACTION_TASKLIST             0x0007
60 #define WLX_SAS_ACTION_UNLOCK_WKSTA         0x0008
61 #define WLX_SAS_ACTION_FORCE_LOGOFF         0x0009
62 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF   0x000A
63 #define WLX_SAS_ACTION_SHUTDOWN_REBOOT      0x000B
64 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP       0x000C
65 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2      0x000D
66 #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE   0x000E
67 #define WLX_SAS_ACTION_RECONNECTED          0x000F
68 #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF 0x0010
69 #define WLX_SAS_ACTION_SWITCH_CONSOLE       0x0011
70 
71 #define WLX_WM_SAS (WM_USER + 0x0259)
72 
73 #define WLX_DLG_SAS                  0x0065
74 #define WLX_DLG_INPUT_TIMEOUT        0x0066 /* Input (keys, ...) timed out */
75 #define WLX_DLG_SCREEN_SAVER_TIMEOUT 0x0067 /* Screen saver activated */
76 #define WLX_DLG_USER_LOGOFF          0x0068 /* User logged off */
77 
78 #define WLX_DIRECTORY_LENGTH 0x0100
79 
80 #define WLX_CREDENTIAL_TYPE_V1_0 0x0001
81 #define WLX_CREDENTIAL_TYPE_V2_0 0x0002
82 
83 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 0x0001
84 
85 #define STATUSMSG_OPTION_NOANIMATION   0x0001
86 #define STATUSMSG_OPTION_SETFOREGROUND 0x0002
87 
88 typedef struct _WLX_CLIENT_CREDENTIALS_INFO {
89   DWORD dwType;
90   PWSTR pszUserName;
91   PWSTR pszDomain;
92   PWSTR pszPassword;
93   BOOL fPromptForPassword;
94 } WLX_CLIENT_CREDENTIALS_INFO_V1_0, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0;
95 
96 typedef struct _WLX_CLIENT_CREDENTIALS_INFO_2_0 {
97   DWORD dwType;
98   PWSTR pszUserName;
99   PWSTR pszDomain;
100   PWSTR pszPassword;
101   BOOL fPromptForPassword;
102   BOOL fDisconnectOnLogonFailure;
103 } WLX_CLIENT_CREDENTIALS_INFO_V2_0, *PWLX_CLIENT_CREDENTIALS_INFO_V2_0;
104 
105 typedef struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO {
106   DWORD dwType;
107   HANDLE UserToken;
108   LUID LogonId;
109   QUOTA_LIMITS  Quotas;
110   PWSTR UserName;
111   PWSTR Domain;
112   LARGE_INTEGER LogonTime;
113   BOOL SmartCardLogon;
114   ULONG ProfileLength;
115   DWORD MessageType;
116   USHORT LogonCount;
117   USHORT BadPasswordCount;
118   LARGE_INTEGER ProfileLogonTime;
119   LARGE_INTEGER LogoffTime;
120   LARGE_INTEGER KickOffTime;
121   LARGE_INTEGER PasswordLastSet;
122   LARGE_INTEGER PasswordCanChange;
123   LARGE_INTEGER PasswordMustChange;
124   PWSTR LogonScript;
125   PWSTR HomeDirectory;
126   PWSTR FullName;
127   PWSTR ProfilePath;
128   PWSTR HomeDirectoryDrive;
129   PWSTR LogonServer;
130   ULONG UserFlags;
131   ULONG PrivateDataLen;
132   PBYTE PrivateData;
133 } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0, *PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
134 
135 typedef struct _WLX_MPR_NOTIFY_INFO {
136   PWSTR pszUserName;
137   PWSTR pszDomain;
138   PWSTR pszPassword;
139   PWSTR pszOldPassword;
140 } WLX_MPR_NOTIFY_INFO, *PWLX_MPR_NOTIFY_INFO;
141 
142 typedef struct _WLX_PROFILE_V1_0 {
143   DWORD dwType;
144   PWSTR pszProfile;
145 } WLX_PROFILE_V1_0, *PWLX_PROFILE_V1_0;
146 
147 typedef struct _WLX_PROFILE_V2_0 {
148   DWORD dwType;
149   PWSTR pszProfile;
150   PWSTR pszPolicy;
151   PWSTR pszNetworkDefaultUserProfile;
152   PWSTR pszServerName;
153   PWSTR pszEnvironment;
154 } WLX_PROFILE_V2_0, *PWLX_PROFILE_V2_0;
155 
156 typedef struct _WLX_SC_NOTIFICATION_INFO {
157   PWSTR pszCard;
158   PWSTR pszReader;
159   PWSTR pszContainer;
160   PWSTR pszCryptoProvider;
161 } WLX_SC_NOTIFICATION_INFO, *PWLX_SC_NOTIFICATION_INFO;
162 
163 typedef struct _WLX_TERMINAL_SERVICES_DATA {
164   WCHAR ProfilePath[WLX_DIRECTORY_LENGTH + 1];
165   WCHAR HomeDir[WLX_DIRECTORY_LENGTH + 1];
166   WCHAR HomeDirDrive[4];
167 } WLX_TERMINAL_SERVICES_DATA, *PWLX_TERMINAL_SERVICES_DATA;
168 
169 /* GINA Version 1.0 */
170 
171 BOOL
172 WINAPI
173 WlxActivateUserShell(
174   _In_ PVOID pWlxContext,
175   _In_ PWSTR pszDesktopName,
176   _In_ PWSTR pszMprLogonScript,
177   _In_ PVOID pEnvironment);
178 
179 VOID
180 WINAPI
181 WlxDisplayLockedNotice(
182   _In_ PVOID pWlxContext);
183 
184 VOID
185 WINAPI
186 WlxDisplaySASNotice(
187   _In_ PVOID pWlxContext);
188 
189 BOOL
190 WINAPI
191 WlxInitialize(
192   _In_ LPWSTR lpWinsta,
193   _In_ HANDLE hWlx,
194   _In_ PVOID pvReserved,
195   _In_ PVOID pWinlogonFunctions,
196   _Out_ PVOID *pWlxContext);
197 
198 BOOL
199 WINAPI
200 WlxIsLockOk(
201   _In_ PVOID pWlxContext);
202 
203 BOOL
204 WINAPI
205 WlxIsLogoffOk(
206   _In_ PVOID pWlxContext);
207 
208 INT
209 WINAPI
210 WlxLoggedOnSAS(
211   _In_ PVOID pWlxContext,
212   _In_ DWORD dwSasType,
213   _In_ PVOID pReserved);
214 
215 INT
216 WINAPI
217 WlxLoggedOutSAS(
218   _In_ PVOID pWlxContext,
219   _In_ DWORD dwSasType,
220   _Out_ PLUID pAuthenticationId,
221   _Inout_ PSID pLogonSid,
222   _Out_ PDWORD pdwOptions,
223   _Out_ PHANDLE phToken,
224   _Out_ PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
225   _Out_ PVOID *pProfile);
226 
227 VOID
228 WINAPI
229 WlxLogoff(
230   _In_ PVOID pWlxContext);
231 
232 BOOL
233 WINAPI
234 WlxNegotiate(
235   _In_ DWORD dwWinlogonVersion,
236   _Out_ PDWORD pdwDllVersion);
237 
238 VOID
239 WINAPI
240 WlxShutdown(
241   _In_ PVOID pWlxContext,
242   _In_ DWORD ShutdownType);
243 
244 INT
245 WINAPI
246 WlxWkstaLockedSAS(
247   _In_ PVOID pWlxContext,
248   _In_ DWORD dwSasType);
249 
250 /* GINA Version 1.1 */
251 
252 BOOL
253 WINAPI
254 WlxScreenSaverNotify(
255   _In_ PVOID pWlxContext,
256   _Inout_ BOOL *pSecure);
257 
258 BOOL
259 WINAPI
260 WlxStartApplication(
261   _In_ PVOID pWlxContext,
262   _In_ PWSTR pszDesktopName,
263   _In_ PVOID pEnvironment,
264   _In_ PWSTR pszCmdLine);
265 
266 /* GINA Version 1.3 */
267 
268 BOOL
269 WINAPI
270 WlxDisplayStatusMessage(
271   _In_ PVOID pWlxContext,
272   _In_ HDESK hDesktop,
273   _In_ DWORD dwOptions,
274   _In_ PWSTR pTitle,
275   _In_ PWSTR pMessage);
276 
277 BOOL
278 WINAPI
279 WlxGetStatusMessage(
280   _In_ PVOID pWlxContext,
281   _Out_ DWORD *pdwOptions,
282   _Out_ PWSTR pMessage,
283   _In_ DWORD dwBufferSize);
284 
285 BOOL
286 WINAPI
287 WlxNetworkProviderLoad(
288   _In_ PVOID pWlxContext,
289   _Out_ PWLX_MPR_NOTIFY_INFO pNprNotifyInfo);
290 
291 BOOL
292 WINAPI
293 WlxRemoveStatusMessage(
294   _In_ PVOID pWlxContext);
295 
296 /* GINA Version 1.4 */
297 
298 VOID
299 WINAPI
300 WlxDisconnectNotify(
301   _In_ PVOID pWlxContext);
302 
303 BOOL
304 WINAPI
305 WlxGetConsoleSwitchCredentials(
306   _In_ PVOID pWlxContext,
307   _Out_ PVOID pCredInfo);
308 
309 VOID
310 WINAPI
311 WlxReconnectNotify(
312   _In_ PVOID pWlxContext);
313 
314 /* Services that Winlogon provides */
315 
316 #define WLX_DESKTOP_NAME   0x0001 /* Name present */
317 #define WLX_DESKTOP_HANDLE 0x0002 /* Handle present */
318 
319 #define WLX_CREATE_INSTANCE_ONLY 0x0001
320 #define WLX_CREATE_USER          0x0002
321 
322 #define WLX_OPTION_USE_CTRL_ALT_DEL  0x0001
323 #define WLX_OPTION_CONTEXT_POINTER   0x0002
324 #define WLX_OPTION_USE_SMART_CARD    0x0003
325 #define WLX_OPTION_FORCE_LOGOFF_TIME 0x0004
326 #define WLX_OPTION_IGNORE_AUTO_LOGON 0x0008
327 #define WLX_OPTION_NO_SWITCH_ON_SAS  0x0009
328 
329 #define WLX_OPTION_SMART_CARD_PRESENT  0x00010001
330 #define WLX_OPTION_SMART_CARD_INFO     0x00010002
331 #define WLX_OPTION_DISPATCH_TABLE_SIZE 0x00010003
332 
333 typedef struct _WLX_DESKTOP {
334   DWORD Size;
335   DWORD Flags;
336   HDESK hDesktop;
337   PWSTR pszDesktopName;
338 } WLX_DESKTOP, *PWLX_DESKTOP;
339 
340 typedef INT
341 (WINAPI *PWLX_ASSIGN_SHELL_PROTECTION)(
342   _In_ HANDLE hWlx,
343   _In_ HANDLE hToken,
344   _In_ HANDLE hProcess,
345   _In_ HANDLE hThread);
346 
347 typedef INT
348 (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY)(
349   _In_ HANDLE hWlx,
350   _In_ PWLX_MPR_NOTIFY_INFO pMprInfo,
351   _In_ DWORD dwChangeInfo);
352 
353 typedef INT
354 (WINAPI *PWLX_CHANGE_PASSWORD_NOTIFY_EX)(
355   _In_ HANDLE hWlx,
356   _In_ PWLX_MPR_NOTIFY_INFO pMprInfo,
357   _In_ DWORD dwChangeInfo,
358   _In_ PWSTR ProviderName,
359   _In_ PVOID Reserved);
360 
361 typedef BOOL
362 (WINAPI *PWLX_CLOSE_USER_DESKTOP)(
363   _In_ HANDLE hWlx,
364   _In_ PWLX_DESKTOP pDesktop,
365   _In_ HANDLE hToken);
366 
367 typedef BOOL
368 (WINAPI *PWLX_CREATE_USER_DESKTOP)(
369   _In_ HANDLE hWlx,
370   _In_ HANDLE hToken,
371   _In_ DWORD Flags,
372   _In_ PWSTR pszDesktopName,
373   _Out_ PWLX_DESKTOP *ppDesktop);
374 
375 typedef INT
376 (WINAPI *PWLX_DIALOG_BOX)(
377   _In_ HANDLE hWlx,
378   _In_ HANDLE hInst,
379   _In_ LPWSTR lpszTemplate,
380   _In_ HWND hwndOwner,
381   _In_ DLGPROC dlgprc);
382 
383 typedef INT
384 (WINAPI *PWLX_DIALOG_BOX_INDIRECT)(
385   _In_ HANDLE hWlx,
386   _In_ HANDLE hInst,
387   _In_ LPCDLGTEMPLATE hDialogTemplate,
388   _In_ HWND hwndOwner,
389   _In_ DLGPROC dlgprc);
390 
391 typedef INT
392 (WINAPI *PWLX_DIALOG_BOX_INDIRECT_PARAM)(
393   _In_ HANDLE hWlx,
394   _In_ HANDLE hInst,
395   _In_ LPCDLGTEMPLATE hDialogTemplate,
396   _In_ HWND hwndOwner,
397   _In_ DLGPROC dlgprc,
398   _In_ LPARAM dwInitParam);
399 
400 typedef INT
401 (WINAPI *PWLX_DIALOG_BOX_PARAM)(
402   _In_ HANDLE hWlx,
403   _In_ HANDLE hInst,
404   _In_ LPWSTR lpszTemplate,
405   _In_ HWND hwndOwner,
406   _In_ DLGPROC dlgprc,
407   _In_ LPARAM dwInitParam);
408 
409 typedef BOOL
410 (WINAPI *PWLX_DISCONNECT)(VOID);
411 
412 typedef BOOL
413 (WINAPI *PWLX_GET_OPTION)(
414   _In_ HANDLE hWlx,
415   _In_ DWORD Option,
416   _Out_ ULONG_PTR *Value);
417 
418 typedef BOOL
419 (WINAPI *PWLX_GET_SOURCE_DESKTOP)(
420   _In_ HANDLE hWlx,
421   _Out_ PWLX_DESKTOP *ppDesktop);
422 
423 typedef INT
424 (WINAPI *PWLX_MESSAGE_BOX)(
425   _In_ HANDLE hWlx,
426   _In_ HWND hwndOwner,
427   _In_ LPWSTR lpszText,
428   _In_ LPWSTR lpszTitle,
429   _In_ UINT fuStyle);
430 
431 typedef BOOL
432 (WINAPI *PWLX_QUERY_CLIENT_CREDENTIALS)(
433   _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
434 
435 typedef DWORD
436 (WINAPI *PWLX_QUERY_CONSOLESWITCH_CREDENTIALS)(
437   _Out_ PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred);
438 
439 typedef BOOL
440 (WINAPI *PWLX_QUERY_IC_CREDENTIALS)(
441   _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
442 
443 typedef DWORD
444 (WINAPI *PWLX_QUERY_TERMINAL_SERVICES_DATA)(
445   _In_ HANDLE hWlx,
446   _Out_ PWLX_TERMINAL_SERVICES_DATA pTSData,
447   _In_ WCHAR *UserName,
448   _In_ WCHAR *Domain);
449 
450 typedef BOOL
451 (WINAPI *PWLX_QUERY_TS_LOGON_CREDENTIALS)(
452   _Out_ PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred);
453 
454 typedef VOID
455 (WINAPI *PWLX_SAS_NOTIFY)(
456   _In_ HANDLE hWlx,
457   _In_ DWORD dwSasType);
458 
459 typedef VOID
460 (WINAPI *PWLX_SET_CONTEXT_POINTER)(
461   _In_ HANDLE hWlx,
462   _In_ PVOID pWlxContext);
463 
464 typedef BOOL
465 (WINAPI *PWLX_SET_OPTION)(
466   _In_ HANDLE hWlx,
467   _In_ DWORD Option,
468   _In_ ULONG_PTR Value,
469   _Out_ ULONG_PTR *OldValue);
470 
471 typedef BOOL
472 (WINAPI *PWLX_SET_RETURN_DESKTOP)(
473   _In_ HANDLE hWlx,
474   _In_ PWLX_DESKTOP pDesktop);
475 
476 typedef BOOL
477 (WINAPI *PWLX_SET_TIMEOUT)(
478   _In_ HANDLE hWlx,
479   _In_ DWORD Timeout);
480 
481 typedef INT
482 (WINAPI *PWLX_SWITCH_DESKTOP_TO_USER)(
483   _In_ HANDLE hWlx);
484 
485 typedef INT
486 (WINAPI *PWLX_SWITCH_DESKTOP_TO_WINLOGON)(
487   _In_ HANDLE hWlx);
488 
489 typedef VOID
490 (WINAPI *PWLX_USE_CTRL_ALT_DEL)(
491   _In_ HANDLE hWlx);
492 
493 typedef VOID
494 (WINAPI *PWLX_WIN31_MIGRATE)(
495   _In_ HANDLE hWlx);
496 
497 /* Function dispatch tables */
498 
499 typedef struct _WLX_DISPATCH_VERSION_1_0 {
500   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
501   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
502   PWLX_SAS_NOTIFY WlxSasNotify;
503   PWLX_SET_TIMEOUT WlxSetTimeout;
504   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
505   PWLX_MESSAGE_BOX WlxMessageBox;
506   PWLX_DIALOG_BOX WlxDialogBox;
507   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
508   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
509   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
510   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
511   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
512   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
513 } WLX_DISPATCH_VERSION_1_0, *PWLX_DISPATCH_VERSION_1_0;
514 
515 typedef struct _WLX_DISPATCH_VERSION_1_1 {
516   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
517   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
518   PWLX_SAS_NOTIFY WlxSasNotify;
519   PWLX_SET_TIMEOUT WlxSetTimeout;
520   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
521   PWLX_MESSAGE_BOX WlxMessageBox;
522   PWLX_DIALOG_BOX WlxDialogBox;
523   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
524   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
525   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
526   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
527   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
528   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
529   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
530   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
531   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
532   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
533 } WLX_DISPATCH_VERSION_1_1, *PWLX_DISPATCH_VERSION_1_1;
534 
535 typedef struct _WLX_DISPATCH_VERSION_1_2 {
536   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
537   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
538   PWLX_SAS_NOTIFY WlxSasNotify;
539   PWLX_SET_TIMEOUT WlxSetTimeout;
540   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
541   PWLX_MESSAGE_BOX WlxMessageBox;
542   PWLX_DIALOG_BOX WlxDialogBox;
543   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
544   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
545   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
546   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
547   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
548   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
549   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
550   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
551   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
552   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
553   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
554 } WLX_DISPATCH_VERSION_1_2, *PWLX_DISPATCH_VERSION_1_2;
555 
556 typedef struct _WLX_DISPATCH_VERSION_1_3 {
557   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
558   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
559   PWLX_SAS_NOTIFY WlxSasNotify;
560   PWLX_SET_TIMEOUT WlxSetTimeout;
561   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
562   PWLX_MESSAGE_BOX WlxMessageBox;
563   PWLX_DIALOG_BOX WlxDialogBox;
564   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
565   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
566   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
567   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
568   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
569   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
570   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
571   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
572   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
573   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
574   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
575   PWLX_SET_OPTION WlxSetOption;
576   PWLX_GET_OPTION WlxGetOption;
577   PWLX_WIN31_MIGRATE WlxWin31Migrate;
578   PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
579   PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
580   PWLX_DISCONNECT WlxDisconnect;
581   PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
582 } WLX_DISPATCH_VERSION_1_3, *PWLX_DISPATCH_VERSION_1_3;
583 
584 typedef struct _WLX_DISPATCH_VERSION_1_4 {
585   PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
586   PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
587   PWLX_SAS_NOTIFY WlxSasNotify;
588   PWLX_SET_TIMEOUT WlxSetTimeout;
589   PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
590   PWLX_MESSAGE_BOX WlxMessageBox;
591   PWLX_DIALOG_BOX WlxDialogBox;
592   PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
593   PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
594   PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
595   PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
596   PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
597   PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
598   PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
599   PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
600   PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
601   PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
602   PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
603   PWLX_SET_OPTION WlxSetOption;
604   PWLX_GET_OPTION WlxGetOption;
605   PWLX_WIN31_MIGRATE WlxWin31Migrate;
606   PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
607   PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
608   PWLX_DISCONNECT WlxDisconnect;
609   PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
610   PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials;
611   PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials;
612 } WLX_DISPATCH_VERSION_1_4, *PWLX_DISPATCH_VERSION_1_4;
613 
614 /* Non-GINA notification DLLs */
615 
616 typedef DWORD
617 (CALLBACK *PFNMSGECALLBACK)(
618   _In_ BOOL bVerbose,
619   _In_ LPWSTR lpMessage);
620 
621 typedef struct _WLX_NOTIFICATION_INFO {
622   ULONG Size;
623   ULONG Flags;
624   PWSTR UserName;
625   PWSTR Domain;
626   PWSTR WindowStation;
627   HANDLE hToken;
628   HDESK hDesktop;
629   PFNMSGECALLBACK pStatusCallback;
630 } WLX_NOTIFICATION_INFO, *PWLX_NOTIFICATION_INFO;
631 
632 #ifdef __cplusplus
633 }
634 #endif
635 
636 #endif /*__WINWLX_H */
637