7 * Created by Thomas Weidenmueller <w3seek@users.sourceforge.net>
9 * THIS SOFTWARE IS NOT COPYRIGHTED
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
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.
25 #pragma GCC system_header
35 #define WLX_VERSION_1_0 (0x00010000)
36 #define WLX_VERSION_1_1 (0x00010001)
37 #define WLX_VERSION_1_2 (0x00010002)
38 #define WLX_VERSION_1_3 (0x00010003)
39 #define WLX_VERSION_1_4 (0x00010004)
40 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
42 #define WLX_SAS_TYPE_TIMEOUT (0x0000)
43 #define WLX_SAS_TYPE_CTRL_ALT_DEL (0x0001)
44 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT (0x0002)
45 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY (0x0003)
46 #define WLX_SAS_TYPE_USER_LOGOFF (0x0004)
47 #define WLX_SAS_TYPE_SC_INSERT (0x0005)
48 #define WLX_SAS_TYPE_SC_REMOVE (0x0006)
49 #define WLX_SAS_TYPE_AUTHENTICATED (0x0007)
50 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED (0x0008)
51 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED (0x0009)
52 #define WLX_SAS_TYPE_SWITCHUSER (0x000A)
53 #define WLX_SAS_TYPE_MAX_MSFT_VALUE (0x007F)
55 #define WLX_LOGON_OPT_NO_PROFILE (0x0001)
57 #define WLX_PROFILE_TYPE_V1_0 (0x0001)
58 #define WLX_PROFILE_TYPE_V2_0 (0x0002) /* default */
60 #define WLX_SAS_ACTION_LOGON (0x0001)
61 #define WLX_SAS_ACTION_NONE (0x0002)
62 #define WLX_SAS_ACTION_LOCK_WKSTA (0x0003)
63 #define WLX_SAS_ACTION_LOGOFF (0x0004)
64 #define WLX_SAS_ACTION_SHUTDOWN (0x0005)
65 #define WLX_SAS_ACTION_PWD_CHANGED (0x0006)
66 #define WLX_SAS_ACTION_TASKLIST (0x0007)
67 #define WLX_SAS_ACTION_UNLOCK_WKSTA (0x0008)
68 #define WLX_SAS_ACTION_FORCE_LOGOFF (0x0009)
69 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF (0x000A)
70 #define WLX_SAS_ACTION_SHUTDOWN_REBOOT (0x000B)
71 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP (0x000C)
72 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 (0x000D)
73 #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE (0x000E)
74 #define WLX_SAS_ACTION_RECONNECTED (0x000F)
75 #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF (0x0010)
76 #define WLX_SAS_ACTION_SWITCH_CONSOLE (0x0011)
78 #define WLX_WM_SAS (WM_USER + 0x0259)
80 #define WLX_DLG_SAS (0x0065)
81 #define WLX_DLG_INPUT_TIMEOUT (0x0066) /* Input (keys, ...) timed out */
82 #define WLX_DLG_SCREEN_SAVER_TIMEOUT (0x0067) /* Screen saver activated */
83 #define WLX_DLG_USER_LOGOFF (0x0068) /* User logged off */
85 #define WLX_DIRECTORY_LENGTH (0x0100)
87 #define WLX_CREDENTIAL_TYPE_V1_0 (0x0001)
88 #define WLX_CREDENTIAL_TYPE_V2_0 (0x0002)
90 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 (0x0001)
92 #define STATUSMSG_OPTION_NOANIMATION (0x0001)
93 #define STATUSMSG_OPTION_SETFOREGROUND (0x0002)
97 struct _WLX_CLIENT_CREDENTIALS_INFO
103 BOOL fPromptForPassword
;
104 } WLX_CLIENT_CREDENTIALS_INFO_V1_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0
;
107 struct _WLX_CLIENT_CREDENTIALS_INFO_2_0
113 BOOL fPromptForPassword
;
114 BOOL fDisconnectOnLogonFailure
;
115 } WLX_CLIENT_CREDENTIALS_INFO_V2_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V2_0
;
118 struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO
126 LARGE_INTEGER LogonTime
;
131 USHORT BadPasswordCount
;
132 LARGE_INTEGER ProfileLogonTime
;
133 LARGE_INTEGER LogoffTime
;
134 LARGE_INTEGER KickOffTime
;
135 LARGE_INTEGER PasswordLastSet
;
136 LARGE_INTEGER PasswordCanChange
;
137 LARGE_INTEGER PasswordMustChange
;
142 PWSTR HomeDirectoryDrive
;
145 ULONG PrivateDataLen
;
147 } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
, *PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
;
150 struct _WLX_MPR_NOTIFY_INFO
155 PWSTR pszOldPassword
;
156 } WLX_MPR_NOTIFY_INFO
, *PWLX_MPR_NOTIFY_INFO
;
159 struct _WLX_PROFILE_V1_0
163 } WLX_PROFILE_V1_0
, *PWLX_PROFILE_V1_0
;
166 struct _WLX_PROFILE_V2_0
171 PWSTR pszNetworkDefaultUserProfile
;
173 PWSTR pszEnvironment
;
174 } WLX_PROFILE_V2_0
, *PWLX_PROFILE_V2_0
;
177 struct _WLX_SC_NOTIFICATION_INFO
182 PWSTR pszCryptoProvider
;
183 } WLX_SC_NOTIFICATION_INFO
, *PWLX_SC_NOTIFICATION_INFO
;
186 struct _WLX_TERMINAL_SERVICES_DATA
188 WCHAR ProfilePath
[WLX_DIRECTORY_LENGTH
+ 1];
189 WCHAR HomeDir
[WLX_DIRECTORY_LENGTH
+ 1];
190 WCHAR HomeDirDrive
[4];
191 } WLX_TERMINAL_SERVICES_DATA
, *PWLX_TERMINAL_SERVICES_DATA
;
194 /* GINA Version 1.0 */
197 WlxActivateUserShell(
199 PWSTR pszDesktopName
,
200 PWSTR pszMprLogonScript
,
204 WlxDisplayLockedNotice(
216 PVOID pWinlogonFunctions
,
237 PLUID pAuthenticationId
,
241 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
,
250 DWORD dwWinlogonVersion
,
251 PDWORD pdwDllVersion
);
264 /* GINA Version 1.1 */
267 WlxScreenSaverNotify(
274 PWSTR pszDesktopName
,
279 /* GINA Version 1.3 */
282 WlxDisplayStatusMessage(
298 WlxNetworkProviderLoad(
300 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);
303 WlxRemoveStatusMessage(
307 /* GINA Version 1.4 */
314 WlxGetConsoleSwitchCredentials(
323 /* Services that Winlogon provides */
325 #define WLX_DESKTOP_NAME (0x0001) /* Name present */
326 #define WLX_DESKTOP_HANDLE (0x0002) /* Handle present */
328 #define WLX_CREATE_INSTANCE_ONLY (0x0001)
329 #define WLX_CREATE_USER (0x0002)
331 #define WLX_OPTION_USE_CTRL_ALT_DEL (0x0001)
332 #define WLX_OPTION_CONTEXT_POINTER (0x0002)
333 #define WLX_OPTION_USE_SMART_CARD (0x0003)
334 #define WLX_OPTION_FORCE_LOGOFF_TIME (0x0004)
335 #define WLX_OPTION_IGNORE_AUTO_LOGON (0x0008)
336 #define WLX_OPTION_NO_SWITCH_ON_SAS (0x0009)
338 #define WLX_OPTION_SMART_CARD_PRESENT (0x00010001)
339 #define WLX_OPTION_SMART_CARD_INFO (0x00010002)
340 #define WLX_OPTION_DISPATCH_TABLE_SIZE (0x00010003)
348 PWSTR pszDesktopName
;
349 } WLX_DESKTOP
, *PWLX_DESKTOP
;
352 int (WINAPI
*PWLX_ASSIGN_SHELL_PROTECTION
)(
359 BOOL (WINAPI
*PWLX_CLOSE_USER_DESKTOP
)(
361 PWLX_DESKTOP pDesktop
,
365 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY
)(
367 PWLX_MPR_NOTIFY_INFO pMprInfo
,
371 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY_EX
)(
373 PWLX_MPR_NOTIFY_INFO pMprInfo
,
379 BOOL (WINAPI
*PWLX_CREATE_USER_DESKTOP
)(
383 PWSTR pszDesktopName
,
384 PWLX_DESKTOP
*ppDesktop
);
387 int (WINAPI
*PWLX_DIALOG_BOX
)(
395 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT
)(
398 LPCDLGTEMPLATE hDialogTemplate
,
403 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT_PARAM
)(
406 LPCDLGTEMPLATE hDialogTemplate
,
412 int (WINAPI
*PWLX_DIALOG_BOX_PARAM
)(
421 BOOL (WINAPI
*PWLX_DISCONNECT
)();
424 BOOL (WINAPI
*PWLX_GET_OPTION
)(
430 BOOL (WINAPI
*PWLX_GET_SOURCE_DESKTOP
)(
432 PWLX_DESKTOP
*ppDesktop
);
435 int (WINAPI
*PWLX_MESSAGE_BOX
)(
443 BOOL (WINAPI
*PWLX_QUERY_CLIENT_CREDENTIALS
)(
444 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
447 DWORD (WINAPI
*PWLX_QUERY_CONSOLESWITCH_CREDENTIALS
)(
448 PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred
);
451 BOOL (WINAPI
*PWLX_QUERY_IC_CREDENTIALS
)(
452 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
455 DWORD (WINAPI
*PWLX_QUERY_TERMINAL_SERVICES_DATA
)(
457 PWLX_TERMINAL_SERVICES_DATA pTSData
,
462 BOOL (WINAPI
*PWLX_QUERY_TS_LOGON_CREDENTIALS
)(
463 PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred
);
466 VOID (WINAPI
*PWLX_SAS_NOTIFY
)(
471 VOID (WINAPI
*PWLX_SET_CONTEXT_POINTER
)(
476 BOOL (WINAPI
*PWLX_SET_RETURN_DESKTOP
)(
478 PWLX_DESKTOP pDesktop
);
481 BOOL (WINAPI
*PWLX_SET_OPTION
)(
485 ULONG_PTR
*OldValue
);
488 BOOL (WINAPI
*PWLX_SET_TIMEOUT
)(
493 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_USER
)(
497 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_WINLOGON
)(
501 VOID (WINAPI
*PWLX_USE_CTRL_ALT_DEL
)(
505 VOID (WINAPI
*PWLX_WIN31_MIGRATE
)(
509 /* function dispatch tables */
512 struct _WLX_DISPATCH_VERSION_1_0
514 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
515 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
516 PWLX_SAS_NOTIFY WlxSasNotify
;
517 PWLX_SET_TIMEOUT WlxSetTimeout
;
518 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
519 PWLX_MESSAGE_BOX WlxMessageBox
;
520 PWLX_DIALOG_BOX WlxDialogBox
;
521 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
522 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
523 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
524 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
525 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
526 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
527 } WLX_DISPATCH_VERSION_1_0
, *PWLX_DISPATCH_VERSION_1_0
;
530 struct _WLX_DISPATCH_VERSION_1_1
532 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
533 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
534 PWLX_SAS_NOTIFY WlxSasNotify
;
535 PWLX_SET_TIMEOUT WlxSetTimeout
;
536 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
537 PWLX_MESSAGE_BOX WlxMessageBox
;
538 PWLX_DIALOG_BOX WlxDialogBox
;
539 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
540 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
541 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
542 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
543 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
544 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
545 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
546 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
547 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
548 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
549 } WLX_DISPATCH_VERSION_1_1
, *PWLX_DISPATCH_VERSION_1_1
;
552 struct _WLX_DISPATCH_VERSION_1_2
554 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
555 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
556 PWLX_SAS_NOTIFY WlxSasNotify
;
557 PWLX_SET_TIMEOUT WlxSetTimeout
;
558 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
559 PWLX_MESSAGE_BOX WlxMessageBox
;
560 PWLX_DIALOG_BOX WlxDialogBox
;
561 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
562 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
563 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
564 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
565 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
566 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
567 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
568 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
569 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
570 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
571 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
572 } WLX_DISPATCH_VERSION_1_2
, *PWLX_DISPATCH_VERSION_1_2
;
575 struct _WLX_DISPATCH_VERSION_1_3
577 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
578 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
579 PWLX_SAS_NOTIFY WlxSasNotify
;
580 PWLX_SET_TIMEOUT WlxSetTimeout
;
581 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
582 PWLX_MESSAGE_BOX WlxMessageBox
;
583 PWLX_DIALOG_BOX WlxDialogBox
;
584 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
585 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
586 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
587 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
588 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
589 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
590 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
591 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
592 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
593 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
594 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
595 PWLX_SET_OPTION WlxSetOption
;
596 PWLX_GET_OPTION WlxGetOption
;
597 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
598 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
599 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
600 PWLX_DISCONNECT WlxDisconnect
;
601 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
602 } WLX_DISPATCH_VERSION_1_3
, *PWLX_DISPATCH_VERSION_1_3
;
605 struct _WLX_DISPATCH_VERSION_1_4
607 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
608 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
609 PWLX_SAS_NOTIFY WlxSasNotify
;
610 PWLX_SET_TIMEOUT WlxSetTimeout
;
611 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
612 PWLX_MESSAGE_BOX WlxMessageBox
;
613 PWLX_DIALOG_BOX WlxDialogBox
;
614 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
615 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
616 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
617 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
618 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
619 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
620 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
621 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
622 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
623 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
624 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
625 PWLX_SET_OPTION WlxSetOption
;
626 PWLX_GET_OPTION WlxGetOption
;
627 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
628 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
629 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
630 PWLX_DISCONNECT WlxDisconnect
;
631 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
632 PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials
;
633 PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials
;
634 } WLX_DISPATCH_VERSION_1_4
, *PWLX_DISPATCH_VERSION_1_4
;
637 /* non-GINA notification DLLs*/
640 DWORD (*PFNMSGECALLBACK
)(
645 struct _WLX_NOTIFICATION_INFO
654 PFNMSGECALLBACK pStatusCallback
;
655 } WLX_NOTIFICATION_INFO
, *PWLX_NOTIFICATION_INFO
;
664 #endif /*__WINWLX_H */