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.
29 #define WLX_VERSION_1_0 (0x00010000)
30 #define WLX_VERSION_1_1 (0x00010001)
31 #define WLX_VERSION_1_2 (0x00010002)
32 #define WLX_VERSION_1_3 (0x00010003)
33 #define WLX_VERSION_1_4 (0x00010004)
34 #define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
36 #define WLX_SAS_TYPE_TIMEOUT (0x0000)
37 #define WLX_SAS_TYPE_CTRL_ALT_DEL (0x0001)
38 #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT (0x0002)
39 #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY (0x0003)
40 #define WLX_SAS_TYPE_USER_LOGOFF (0x0004)
41 #define WLX_SAS_TYPE_SC_INSERT (0x0005)
42 #define WLX_SAS_TYPE_SC_REMOVE (0x0006)
43 #define WLX_SAS_TYPE_AUTHENTICATED (0x0007)
44 #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED (0x0008)
45 #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED (0x0009)
46 #define WLX_SAS_TYPE_SWITCHUSER (0x000A)
47 #define WLX_SAS_TYPE_MAX_MSFT_VALUE (0x007F)
49 #define WLX_LOGON_OPT_NO_PROFILE (0x0001)
51 #define WLX_PROFILE_TYPE_V1_0 (0x0001)
52 #define WLX_PROFILE_TYPE_V2_0 (0x0002) /* default */
54 #define WLX_SAS_ACTION_LOGON (0x0001)
55 #define WLX_SAS_ACTION_NONE (0x0002)
56 #define WLX_SAS_ACTION_LOCK_WKSTA (0x0003)
57 #define WLX_SAS_ACTION_LOGOFF (0x0004)
58 #define WLX_SAS_ACTION_SHUTDOWN (0x0005)
59 #define WLX_SAS_ACTION_PWD_CHANGED (0x0006)
60 #define WLX_SAS_ACTION_TASKLIST (0x0007)
61 #define WLX_SAS_ACTION_UNLOCK_WKSTA (0x0008)
62 #define WLX_SAS_ACTION_FORCE_LOGOFF (0x0009)
63 #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF (0x000A)
64 #define WLX_SAS_ACTION_SHUTDOWN_REBOOT (0x000B)
65 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP (0x000C)
66 #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 (0x000D)
67 #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE (0x000E)
68 #define WLX_SAS_ACTION_RECONNECTED (0x000F)
69 #define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF (0x0010)
70 #define WLX_SAS_ACTION_SWITCH_CONSOLE (0x0011)
72 #define WLX_WM_SAS (WM_USER + 0x0259)
74 #define WLX_DLG_SAS (0x0065)
75 #define WLX_DLG_INPUT_TIMEOUT (0x0066) /* Input (keys, ...) timed out */
76 #define WLX_DLG_SCREEN_SAVER_TIMEOUT (0x0067) /* Screen saver activated */
77 #define WLX_DLG_USER_LOGOFF (0x0068) /* User logged off */
79 #define WLX_DIRECTORY_LENGTH (0x0100)
81 #define WLX_CREDENTIAL_TYPE_V1_0 (0x0001)
82 #define WLX_CREDENTIAL_TYPE_V2_0 (0x0002)
84 #define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 (0x0001)
86 #define STATUSMSG_OPTION_NOANIMATION (0x0001)
87 #define STATUSMSG_OPTION_SETFOREGROUND (0x0002)
91 struct _WLX_CLIENT_CREDENTIALS_INFO
97 BOOL fPromptForPassword
;
98 } WLX_CLIENT_CREDENTIALS_INFO_V1_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0
;
101 struct _WLX_CLIENT_CREDENTIALS_INFO_2_0
107 BOOL fPromptForPassword
;
108 BOOL fDisconnectOnLogonFailure
;
109 } WLX_CLIENT_CREDENTIALS_INFO_V2_0
, *PWLX_CLIENT_CREDENTIALS_INFO_V2_0
;
112 struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO
120 LARGE_INTEGER LogonTime
;
125 USHORT BadPasswordCount
;
126 LARGE_INTEGER ProfileLogonTime
;
127 LARGE_INTEGER LogoffTime
;
128 LARGE_INTEGER KickOffTime
;
129 LARGE_INTEGER PasswordLastSet
;
130 LARGE_INTEGER PasswordCanChange
;
131 LARGE_INTEGER PasswordMustChange
;
136 PWSTR HomeDirectoryDrive
;
139 ULONG PrivateDataLen
;
141 } WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
, *PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
;
144 struct _WLX_MPR_NOTIFY_INFO
149 PWSTR pszOldPassword
;
150 } WLX_MPR_NOTIFY_INFO
, *PWLX_MPR_NOTIFY_INFO
;
153 struct _WLX_PROFILE_V1_0
157 } WLX_PROFILE_V1_0
, *PWLX_PROFILE_V1_0
;
160 struct _WLX_PROFILE_V2_0
165 PWSTR pszNetworkDefaultUserProfile
;
167 PWSTR pszEnvironment
;
168 } WLX_PROFILE_V2_0
, *PWLX_PROFILE_V2_0
;
171 struct _WLX_SC_NOTIFICATION_INFO
176 PWSTR pszCryptoProvider
;
177 } WLX_SC_NOTIFICATION_INFO
, *PWLX_SC_NOTIFICATION_INFO
;
180 struct _WLX_TERMINAL_SERVICES_DATA
182 WCHAR ProfilePath
[WLX_DIRECTORY_LENGTH
+ 1];
183 WCHAR HomeDir
[WLX_DIRECTORY_LENGTH
+ 1];
184 WCHAR HomeDirDrive
[4];
185 } WLX_TERMINAL_SERVICES_DATA
, *PWLX_TERMINAL_SERVICES_DATA
;
188 /* GINA Version 1.0 */
191 WlxActivateUserShell(
193 PWSTR pszDesktopName
,
194 PWSTR pszMprLogonScript
,
198 WlxDisplayLockedNotice(
210 PVOID pWinlogonFunctions
,
231 PLUID pAuthenticationId
,
235 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
,
244 DWORD dwWinlogonVersion
,
245 PDWORD pdwDllVersion
);
258 /* GINA Version 1.1 */
261 WlxScreenSaverNotify(
268 PWSTR pszDesktopName
,
273 /* GINA Version 1.3 */
276 WlxDisplayStatusMessage(
292 WlxNetworkProviderLoad(
294 PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);
297 WlxRemoveStatusMessage(
301 /* GINA Version 1.4 */
308 WlxGetConsoleSwitchCredentials(
317 /* Services that Winlogon provides */
319 #define WLX_DESKTOP_NAME (0x0001) /* Name present */
320 #define WLX_DESKTOP_HANDLE (0x0002) /* Handle present */
322 #define WLX_CREATE_INSTANCE_ONLY (0x0001)
323 #define WLX_CREATE_USER (0x0002)
325 #define WLX_OPTION_USE_CTRL_ALT_DEL (0x0001)
326 #define WLX_OPTION_CONTEXT_POINTER (0x0002)
327 #define WLX_OPTION_USE_SMART_CARD (0x0003)
328 #define WLX_OPTION_FORCE_LOGOFF_TIME (0x0004)
329 #define WLX_OPTION_IGNORE_AUTO_LOGON (0x0008)
330 #define WLX_OPTION_NO_SWITCH_ON_SAS (0x0009)
332 #define WLX_OPTION_SMART_CARD_PRESENT (0x00010001)
333 #define WLX_OPTION_SMART_CARD_INFO (0x00010002)
334 #define WLX_OPTION_DISPATCH_TABLE_SIZE (0x00010003)
342 PWSTR pszDesktopName
;
343 } WLX_DESKTOP
, *PWLX_DESKTOP
;
346 int (WINAPI
*PWLX_ASSIGN_SHELL_PROTECTION
)(
353 BOOL (WINAPI
*PWLX_CLOSE_USER_DESKTOP
)(
355 PWLX_DESKTOP pDesktop
,
359 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY
)(
361 PWLX_MPR_NOTIFY_INFO pMprInfo
,
365 int (WINAPI
*PWLX_CHANGE_PASSWORD_NOTIFY_EX
)(
367 PWLX_MPR_NOTIFY_INFO pMprInfo
,
373 BOOL (WINAPI
*PWLX_CREATE_USER_DESKTOP
)(
377 PWSTR pszDesktopName
,
378 PWLX_DESKTOP
*ppDesktop
);
381 int (WINAPI
*PWLX_DIALOG_BOX
)(
389 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT
)(
392 LPCDLGTEMPLATE hDialogTemplate
,
397 int (WINAPI
*PWLX_DIALOG_BOX_INDIRECT_PARAM
)(
400 LPCDLGTEMPLATE hDialogTemplate
,
406 int (WINAPI
*PWLX_DIALOG_BOX_PARAM
)(
415 BOOL (WINAPI
*PWLX_DISCONNECT
)();
418 BOOL (WINAPI
*PWLX_GET_OPTION
)(
424 BOOL (WINAPI
*PWLX_GET_SOURCE_DESKTOP
)(
426 PWLX_DESKTOP
*ppDesktop
);
429 int (WINAPI
*PWLX_MESSAGE_BOX
)(
437 BOOL (WINAPI
*PWLX_QUERY_CLIENT_CREDENTIALS
)(
438 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
441 DWORD (WINAPI
*PWLX_QUERY_CONSOLESWITCH_CREDENTIALS
)(
442 PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred
);
445 BOOL (WINAPI
*PWLX_QUERY_IC_CREDENTIALS
)(
446 PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
449 DWORD (WINAPI
*PWLX_QUERY_TERMINAL_SERVICES_DATA
)(
451 PWLX_TERMINAL_SERVICES_DATA pTSData
,
456 BOOL (WINAPI
*PWLX_QUERY_TS_LOGON_CREDENTIALS
)(
457 PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred
);
460 VOID (WINAPI
*PWLX_SAS_NOTIFY
)(
465 VOID (WINAPI
*PWLX_SET_CONTEXT_POINTER
)(
470 BOOL (WINAPI
*PWLX_SET_RETURN_DESKTOP
)(
472 PWLX_DESKTOP pDesktop
);
475 BOOL (WINAPI
*PWLX_SET_OPTION
)(
479 ULONG_PTR
*OldValue
);
482 BOOL (WINAPI
*PWLX_SET_TIMEOUT
)(
487 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_USER
)(
491 int (WINAPI
*PWLX_SWITCH_DESKTOP_TO_WINLOGON
)(
495 VOID (WINAPI
*PWLX_USE_CTRL_ALT_DEL
)(
499 VOID (WINAPI
*PWLX_WIN31_MIGRATE
)(
503 /* function dispatch tables */
506 struct _WLX_DISPATCH_VERSION_1_0
508 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
509 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
510 PWLX_SAS_NOTIFY WlxSasNotify
;
511 PWLX_SET_TIMEOUT WlxSetTimeout
;
512 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
513 PWLX_MESSAGE_BOX WlxMessageBox
;
514 PWLX_DIALOG_BOX WlxDialogBox
;
515 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
516 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
517 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
518 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
519 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
520 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
521 } WLX_DISPATCH_VERSION_1_0
, *PWLX_DISPATCH_VERSION_1_0
;
524 struct _WLX_DISPATCH_VERSION_1_1
526 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
527 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
528 PWLX_SAS_NOTIFY WlxSasNotify
;
529 PWLX_SET_TIMEOUT WlxSetTimeout
;
530 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
531 PWLX_MESSAGE_BOX WlxMessageBox
;
532 PWLX_DIALOG_BOX WlxDialogBox
;
533 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
534 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
535 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
536 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
537 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
538 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
539 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
540 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
541 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
542 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
543 } WLX_DISPATCH_VERSION_1_1
, *PWLX_DISPATCH_VERSION_1_1
;
546 struct _WLX_DISPATCH_VERSION_1_2
548 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
549 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
550 PWLX_SAS_NOTIFY WlxSasNotify
;
551 PWLX_SET_TIMEOUT WlxSetTimeout
;
552 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
553 PWLX_MESSAGE_BOX WlxMessageBox
;
554 PWLX_DIALOG_BOX WlxDialogBox
;
555 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
556 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
557 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
558 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
559 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
560 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
561 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
562 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
563 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
564 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
565 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
566 } WLX_DISPATCH_VERSION_1_2
, *PWLX_DISPATCH_VERSION_1_2
;
569 struct _WLX_DISPATCH_VERSION_1_3
571 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
572 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
573 PWLX_SAS_NOTIFY WlxSasNotify
;
574 PWLX_SET_TIMEOUT WlxSetTimeout
;
575 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
576 PWLX_MESSAGE_BOX WlxMessageBox
;
577 PWLX_DIALOG_BOX WlxDialogBox
;
578 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
579 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
580 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
581 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
582 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
583 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
584 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
585 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
586 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
587 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
588 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
589 PWLX_SET_OPTION WlxSetOption
;
590 PWLX_GET_OPTION WlxGetOption
;
591 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
592 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
593 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
594 PWLX_DISCONNECT WlxDisconnect
;
595 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
596 } WLX_DISPATCH_VERSION_1_3
, *PWLX_DISPATCH_VERSION_1_3
;
599 struct _WLX_DISPATCH_VERSION_1_4
601 PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel
;
602 PWLX_SET_CONTEXT_POINTER WlxSetContextPointer
;
603 PWLX_SAS_NOTIFY WlxSasNotify
;
604 PWLX_SET_TIMEOUT WlxSetTimeout
;
605 PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection
;
606 PWLX_MESSAGE_BOX WlxMessageBox
;
607 PWLX_DIALOG_BOX WlxDialogBox
;
608 PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam
;
609 PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect
;
610 PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam
;
611 PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser
;
612 PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon
;
613 PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify
;
614 PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop
;
615 PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop
;
616 PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop
;
617 PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx
;
618 PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop
;
619 PWLX_SET_OPTION WlxSetOption
;
620 PWLX_GET_OPTION WlxGetOption
;
621 PWLX_WIN31_MIGRATE WlxWin31Migrate
;
622 PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials
;
623 PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials
;
624 PWLX_DISCONNECT WlxDisconnect
;
625 PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData
;
626 PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials
;
627 PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials
;
628 } WLX_DISPATCH_VERSION_1_4
, *PWLX_DISPATCH_VERSION_1_4
;
631 /* non-GINA notification DLLs*/
634 DWORD (CALLBACK
*PFNMSGECALLBACK
)(
639 struct _WLX_NOTIFICATION_INFO
648 PFNMSGECALLBACK pStatusCallback
;
649 } WLX_NOTIFICATION_INFO
, *PWLX_NOTIFICATION_INFO
;
656 #endif /*__WINWLX_H */