Dialog Services
Winlogon implements two timeout functions. During any secure dialog, such as logon or unlocking a workstation, Winlogon may timeout the dialog boxes and return to dialog process for the dialog. Winlogon is also responsible for screen saver activation and termination. To enable Winlogon to perform these timeout functions, Winlogon provides a set of dialog services for GINAs to use. GINAs must use these services rather than the typical Win32 counterparts of these services.
The Winlogon services provided for this purpose are:
- WlxMessageBox() - Similar to the Win32 MessageBox() service.
- WlxDialogBox() - Similar to the Win32 DialogBox() service.
- WlxDialogBoxIndirect() - Similar to the Win32 DialogBoxIndirect() service.
- WlxDialogBoxParam() - Similar to the Win32 DialogBoxParam() service.
- WlxDialogBoxParamIndirect() - Similar to the Win32 DialogBoxParamIndirect() service.
A GINA that uses these services must be aware of a new message value: WLX_WM_TIMEOUT may be sent to a window either in preparation for screen-saver activation or for normal dialog timeout. This message is sent by Winlogon to the dialog box when a timeout has occurred. The wParam parameter is 0 for an input timeout, and 1 for a screen-saver timeout. The dialog process should either ignore this message, in which case Winlogon will end the dialog, or process this message and end the dialog appropriately.
If Winlogon ends a dialog due to a timeout, it is ended with one of the following codes, as appropriate: WLX_DLG_INPUT_TIMEOUT, WLX_DLG_SCREEN_SAVER_TIMEOUT.
GINAs may also receive WLX_WM_SAS messages from Winlogon. These are sent to active dialog boxes if a SAS is received, either from the GINA or CTRL+ALT+DEL, if Winlogon is so configured. This is useful if a GINA is in the middle of prompting for the matching PIN for a smart card, and someone removes the card out of the smart-card reader. Winlogon provides an end code for use in these occasions, WLX_DLG_SAS.
GINAs may have dialog boxes terminated by Winlogon with the code WLX_DLG_USER_LOGOFF. That indicates that the user has logged off during the running of the dialog box, e.g. by calling ExitWindowsEx() from another thread.