Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1132 lines
36 KiB

/*++ BUILD Version: 0001 Increment this if a change has global effects
Copyright (c) 1985-1999, Microsoft Corporation
Module Name:
winwlx.h
Abstract:
WLX == WinLogon eXtension
This file contains definitions, data types, and routine prototypes
necessary to produce a replacement Graphical Identification aNd
Authentication (GINA) DLL for Winlogon.
Author:
Richard Ward (RichardW) and Jim Kelly (JimK) May-1994
Revision History:
--*/
#ifndef _WINWLX_
#define _WINWLX_
#if _MSC_VER > 1000
#pragma once
#endif
////////////////////////////////////////////////////////////////////////
// //
// #defines //
// //
////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// Revisions of Winlogon API available for use by GINAs
// Version is two parts: Major revision and minor revision.
// Major revision is the upper 16-bits, minor is the lower
// 16-bits.
//
#define WLX_VERSION_1_0 (0X00010000)
#define WLX_VERSION_1_1 (0X00010001)
#define WLX_VERSION_1_2 (0X00010002)
#define WLX_VERSION_1_3 (0X00010003)
#define WLX_VERSION_1_4 (0X00010004)
#define WLX_CURRENT_VERSION (WLX_VERSION_1_4)
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// Secure attention sequence types
// These values are passed to routines that have a dwSasType
// parameter.
//
// ALL VALUES FROM 0 TO 127 ARE RESERVED FOR MICROSOFT DEFINITION.
// VALUES ABOVE 127 ARE RESERVED FOR CUSTOMER DEFINITION.
//
// CTRL_ALT_DEL - used to indicate that the standard ctrl-alt-del
// secure attention sequence has been entered.
//
// SCRNSVR_TIMEOUT - used to indicate that keyboard/mouse inactivity
// has lead to a screensaver activation. It is up to the GINA
// DLL whether this constitutes a workstation locking event.
//
// SCRNSVR_ACTIVITY - used to indicate that keyboard or mouse
// activity occured while a secure screensaver was active.
//
// SC_INSERT - used to indicate that a smart card has been inserted
// to a compatible device
//
// SC_REMOVE - used to indicate that a smart card has been removed
// from a compatible device
//
#define WLX_SAS_TYPE_TIMEOUT (0)
#define WLX_SAS_TYPE_CTRL_ALT_DEL (1)
#define WLX_SAS_TYPE_SCRNSVR_TIMEOUT (2)
#define WLX_SAS_TYPE_SCRNSVR_ACTIVITY (3)
#define WLX_SAS_TYPE_USER_LOGOFF (4)
#define WLX_SAS_TYPE_SC_INSERT (5)
#define WLX_SAS_TYPE_SC_REMOVE (6)
#define WLX_SAS_TYPE_AUTHENTICATED (7)
#define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED (8)
#define WLX_SAS_TYPE_SC_LAST_READER_REMOVED (9)
#define WLX_SAS_TYPE_SWITCHUSER (10)
#define WLX_SAS_TYPE_MAX_MSFT_VALUE (127)
//
// This structure is available through WlxGetOption, and is
// passed as the lParam for any S/C SAS notices sent to windows
//
typedef struct _WLX_SC_NOTIFICATION_INFO {
PWSTR pszCard ;
PWSTR pszReader ;
PWSTR pszContainer ;
PWSTR pszCryptoProvider ;
} WLX_SC_NOTIFICATION_INFO, * PWLX_SC_NOTIFICATION_INFO ;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// Upon successful logon, the GINA DLL may specify any of the following
// options to Winlogon (via the dwOptions parameter of the WlxLoggedOutSas()
// api). When set, these options specify:
//
// NO_PROFILE - Winlogon must NOT load a profile for the logged
// on user. Either the GINA DLL will take care of
// this activity, or the user does not need a profile.
//
#define WLX_LOGON_OPT_NO_PROFILE (0x00000001)
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// GINA DLLs are expected to return account information to Winlogon
// following a successful logon. This information allows Winlogon
// to support profile loading and supplemental network providers.
//
// To allow different sets of profile information to be returned
// by GINAs over time, the first DWORD of each profile structure
// is expected to contain a type-identifier. The following constants
// are the defined profile type identifiers.
//
//
// Standard profile is V2_0
//
#define WLX_PROFILE_TYPE_V1_0 (1)
#define WLX_PROFILE_TYPE_V2_0 (2)
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// WlxLoggedOnSas() and WlxWkstaLockedSas() return an action
// value to Winlogon directing Winlogon to either remain unchanged
// or to perform some action (such as force-log the user off).
// These are the values that may be returned. Note, however, that
// not all of the values may be returned by both of these api. See
// the description of each api to see which values are expected from
// each.
//
// LOGON - User has logged on
// NONE - Don't change the state of the window station.
// LOCK_WKSTA - Lock the workstation, wait for next SAS.
// LOGOFF - Log the user off of the workstation.
// SHUTDOWN - Log the user off and shutdown the machine.
// PWD_CHANGED - Indicates that the user changed their password. Notify network providers.
// TASKLIST - Invoke the task list.
// UNLOCK_WKSTA - Unlock the workstation.
// FORCE_LOGOFF - Forcibly log the user off.
// SHUTDOWN_POWER_OFF - Turn off machine after shutting down.
// SHUTDOWN_REBOOT - Reboot machine after shutting down.
// SHUTDOWN_SLEEP - Put the machine to sleep
// SHUTDOWN_SLEEP2 - Put the machine to sleep and disable wakeup events
// SHUTDOWN_HIBERNATE - Hibernate the machine
// RECONNECTED - Session was reconnected to an earlier session
//
#define WLX_SAS_ACTION_LOGON (1)
#define WLX_SAS_ACTION_NONE (2)
#define WLX_SAS_ACTION_LOCK_WKSTA (3)
#define WLX_SAS_ACTION_LOGOFF (4)
#define WLX_SAS_ACTION_SHUTDOWN (5)
#define WLX_SAS_ACTION_PWD_CHANGED (6)
#define WLX_SAS_ACTION_TASKLIST (7)
#define WLX_SAS_ACTION_UNLOCK_WKSTA (8)
#define WLX_SAS_ACTION_FORCE_LOGOFF (9)
#define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF (10)
#define WLX_SAS_ACTION_SHUTDOWN_REBOOT (11)
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP (12)
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP2 (13)
#define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE (14)
#define WLX_SAS_ACTION_RECONNECTED (15)
#define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF (16)
#define WLX_SAS_ACTION_SWITCH_CONSOLE (17)
////////////////////////////////////////////////////////////////////////
// //
// Window Messages //
// //
////////////////////////////////////////////////////////////////////////
//
// The WM_SAS is defined as follows
//
// The wParam parameter has the SAS Type (above)
#define WLX_WM_SAS (WM_USER + 601)
//
// Dialog return values
//
// These may be returned by dialogs started by a GINA dll.
//
#define WLX_DLG_SAS 101
#define WLX_DLG_INPUT_TIMEOUT 102 // Input (keys, etc) timed out
#define WLX_DLG_SCREEN_SAVER_TIMEOUT 103 // Screen Saver activated
#define WLX_DLG_USER_LOGOFF 104 // User logged off
////////////////////////////////////////////////////////////////////////
// //
// #data types //
// //
////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// The WLX_PROFILE_* structure is returned from a GINA DLL
// following authentication. This information is used by Winlogon
// to support supplemental Network Providers and to load the
// newly logged-on user's profile.
//
// Winlogon is responsible for freeing both the profile structure
// and the fields within the structure that are marked as separately
// deallocatable.
//
typedef struct _WLX_PROFILE_V1_0 {
//
// This field identifies the type of profile being returned by a
// GINA DLL. Profile types are defined with the prefix
// WLX_PROFILE_TYPE_xxx. It allows Winlogon to typecast the
// structure so the remainder of the structure may be referenced.
//
DWORD dwType;
//
// pathname of profile to load for user.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszProfile;
} WLX_PROFILE_V1_0, * PWLX_PROFILE_V1_0;
typedef struct _WLX_PROFILE_V2_0 {
//
// This field identifies the type of profile being returned by a
// GINA DLL. Profile types are defined with the prefix
// WLX_PROFILE_TYPE_xxx. It allows Winlogon to typecast the
// structure so the remainder of the structure may be referenced.
//
DWORD dwType;
//
// pathname of profile to load for user.
//
// This parameter can be NULL. If so, the user has a local
// profile only.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszProfile;
//
// pathname of policy to load for user.
//
// This parameter can be NULL which prevents network wide policy
// from being applied.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszPolicy;
//
// pathname of network default user profile
//
// This parameter can be NULL, which causes the Default User
// profile on the local machine to be used.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszNetworkDefaultUserProfile;
//
// name of the server which validated the user account
//
// This is used to enumerate globals groups the user belongs
// to for policy support. This parameter can be NULL.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszServerName;
//
// pointer to a series of null terminated environment variables
//
// envname=environment variable value
// - or -
// envname=%OtherVar%\more text
//
// Each environment variable is NULL terminated with the last
// environment variable double NULL terminated. These variables
// are set into the user's initial environment. The environment
// variable value can contain other environment variables wrapped
// in "%" signs. This parameter can be NULL.
//
// The buffer pointed to by this field must be separately allocated.
// Winlogon will free the buffer when it is no longer needed.
//
//
PWSTR pszEnvironment;
} WLX_PROFILE_V2_0, * PWLX_PROFILE_V2_0;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// The WLX_NPR_NOTIFICATION_INFO structure is returned
// from a GINA DLL following successful authentication.
// This information is used by Winlogon to provide
// identification and authentication information already
// collected to network providers. Winlogon is
// responsible for freeing both the main structure and all
// string and other buffers pointed to from within the
// structure.
//
typedef struct _WLX_MPR_NOTIFY_INFO {
//
// The name of the account logged onto (e.g. REDMOND\Joe).
// The string pointed to by this field must be separately
// allocated and will be separately deallocated by Winlogon.
//
PWSTR pszUserName;
//
// The string pointed to by this field must be separately
// allocated and will be separately deallocated by Winlogon.
//
PWSTR pszDomain;
//
// Cleartext password of the user account. If the OldPassword
// field is non-null, then this field contains the new password
// in a password change operation. The string pointed to by
// this field must be separately allocated and will be seperately
// deallocated by Winlogon.
//
PWSTR pszPassword;
//
// Cleartext old password of the user account whose password
// has just been changed. The Password field contains the new
// password. The string pointed to by this field must be
// separately allocated and will be separately deallocated by
// Winlogon.
//
PWSTR pszOldPassword;
} WLX_MPR_NOTIFY_INFO, * PWLX_MPR_NOTIFY_INFO;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// WLX_TERMINAL_SERVICES_DATA is used by the GINA during a
// WlxQueryTerminalServicesData() callback into WinLogon from the
// WlxLoggedOutSAS() context, after the user name and domain are known.
// This structure relates to TS user configuration information which is
// retrieved from the Domain Controller and SAM database. Having WinLogon
// pass this information means the GINA does not need to do the same
// off-machines lookups again.
//
#define WLX_DIRECTORY_LENGTH 256
typedef struct _WLX_TERMINAL_SERVICES_DATA {
//
// TS profile path, overrides the standard profile path.
//
WCHAR ProfilePath[WLX_DIRECTORY_LENGTH + 1];
//
// TS home directory, overrides standard home directory.
//
WCHAR HomeDir[WLX_DIRECTORY_LENGTH + 1];
//
// TS home directory drive, overrides standard drive.
//
WCHAR HomeDirDrive[4];
} WLX_TERMINAL_SERVICES_DATA, *PWLX_TERMINAL_SERVICES_DATA;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// The WLX_CLIENT_CREDENTIALS_INFO structure is returned
// from winlogon from the WlxQueryClientCredentials() call.
//
// This allows a network client WinStation to pass client
// credentials for automatic logon.
//
// The MSGINA DLL is responsible for freeing the memory
// and substrings with LocalFree().
//
#define WLX_CREDENTIAL_TYPE_V1_0 (1)
#define WLX_CREDENTIAL_TYPE_V2_0 (2)
typedef struct _WLX_CLIENT_CREDENTIALS_INFO {
//
// This field identifies the type of credentials structure being allocated
// by GINA DLL. Credential types are defined with the prefix
// WLX_CREDENTIAL_TYPE_xxx. It allows Winlogon to typecast the
// structure so the remainder of the structure may be referenced.
//
DWORD dwType;
PWSTR pszUserName;
PWSTR pszDomain;
PWSTR pszPassword;
//
// This field forces a prompt for the password. This
// is due to an administrator override.
//
// This allows the distinguishing of autologon
// with no password.
//
BOOL fPromptForPassword;
} WLX_CLIENT_CREDENTIALS_INFO_V1_0, * PWLX_CLIENT_CREDENTIALS_INFO_V1_0;
typedef struct _WLX_CLIENT_CREDENTIALS_INFO_2_0 {
DWORD dwType;
PWSTR pszUserName;
PWSTR pszDomain;
PWSTR pszPassword;
BOOL fPromptForPassword;
//
// This field tells winlogon to disconnect/abort the logon attempt if the
// provided password is incorrect, or if it should reprompt (current
// behavior)
//
BOOL fDisconnectOnLogonFailure;
} WLX_CLIENT_CREDENTIALS_INFO_V2_0, * PWLX_CLIENT_CREDENTIALS_INFO_V2_0;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// The WLX_CONSOLESWITCH_CREDENTIALS_INFO structure is returned
// from gina in response to WlxGetConsoleSwitchCredentials calls.
// This structure is also returned from winlogon in response to
// to WlxQueryConsoleSwitchCredentials call
//
// This is used to implement single session Terminal Server. A remote
// session winlogon calls WlxGetConsoleSwitchCredentials to get the token
// and other info of the logged on user from msgina. This info is then passed to
// the console session winlogon to autologon the user on the console session.
// The gina on console session calls WlxQueryConsoleSwitchCredentials to get
// this info from winlogon and logs on the user.
//
// The caller is responsible for freeing the memory
// and substrings with LocalFree().
//
#define WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 (1)
typedef struct _WLX_CONSOLESWITCH_CREDENTIALS_INFO {
//
// This field identifies the type of credentials structure being allocated
// Credential types are defined with the prefix
// WLX_CONSOLESWITCHCREDENTIAL_TYPE_xxx. It allows Winlogon to typecast the
// structure so the remainder of the structure may be referenced.
//
DWORD dwType;
HANDLE UserToken;
LUID LogonId;
QUOTA_LIMITS Quotas;
PWSTR UserName;
PWSTR Domain;
LARGE_INTEGER LogonTime;
BOOL SmartCardLogon;
ULONG ProfileLength;
//
// From MSV1_0_INTERACTIVE_PROFILE
//
DWORD MessageType;
USHORT LogonCount;
USHORT BadPasswordCount;
LARGE_INTEGER ProfileLogonTime;
LARGE_INTEGER LogoffTime;
LARGE_INTEGER KickOffTime;
LARGE_INTEGER PasswordLastSet;
LARGE_INTEGER PasswordCanChange;
LARGE_INTEGER PasswordMustChange;
PWSTR LogonScript;
PWSTR HomeDirectory;
PWSTR FullName;
PWSTR ProfilePath;
PWSTR HomeDirectoryDrive;
PWSTR LogonServer;
ULONG UserFlags;
ULONG PrivateDataLen;
PBYTE PrivateData;
} WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0, * PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
////////////////////////////////////////////////////////////////////////
// //
// Services that replacement GINAs ** MUST ** provide //
// //
////////////////////////////////////////////////////////////////////////
BOOL
WINAPI
WlxNegotiate(
DWORD dwWinlogonVersion,
PDWORD pdwDllVersion
);
BOOL
WINAPI
WlxInitialize(
LPWSTR lpWinsta,
HANDLE hWlx,
PVOID pvReserved,
PVOID pWinlogonFunctions,
PVOID * pWlxContext
);
VOID
WINAPI
WlxDisplaySASNotice(
PVOID pWlxContext
);
int
WINAPI
WlxLoggedOutSAS(
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
PVOID * pProfile
);
BOOL
WINAPI
WlxActivateUserShell(
PVOID pWlxContext,
PWSTR pszDesktopName,
PWSTR pszMprLogonScript,
PVOID pEnvironment
);
int
WINAPI
WlxLoggedOnSAS(
PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved
);
VOID
WINAPI
WlxDisplayLockedNotice(
PVOID pWlxContext
);
int
WINAPI
WlxWkstaLockedSAS(
PVOID pWlxContext,
DWORD dwSasType
);
BOOL
WINAPI
WlxIsLockOk(
PVOID pWlxContext
);
BOOL
WINAPI
WlxIsLogoffOk(
PVOID pWlxContext
);
VOID
WINAPI
WlxLogoff(
PVOID pWlxContext
);
VOID
WINAPI
WlxShutdown(
PVOID pWlxContext,
DWORD ShutdownType
);
//
// NEW for version 1.1
//
BOOL
WINAPI
WlxScreenSaverNotify(
PVOID pWlxContext,
BOOL * pSecure);
BOOL
WINAPI
WlxStartApplication(
PVOID pWlxContext,
PWSTR pszDesktopName,
PVOID pEnvironment,
PWSTR pszCmdLine
);
//
// New for 1.3
//
BOOL
WINAPI
WlxNetworkProviderLoad(
PVOID pWlxContext,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);
#define STATUSMSG_OPTION_NOANIMATION 0x00000001
#define STATUSMSG_OPTION_SETFOREGROUND 0x00000002
BOOL
WINAPI
WlxDisplayStatusMessage(
PVOID pWlxContext,
HDESK hDesktop,
DWORD dwOptions,
PWSTR pTitle,
PWSTR pMessage
);
BOOL
WINAPI
WlxGetStatusMessage(
PVOID pWlxContext,
DWORD * pdwOptions,
PWSTR pMessage,
DWORD dwBufferSize
);
BOOL
WINAPI
WlxRemoveStatusMessage(
PVOID pWlxContext
);
//
// New for 1.4
//
BOOL
WINAPI
WlxGetConsoleSwitchCredentials (
PVOID pWlxContext,
PVOID pCredInfo
);
VOID
WINAPI
WlxReconnectNotify (
PVOID pWlxContext
);
VOID
WINAPI
WlxDisconnectNotify (
PVOID pWlxContext
);
////////////////////////////////////////////////////////////////////////
// //
// Services that Winlogon provides //
// //
////////////////////////////////////////////////////////////////////////
typedef struct _WLX_DESKTOP {
DWORD Size;
DWORD Flags;
HDESK hDesktop;
PWSTR pszDesktopName;
} WLX_DESKTOP, * PWLX_DESKTOP;
#define WLX_DESKTOP_NAME 0x00000001 // Name present
#define WLX_DESKTOP_HANDLE 0x00000002 // Handle present
typedef VOID
(WINAPI * PWLX_USE_CTRL_ALT_DEL)(
HANDLE hWlx
);
typedef VOID
(WINAPI * PWLX_SET_CONTEXT_POINTER)(
HANDLE hWlx,
PVOID pWlxContext
);
typedef VOID
(WINAPI * PWLX_SAS_NOTIFY)(
HANDLE hWlx,
DWORD dwSasType
);
typedef BOOL
(WINAPI * PWLX_SET_TIMEOUT)(
HANDLE hWlx,
DWORD Timeout);
typedef int
(WINAPI * PWLX_ASSIGN_SHELL_PROTECTION)(
HANDLE hWlx,
HANDLE hToken,
HANDLE hProcess,
HANDLE hThread
);
typedef int
(WINAPI * PWLX_MESSAGE_BOX)(
HANDLE hWlx,
HWND hwndOwner,
LPWSTR lpszText,
LPWSTR lpszTitle,
UINT fuStyle
);
typedef int
(WINAPI * PWLX_DIALOG_BOX)(
HANDLE hWlx,
HANDLE hInst,
LPWSTR lpszTemplate,
HWND hwndOwner,
DLGPROC dlgprc
);
typedef int
(WINAPI * PWLX_DIALOG_BOX_INDIRECT)(
HANDLE hWlx,
HANDLE hInst,
LPCDLGTEMPLATE hDialogTemplate,
HWND hwndOwner,
DLGPROC dlgprc
);
typedef int
(WINAPI * PWLX_DIALOG_BOX_PARAM)(
HANDLE hWlx,
HANDLE hInst,
LPWSTR lpszTemplate,
HWND hwndOwner,
DLGPROC dlgprc,
LPARAM dwInitParam
);
typedef int
(WINAPI * PWLX_DIALOG_BOX_INDIRECT_PARAM)(
HANDLE hWlx,
HANDLE hInst,
LPCDLGTEMPLATE hDialogTemplate,
HWND hwndOwner,
DLGPROC dlgprc,
LPARAM dwInitParam
);
typedef int
(WINAPI * PWLX_SWITCH_DESKTOP_TO_USER)(
HANDLE hWlx);
typedef int
(WINAPI * PWLX_SWITCH_DESKTOP_TO_WINLOGON)(
HANDLE hWlx);
typedef int
(WINAPI * PWLX_CHANGE_PASSWORD_NOTIFY)(
HANDLE hWlx,
PWLX_MPR_NOTIFY_INFO pMprInfo,
DWORD dwChangeInfo
);
typedef BOOL
(WINAPI * PWLX_GET_SOURCE_DESKTOP)(
HANDLE hWlx,
PWLX_DESKTOP * ppDesktop);
typedef BOOL
(WINAPI * PWLX_SET_RETURN_DESKTOP)(
HANDLE hWlx,
PWLX_DESKTOP pDesktop);
typedef BOOL
(WINAPI * PWLX_CREATE_USER_DESKTOP)(
HANDLE hWlx,
HANDLE hToken,
DWORD Flags,
PWSTR pszDesktopName,
PWLX_DESKTOP * ppDesktop);
#define WLX_CREATE_INSTANCE_ONLY 0x00000001
#define WLX_CREATE_USER 0x00000002
typedef int
(WINAPI * PWLX_CHANGE_PASSWORD_NOTIFY_EX)(
HANDLE hWlx,
PWLX_MPR_NOTIFY_INFO pMprInfo,
DWORD dwChangeInfo,
PWSTR ProviderName,
PVOID Reserved);
typedef BOOL
(WINAPI * PWLX_CLOSE_USER_DESKTOP)(
HANDLE hWlx,
PWLX_DESKTOP pDesktop,
HANDLE hToken );
typedef BOOL
(WINAPI * PWLX_SET_OPTION)(
HANDLE hWlx,
DWORD Option,
ULONG_PTR Value,
ULONG_PTR * OldValue
);
typedef BOOL
(WINAPI * PWLX_GET_OPTION)(
HANDLE hWlx,
DWORD Option,
ULONG_PTR * Value
);
typedef VOID
(WINAPI * PWLX_WIN31_MIGRATE)(
HANDLE hWlx
);
typedef BOOL
(WINAPI * PWLX_QUERY_CLIENT_CREDENTIALS)(
PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
typedef BOOL
(WINAPI * PWLX_QUERY_IC_CREDENTIALS)(
PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
typedef BOOL
(WINAPI * PWLX_QUERY_TS_LOGON_CREDENTIALS)(
PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred
);
typedef BOOL
(WINAPI * PWLX_DISCONNECT)(
);
typedef DWORD
(WINAPI * PWLX_QUERY_TERMINAL_SERVICES_DATA)(
HANDLE hWlx,
PWLX_TERMINAL_SERVICES_DATA pTSData,
WCHAR * UserName,
WCHAR * Domain
);
typedef DWORD
(WINAPI * PWLX_QUERY_CONSOLESWITCH_CREDENTIALS)(
PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred
);
//
// Options that can be get or set:
//
#define WLX_OPTION_USE_CTRL_ALT_DEL 0x00000001
#define WLX_OPTION_CONTEXT_POINTER 0x00000002
#define WLX_OPTION_USE_SMART_CARD 0x00000003
#define WLX_OPTION_FORCE_LOGOFF_TIME 0x00000004
#define WLX_OPTION_IGNORE_AUTO_LOGON 0x00000008
#define WLX_OPTION_NO_SWITCH_ON_SAS 0x00000009
//
// Options that can be queried only:
//
#define WLX_OPTION_SMART_CARD_PRESENT 0x00010001
#define WLX_OPTION_SMART_CARD_INFO 0x00010002
#define WLX_OPTION_DISPATCH_TABLE_SIZE 0x00010003
////////////////////////////////////////////////////////////////////////
// //
// Function dispatch tables. //
// One of the following tables will be passed to the GINA DLL //
// in the WlxInitialize() call during initialization. //
// //
////////////////////////////////////////////////////////////////////////
typedef struct _WLX_DISPATCH_VERSION_1_0 {
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
} WLX_DISPATCH_VERSION_1_0, *PWLX_DISPATCH_VERSION_1_0;
typedef struct _WLX_DISPATCH_VERSION_1_1 {
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
} WLX_DISPATCH_VERSION_1_1, * PWLX_DISPATCH_VERSION_1_1;
typedef struct _WLX_DISPATCH_VERSION_1_2 {
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop ;
} WLX_DISPATCH_VERSION_1_2, * PWLX_DISPATCH_VERSION_1_2;
typedef struct _WLX_DISPATCH_VERSION_1_3 {
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop ;
PWLX_SET_OPTION WlxSetOption;
PWLX_GET_OPTION WlxGetOption;
PWLX_WIN31_MIGRATE WlxWin31Migrate;
PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
PWLX_DISCONNECT WlxDisconnect;
PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
} WLX_DISPATCH_VERSION_1_3, * PWLX_DISPATCH_VERSION_1_3;
typedef struct _WLX_DISPATCH_VERSION_1_4 {
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop ;
PWLX_SET_OPTION WlxSetOption;
PWLX_GET_OPTION WlxGetOption;
PWLX_WIN31_MIGRATE WlxWin31Migrate;
PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
PWLX_DISCONNECT WlxDisconnect;
PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
PWLX_QUERY_CONSOLESWITCH_CREDENTIALS WlxQueryConsoleSwitchCredentials;
PWLX_QUERY_TS_LOGON_CREDENTIALS WlxQueryTsLogonCredentials;
} WLX_DISPATCH_VERSION_1_4, * PWLX_DISPATCH_VERSION_1_4;
//
// Non-GINA notification DLLs
//
typedef DWORD (*PFNMSGECALLBACK)(BOOL bVerbose, LPWSTR lpMessage);
typedef struct _WLX_NOTIFICATION_INFO {
ULONG Size ;
ULONG Flags ;
PWSTR UserName ;
PWSTR Domain ;
PWSTR WindowStation ;
HANDLE hToken ;
HDESK hDesktop ;
PFNMSGECALLBACK pStatusCallback ;
} WLX_NOTIFICATION_INFO, * PWLX_NOTIFICATION_INFO ;
#endif /* _WINWLX_ */