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.
31 #define WLX_VERSION_1_0 (0x00010000)
32 #define WLX_VERSION_1_1 (0x00010001)
33 #define WLX_VERSION_1_2 (0x00010002)
34 #define WLX_VERSION_1_3 (0x00010003)
35 #define WLX_VERSION_1_4 (0x00010004)
36 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
38 #define WLX_SAS_TYPE_TIMEOUT (0x0000)
39 #define WLX_SAS_TYPE_CTRL_ALT_DEL (0x0001)
40 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT (0x0002)
41 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY (0x0003)
42 #define WLX_SAS_TYPE_USER_LOGOFF (0x0004)
43 #define WLX_SAS_TYPE_SC_INSERT (0x0005)
44 #define WLX_SAS_TYPE_SC_REMOVE (0x0006)
45 #define WLX_SAS_TYPE_AUTHENTICATED (0x0007)
46 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED (0x0008)
47 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED (0x0009)
48 #define WLX_SAS_TYPE_SWITCHUSER (0x000A)
49 #define WLX_SAS_TYPE_MAX_MSFT_VALUE (0x007F)
51 #define WLX_LOGON_OPT_NO_PROFILE (0x0001)
53 #define WLX_PROFILE_TYPE_V1_0 (0x0001)
54 #define WLX_PROFILE_TYPE_V2_0 (0x0002) /* default */
56 #define WLX_SAS_ACTION_LOGON (0x0001)
57 #define WLX_SAS_ACTION_NONE (0x0002)
58 #define WLX_SAS_ACTION_LOCK_WKSTA (0x0003)
59 #define WLX_SAS_ACTION_LOGOFF (0x0004)
60 #define WLX_SAS_ACTION_SHUTDOWN (0x0005)
61 #define WLX_SAS_ACTION_PWD_CHANGED (0x0006)
62 #define WLX_SAS_ACTION_TASKLIST (0x0007)
63 #define WLX_SAS_ACTION_UNLOCK_WKSTA (0x0008)
64 #define WLX_SAS_ACTION_FORCE_LOGOFF (0x0009)
65 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF (0x000A)
66 #define WLX_SAS_ACTION_SHUTDOWN_REBOOT (0x000B)
67 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP (0x000C)
68 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 (0x000D)
69 #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE (0x000E)
70 #define WLX_SAS_ACTION_RECONNECTED (0x000F)
71 #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF (0x0010)
72 #define WLX_SAS_ACTION_SWITCH_CONSOLE (0x0011)
74 #define WLX_WM_SAS (WM_USER + 0x0259)
76 #define WLX_DLG_SAS (0x0065)
77 #define WLX_DLG_INPUT_TIMEOUT (0x0066) /* Input (keys, ...) timed out */
78 #define WLX_DLG_SCREEN_SAVER_TIMEOUT (0x0067) /* Screen saver activated */
79 #define WLX_DLG_USER_LOGOFF (0x0068) /* User logged off */
81 #define WLX_DIRECTORY_LENGTH (0x0100)
83 #define WLX_CREDENTIAL_TYPE_V1_0 (0x0001)
84 #define WLX_CREDENTIAL_TYPE_V2_0 (0x0002)
86 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 (0x0001)
88 #define STATUSMSG_OPTION_NOANIMATION (0x0001)
89 #define STATUSMSG_OPTION_SETFOREGROUND (0x0002)
93 struct _WLX_CLIENT_CREDENTIALS_INFO
99 BOOL fPromptForPassword
;
100 } WLX_CLIENT_CREDENTIALS_INFO_V1_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0
;
103 struct _WLX_CLIENT_CREDENTIALS_INFO_2_0
109 BOOL fPromptForPassword
;
110 BOOL fDisconnectOnLogonFailure
;
111 } WLX_CLIENT_CREDENTIALS_INFO_V2_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V2_0
;
114 struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO
122 LARGE_INTEGER LogonTime
;
127 USHORT BadPasswordCount
;
128 LARGE_INTEGER ProfileLogonTime
;
129 LARGE_INTEGER LogoffTime
;
130 LARGE_INTEGER KickOffTime
;
131 LARGE_INTEGER PasswordLastSet
;
132 LARGE_INTEGER PasswordCanChange
;
133 LARGE_INTEGER PasswordMustChange
;
138 PWSTR HomeDirectoryDrive
;
141 ULONG PrivateDataLen
;
143 } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
, *PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
;
146 struct _WLX_MPR_NOTIFY_INFO
151 PWSTR pszOldPassword
;
152 } WLX_MPR_NOTIFY_INFO
, *PWLX_MPR_NOTIFY_INFO
;
155 struct _WLX_PROFILE_V1_0
159 } WLX_PROFILE_V1_0
, *PWLX_PROFILE_V1_0
;
162 struct _WLX_PROFILE_V2_0
167 PWSTR pszNetworkDefaultUserProfile
;
169 PWSTR pszEnvironment
;
170 } WLX_PROFILE_V2_0
, *PWLX_PROFILE_V2_0
;
173 struct _WLX_SC_NOTIFICATION_INFO
178 PWSTR pszCryptoProvider
;
179 } WLX_SC_NOTIFICATION_INFO
, *PWLX_SC_NOTIFICATION_INFO
;
182 struct _WLX_TERMINAL_SERVICES_DATA
184 WCHAR ProfilePath
[WLX_DIRECTORY_LENGTH
+ 1];
185 WCHAR HomeDir
[WLX_DIRECTORY_LENGTH
+ 1];
186 WCHAR HomeDirDrive
[4];
187 } WLX_TERMINAL_SERVICES_DATA
, *PWLX_TERMINAL_SERVICES_DATA
;
190 /* GINA Version 1.0 */
193 WlxActivateUserShell(
195 PWSTR pszDesktopName
,
196 PWSTR pszMprLogonScript
,
200 WlxDisplayLockedNotice(
212 PVOID pWinlogonFunctions
,
233 PLUID pAuthenticationId
,
237 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
,
246 DWORD dwWinlogonVersion
,
247 PDWORD pdwDllVersion
);
260 /* GINA Version 1.1 */
263 WlxScreenSaverNotify(
270 PWSTR pszDesktopName
,
275 /* GINA Version 1.3 */
278 WlxDisplayStatusMessage(
294 WlxNetworkProviderLoad(
296 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);
299 WlxRemoveStatusMessage(
303 /* GINA Version 1.4 */
310 WlxGetConsoleSwitchCredentials(
319 /* Services that Winlogon provides */
321 #define WLX_DESKTOP_NAME (0x0001) /* Name present */
322 #define WLX_DESKTOP_HANDLE (0x0002) /* Handle present */
324 #define WLX_CREATE_INSTANCE_ONLY (0x0001)
325 #define WLX_CREATE_USER (0x0002)
327 #define WLX_OPTION_USE_CTRL_ALT_DEL (0x0001)
328 #define WLX_OPTION_CONTEXT_POINTER (0x0002)
329 #define WLX_OPTION_USE_SMART_CARD (0x0003)
330 #define WLX_OPTION_FORCE_LOGOFF_TIME (0x0004)
331 #define WLX_OPTION_IGNORE_AUTO_LOGON (0x0008)
332 #define WLX_OPTION_NO_SWITCH_ON_SAS (0x0009)
334 #define WLX_OPTION_SMART_CARD_PRESENT (0x00010001)
335 #define WLX_OPTION_SMART_CARD_INFO (0x00010002)
336 #define WLX_OPTION_DISPATCH_TABLE_SIZE (0x00010003)
344 PWSTR pszDesktopName
;
345 } WLX_DESKTOP
, *PWLX_DESKTOP
;
348 int (WINAPI
*PWLX_ASSIGN_SHELL_PROTECTION
)(
355 BOOL (WINAPI
*PWLX_CLOSE_USER_DESKTOP
)(
357 PWLX_DESKTOP pDesktop
,
361 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY
)(
363 PWLX_MPR_NOTIFY_INFO pMprInfo
,
367 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY_EX
)(
369 PWLX_MPR_NOTIFY_INFO pMprInfo
,
375 BOOL (WINAPI
*PWLX_CREATE_USER_DESKTOP
)(
379 PWSTR pszDesktopName
,
380 PWLX_DESKTOP
*ppDesktop
);
383 int (WINAPI
*PWLX_DIALOG_BOX
)(
391 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT
)(
394 LPCDLGTEMPLATE hDialogTemplate
,
399 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT_PARAM
)(
402 LPCDLGTEMPLATE hDialogTemplate
,
408 int (WINAPI
*PWLX_DIALOG_BOX_PARAM
)(
417 BOOL (WINAPI
*PWLX_DISCONNECT
)();
420 BOOL (WINAPI
*PWLX_GET_OPTION
)(
426 BOOL (WINAPI
*PWLX_GET_SOURCE_DESKTOP
)(
428 PWLX_DESKTOP
*ppDesktop
);
431 int (WINAPI
*PWLX_MESSAGE_BOX
)(
439 BOOL (WINAPI
*PWLX_QUERY_CLIENT_CREDENTIALS
)(
440 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
443 DWORD (WINAPI
*PWLX_QUERY_CONSOLESWITCH_CREDENTIALS
)(
444 PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred
);
447 BOOL (WINAPI
*PWLX_QUERY_IC_CREDENTIALS
)(
448 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
451 DWORD (WINAPI
*PWLX_QUERY_TERMINAL_SERVICES_DATA
)(
453 PWLX_TERMINAL_SERVICES_DATA pTSData
,
458 BOOL (WINAPI
*PWLX_QUERY_TS_LOGON_CREDENTIALS
)(
459 PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred
);
462 VOID (WINAPI
*PWLX_SAS_NOTIFY
)(
467 VOID (WINAPI
*PWLX_SET_CONTEXT_POINTER
)(
472 BOOL (WINAPI
*PWLX_SET_RETURN_DESKTOP
)(
474 PWLX_DESKTOP pDesktop
);
477 BOOL (WINAPI
*PWLX_SET_OPTION
)(
481 ULONG_PTR
*OldValue
);
484 BOOL (WINAPI
*PWLX_SET_TIMEOUT
)(
489 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_USER
)(
493 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_WINLOGON
)(
497 VOID (WINAPI
*PWLX_USE_CTRL_ALT_DEL
)(
501 VOID (WINAPI
*PWLX_WIN31_MIGRATE
)(
505 /* function dispatch tables */
508 struct _WLX_DISPATCH_VERSION_1_0
510 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
511 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
512 PWLX_SAS_NOTIFY WlxSasNotify
;
513 PWLX_SET_TIMEOUT WlxSetTimeout
;
514 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
515 PWLX_MESSAGE_BOX WlxMessageBox
;
516 PWLX_DIALOG_BOX WlxDialogBox
;
517 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
518 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
519 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
520 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
521 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
522 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
523 } WLX_DISPATCH_VERSION_1_0
, *PWLX_DISPATCH_VERSION_1_0
;
526 struct _WLX_DISPATCH_VERSION_1_1
528 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
529 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
530 PWLX_SAS_NOTIFY WlxSasNotify
;
531 PWLX_SET_TIMEOUT WlxSetTimeout
;
532 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
533 PWLX_MESSAGE_BOX WlxMessageBox
;
534 PWLX_DIALOG_BOX WlxDialogBox
;
535 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
536 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
537 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
538 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
539 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
540 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
541 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
542 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
543 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
544 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
545 } WLX_DISPATCH_VERSION_1_1
, *PWLX_DISPATCH_VERSION_1_1
;
548 struct _WLX_DISPATCH_VERSION_1_2
550 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
551 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
552 PWLX_SAS_NOTIFY WlxSasNotify
;
553 PWLX_SET_TIMEOUT WlxSetTimeout
;
554 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
555 PWLX_MESSAGE_BOX WlxMessageBox
;
556 PWLX_DIALOG_BOX WlxDialogBox
;
557 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
558 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
559 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
560 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
561 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
562 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
563 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
564 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
565 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
566 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
567 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
568 } WLX_DISPATCH_VERSION_1_2
, *PWLX_DISPATCH_VERSION_1_2
;
571 struct _WLX_DISPATCH_VERSION_1_3
573 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
574 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
575 PWLX_SAS_NOTIFY WlxSasNotify
;
576 PWLX_SET_TIMEOUT WlxSetTimeout
;
577 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
578 PWLX_MESSAGE_BOX WlxMessageBox
;
579 PWLX_DIALOG_BOX WlxDialogBox
;
580 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
581 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
582 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
583 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
584 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
585 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
586 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
587 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
588 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
589 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
590 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
591 PWLX_SET_OPTION WlxSetOption
;
592 PWLX_GET_OPTION WlxGetOption
;
593 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
594 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
595 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
596 PWLX_DISCONNECT WlxDisconnect
;
597 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
598 } WLX_DISPATCH_VERSION_1_3
, *PWLX_DISPATCH_VERSION_1_3
;
601 struct _WLX_DISPATCH_VERSION_1_4
603 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
604 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
605 PWLX_SAS_NOTIFY WlxSasNotify
;
606 PWLX_SET_TIMEOUT WlxSetTimeout
;
607 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
608 PWLX_MESSAGE_BOX WlxMessageBox
;
609 PWLX_DIALOG_BOX WlxDialogBox
;
610 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
611 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
612 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
613 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
614 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
615 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
616 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
617 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
618 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
619 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
620 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
621 PWLX_SET_OPTION WlxSetOption
;
622 PWLX_GET_OPTION WlxGetOption
;
623 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
624 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
625 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
626 PWLX_DISCONNECT WlxDisconnect
;
627 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
628 PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials
;
629 PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials
;
630 } WLX_DISPATCH_VERSION_1_4
, *PWLX_DISPATCH_VERSION_1_4
;
633 /* non-GINA notification DLLs*/
636 DWORD (CALLBACK
*PFNMSGECALLBACK
)(
641 struct _WLX_NOTIFICATION_INFO
650 PFNMSGECALLBACK pStatusCallback
;
651 } WLX_NOTIFICATION_INFO
, *PWLX_NOTIFICATION_INFO
;
660 #endif /*__WINWLX_H */