mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-12 20:05:34 +00:00
1424 lines
50 KiB
ObjectPascal
1424 lines
50 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ WinLogon API interface Unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: winwlx.h, released June 2000. The original Pascal }
|
|
{ code is: WinWlx.pas, released December 2000. The initial developer of the }
|
|
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
|
|
{ }
|
|
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
|
|
{ Marcel van Brakel. All Rights Reserved. }
|
|
{ }
|
|
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project JEDI }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to the Mozilla }
|
|
{ Public License Version 1.1 (the "License"); you may not use this file except }
|
|
{ in compliance with the License. You may obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an "AS IS" basis, }
|
|
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
|
|
{ the specific language governing rights and limitations under the License. }
|
|
{ }
|
|
{ Alternatively, the contents of this file may be used under the terms of the }
|
|
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
|
|
{ provisions of the LGPL License are applicable instead of those above. }
|
|
{ If you wish to allow use of your version of this file only under the terms }
|
|
{ of the LGPL License and not to allow others to use your version of this file }
|
|
{ under the MPL, indicate your decision by deleting the provisions above and }
|
|
{ replace them with the notice and other provisions required by the LGPL }
|
|
{ License. If you do not delete the provisions above, a recipient may use }
|
|
{ your version of this file under either the MPL or the LGPL License. }
|
|
{ }
|
|
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
|
|
{ }
|
|
{******************************************************************************}
|
|
|
|
// $Id: JwaWinWlx.pas,v 1.12 2007/09/05 11:58:54 dezipaitor Exp $
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
unit JwaWinWlx;
|
|
|
|
{$WEAKPACKAGEUNIT}
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT '#include "WinWlx.h"'}
|
|
{$HPPEMIT ''}
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
{$I ..\Includes\JediAPILib.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
JwaWinType, JwaWinUser, JwaWinNT;
|
|
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
|
|
|
|
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
// 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.
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
const
|
|
WLX_VERSION_1_0 = $00010000;
|
|
{$EXTERNALSYM WLX_VERSION_1_0}
|
|
WLX_VERSION_1_1 = $00010001;
|
|
{$EXTERNALSYM WLX_VERSION_1_1}
|
|
WLX_VERSION_1_2 = $00010002;
|
|
{$EXTERNALSYM WLX_VERSION_1_2}
|
|
WLX_VERSION_1_3 = $00010003;
|
|
{$EXTERNALSYM WLX_VERSION_1_3}
|
|
WLX_VERSION_1_4 = $00010004;
|
|
{$EXTERNALSYM WLX_VERSION_1_4}
|
|
WLX_CURRENT_VERSION = WLX_VERSION_1_4;
|
|
{$EXTERNALSYM WLX_CURRENT_VERSION}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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
|
|
//
|
|
|
|
WLX_SAS_TYPE_TIMEOUT = 0;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_TIMEOUT}
|
|
WLX_SAS_TYPE_CTRL_ALT_DEL = 1;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_CTRL_ALT_DEL}
|
|
WLX_SAS_TYPE_SCRNSVR_TIMEOUT = 2;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SCRNSVR_TIMEOUT}
|
|
WLX_SAS_TYPE_SCRNSVR_ACTIVITY = 3;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SCRNSVR_ACTIVITY}
|
|
WLX_SAS_TYPE_USER_LOGOFF = 4;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_USER_LOGOFF}
|
|
WLX_SAS_TYPE_SC_INSERT = 5;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SC_INSERT}
|
|
WLX_SAS_TYPE_SC_REMOVE = 6;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SC_REMOVE}
|
|
WLX_SAS_TYPE_AUTHENTICATED = 7;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_AUTHENTICATED}
|
|
WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED = 8;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED}
|
|
WLX_SAS_TYPE_SC_LAST_READER_REMOVED = 9;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SC_LAST_READER_REMOVED}
|
|
WLX_SAS_TYPE_SWITCHUSER = 10;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_SWITCHUSER}
|
|
WLX_SAS_TYPE_MAX_MSFT_VALUE = 127;
|
|
{$EXTERNALSYM WLX_SAS_TYPE_MAX_MSFT_VALUE}
|
|
|
|
//
|
|
// This structure is available through WlxGetOption, and is
|
|
// passed as the lParam for any S/C SAS notices sent to windows
|
|
//
|
|
|
|
type
|
|
PWLX_SC_NOTIFICATION_INFO = ^WLX_SC_NOTIFICATION_INFO;
|
|
{$EXTERNALSYM PWLX_SC_NOTIFICATION_INFO}
|
|
_WLX_SC_NOTIFICATION_INFO = record
|
|
pszCard: PWSTR;
|
|
pszReader: PWSTR;
|
|
pszContainer: PWSTR;
|
|
pszCryptoProvider: PWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_SC_NOTIFICATION_INFO}
|
|
WLX_SC_NOTIFICATION_INFO = _WLX_SC_NOTIFICATION_INFO;
|
|
{$EXTERNALSYM WLX_SC_NOTIFICATION_INFO}
|
|
TWlxScNotificationInfo = WLX_SC_NOTIFICATION_INFO;
|
|
PWlxScNotificationInfo = 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.
|
|
//
|
|
|
|
const
|
|
WLX_LOGON_OPT_NO_PROFILE = $00000001;
|
|
{$EXTERNALSYM WLX_LOGON_OPT_NO_PROFILE}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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
|
|
//
|
|
|
|
WLX_PROFILE_TYPE_V1_0 = 1;
|
|
{$EXTERNALSYM WLX_PROFILE_TYPE_V1_0}
|
|
WLX_PROFILE_TYPE_V2_0 = 2;
|
|
{$EXTERNALSYM WLX_PROFILE_TYPE_V2_0}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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
|
|
//
|
|
|
|
WLX_SAS_ACTION_LOGON = 1;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_LOGON}
|
|
WLX_SAS_ACTION_NONE = 2;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_NONE}
|
|
WLX_SAS_ACTION_LOCK_WKSTA = 3;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_LOCK_WKSTA}
|
|
WLX_SAS_ACTION_LOGOFF = 4;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_LOGOFF}
|
|
WLX_SAS_ACTION_SHUTDOWN = 5;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN}
|
|
WLX_SAS_ACTION_PWD_CHANGED = 6;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_PWD_CHANGED}
|
|
WLX_SAS_ACTION_TASKLIST = 7;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_TASKLIST}
|
|
WLX_SAS_ACTION_UNLOCK_WKSTA = 8;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_UNLOCK_WKSTA}
|
|
WLX_SAS_ACTION_FORCE_LOGOFF = 9;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_FORCE_LOGOFF}
|
|
WLX_SAS_ACTION_SHUTDOWN_POWER_OFF = 10;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN_POWER_OFF}
|
|
WLX_SAS_ACTION_SHUTDOWN_REBOOT = 11;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN_REBOOT}
|
|
WLX_SAS_ACTION_SHUTDOWN_SLEEP = 12;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN_SLEEP}
|
|
WLX_SAS_ACTION_SHUTDOWN_SLEEP2 = 13;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN_SLEEP2}
|
|
WLX_SAS_ACTION_SHUTDOWN_HIBERNATE = 14;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SHUTDOWN_HIBERNATE}
|
|
WLX_SAS_ACTION_RECONNECTED = 15;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_RECONNECTED}
|
|
WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF = 16;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF}
|
|
WLX_SAS_ACTION_SWITCH_CONSOLE = 17;
|
|
{$EXTERNALSYM WLX_SAS_ACTION_SWITCH_CONSOLE}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Window Messages //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// The WM_SAS is defined as follows
|
|
//
|
|
// The wParam parameter has the SAS Type (above)
|
|
|
|
WLX_WM_SAS = WM_USER + 601;
|
|
{$EXTERNALSYM WLX_WM_SAS}
|
|
|
|
//
|
|
// Dialog return values
|
|
//
|
|
// These may be returned by dialogs started by a GINA dll.
|
|
//
|
|
|
|
WLX_DLG_SAS = 101;
|
|
{$EXTERNALSYM WLX_DLG_SAS}
|
|
WLX_DLG_INPUT_TIMEOUT = 102; // Input (keys, etc) timed out
|
|
{$EXTERNALSYM WLX_DLG_INPUT_TIMEOUT}
|
|
WLX_DLG_SCREEN_SAVER_TIMEOUT = 103; // Screen Saver activated
|
|
{$EXTERNALSYM WLX_DLG_SCREEN_SAVER_TIMEOUT}
|
|
WLX_DLG_USER_LOGOFF = 104; // User logged off
|
|
{$EXTERNALSYM WLX_DLG_USER_LOGOFF}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
type
|
|
PWLX_PROFILE_V1_0 = ^WLX_PROFILE_V1_0;
|
|
{$EXTERNALSYM PWLX_PROFILE_V1_0}
|
|
_WLX_PROFILE_V1_0 = record
|
|
//
|
|
// 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.
|
|
//
|
|
dwType: DWORD;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszProfile: PWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_PROFILE_V1_0}
|
|
WLX_PROFILE_V1_0 = _WLX_PROFILE_V1_0;
|
|
{$EXTERNALSYM WLX_PROFILE_V1_0}
|
|
TWlxProfileV1_0 = WLX_PROFILE_V1_0;
|
|
PWlxProfileV1_0 = PWLX_PROFILE_V1_0;
|
|
|
|
PWLX_PROFILE_V2_0 = ^WLX_PROFILE_V2_0;
|
|
{$EXTERNALSYM PWLX_PROFILE_V2_0}
|
|
_WLX_PROFILE_V2_0 = record
|
|
//
|
|
// 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.
|
|
//
|
|
dwType: DWORD;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszProfile: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszPolicy: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszNetworkDefaultUserProfile: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszServerName: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
pszEnvironment: PWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_PROFILE_V2_0}
|
|
WLX_PROFILE_V2_0 = _WLX_PROFILE_V2_0;
|
|
{$EXTERNALSYM WLX_PROFILE_V2_0}
|
|
TWlxProfileV2_0 = WLX_PROFILE_V2_0;
|
|
PWlxProfileV2_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.
|
|
//
|
|
|
|
PWLX_MPR_NOTIFY_INFO = ^WLX_MPR_NOTIFY_INFO;
|
|
{$EXTERNALSYM PWLX_MPR_NOTIFY_INFO}
|
|
_WLX_MPR_NOTIFY_INFO = record
|
|
//
|
|
// 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.
|
|
//
|
|
pszUserName: PWSTR;
|
|
//
|
|
// The string pointed to by this field must be separately
|
|
// allocated and will be separately deallocated by Winlogon.
|
|
//
|
|
pszDomain: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
pszPassword: PWSTR;
|
|
//
|
|
// 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.
|
|
//
|
|
pszOldPassword: PWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_MPR_NOTIFY_INFO}
|
|
WLX_MPR_NOTIFY_INFO = _WLX_MPR_NOTIFY_INFO;
|
|
{$EXTERNALSYM WLX_MPR_NOTIFY_INFO}
|
|
TWlxMprNotifyInfo = WLX_MPR_NOTIFY_INFO;
|
|
PWlxMprNotifyInfo = 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.
|
|
//
|
|
|
|
const
|
|
WLX_DIRECTORY_LENGTH = 256;
|
|
{$EXTERNALSYM WLX_DIRECTORY_LENGTH}
|
|
|
|
type
|
|
PWLX_TERMINAL_SERVICES_DATA = ^WLX_TERMINAL_SERVICES_DATA;
|
|
{$EXTERNALSYM PWLX_TERMINAL_SERVICES_DATA}
|
|
_WLX_TERMINAL_SERVICES_DATA = record
|
|
//
|
|
// TS profile path, overrides the standard profile path.
|
|
//
|
|
ProfilePath: array [0..WLX_DIRECTORY_LENGTH] of WCHAR;
|
|
//
|
|
// TS home directory, overrides standard home directory.
|
|
//
|
|
HomeDir: array [0..WLX_DIRECTORY_LENGTH] of WCHAR;
|
|
//
|
|
// TS home directory drive, overrides standard drive.
|
|
//
|
|
HomeDirDrive: array [0..3] of WCHAR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_TERMINAL_SERVICES_DATA}
|
|
WLX_TERMINAL_SERVICES_DATA = _WLX_TERMINAL_SERVICES_DATA;
|
|
{$EXTERNALSYM WLX_TERMINAL_SERVICES_DATA}
|
|
TWlxTerminalServicesData = WLX_TERMINAL_SERVICES_DATA;
|
|
PWlxTerminalServicesData = 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().
|
|
//
|
|
|
|
const
|
|
WLX_CREDENTIAL_TYPE_V1_0 = 1;
|
|
{$EXTERNALSYM WLX_CREDENTIAL_TYPE_V1_0}
|
|
WLX_CREDENTIAL_TYPE_V2_0 = 2;
|
|
{$EXTERNALSYM WLX_CREDENTIAL_TYPE_V2_0}
|
|
|
|
type
|
|
PWLX_CLIENT_CREDENTIALS_INFO_V1_0 = ^WLX_CLIENT_CREDENTIALS_INFO_V1_0;
|
|
{$EXTERNALSYM PWLX_CLIENT_CREDENTIALS_INFO_V1_0}
|
|
_WLX_CLIENT_CREDENTIALS_INFO = record
|
|
//
|
|
// 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.
|
|
//
|
|
dwType: DWORD;
|
|
pszUserName: PWSTR;
|
|
pszDomain: PWSTR;
|
|
pszPassword: PWSTR;
|
|
//
|
|
// This field forces a prompt for the password. This
|
|
// is due to an administrator override.
|
|
//
|
|
// This allows the distinguishing of autologon
|
|
// with no password.
|
|
//
|
|
fPromptForPassword: BOOL;
|
|
end;
|
|
{$EXTERNALSYM _WLX_CLIENT_CREDENTIALS_INFO}
|
|
WLX_CLIENT_CREDENTIALS_INFO_V1_0 = _WLX_CLIENT_CREDENTIALS_INFO;
|
|
{$EXTERNALSYM WLX_CLIENT_CREDENTIALS_INFO_V1_0}
|
|
TWlxClientCredentialsInfoV1_0 = WLX_CLIENT_CREDENTIALS_INFO_V1_0;
|
|
PWlxClientCredentialsInfoV1_0 = PWLX_CLIENT_CREDENTIALS_INFO_V1_0;
|
|
|
|
_WLX_CLIENT_CREDENTIALS_INFO_V2_0 = record
|
|
dwType: DWORD;
|
|
pszUserName: PWSTR;
|
|
pszDomain: PWSTR;
|
|
pszPassword: PWSTR;
|
|
fPromptForPassword: BOOL;
|
|
//
|
|
// This field tells winlogon to disconnect/abort the logon attempt if the
|
|
// provided password is incorrect, or if it should reprompt (current
|
|
// behavior)
|
|
//
|
|
fDisconnectOnLogonFailure: BOOL;
|
|
end;
|
|
{$EXTERNALSYM _WLX_CLIENT_CREDENTIALS_INFO_V2_0}
|
|
WLX_CLIENT_CREDENTIALS_INFO_V2_0 = _WLX_CLIENT_CREDENTIALS_INFO_V2_0;
|
|
{$EXTERNALSYM WLX_CLIENT_CREDENTIALS_INFO_V2_0}
|
|
PWLX_CLIENT_CREDENTIALS_INFO_V2_0 = ^WLX_CLIENT_CREDENTIALS_INFO_V2_0;
|
|
{$EXTERNALSYM PWLX_CLIENT_CREDENTIALS_INFO_V2_0}
|
|
TWlxClientCredentialsInfoV2_0 = WLX_CLIENT_CREDENTIALS_INFO_V2_0;
|
|
PWlxClientCredentialsInfoV2_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().
|
|
//
|
|
|
|
const
|
|
WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0 = 1;
|
|
{$EXTERNALSYM WLX_CONSOLESWITCHCREDENTIAL_TYPE_V1_0}
|
|
|
|
type
|
|
_WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 = record
|
|
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
dwType: DWORD;
|
|
|
|
UserToken: HANDLE;
|
|
LogonId: LUID;
|
|
Quotas: QUOTA_LIMITS;
|
|
UserName: PWSTR;
|
|
Domain: PWSTR;
|
|
LogonTime: LARGE_INTEGER;
|
|
SmartCardLogon: BOOL;
|
|
ProfileLength: ULONG;
|
|
|
|
//
|
|
// From MSV1_0_INTERACTIVE_PROFILE
|
|
//
|
|
MessageType: DWORD;
|
|
LogonCount: USHORT;
|
|
BadPasswordCount: USHORT;
|
|
ProfileLogonTime: LARGE_INTEGER;
|
|
LogoffTime: LARGE_INTEGER;
|
|
KickOffTime: LARGE_INTEGER;
|
|
PasswordLastSet: LARGE_INTEGER;
|
|
PasswordCanChange: LARGE_INTEGER;
|
|
PasswordMustChange: LARGE_INTEGER;
|
|
LogonScript: PWSTR;
|
|
HomeDirectory: PWSTR;
|
|
FullName: PWSTR;
|
|
ProfilePath: PWSTR;
|
|
HomeDirectoryDrive: PWSTR;
|
|
LogonServer: PWSTR;
|
|
UserFlags: ULONG;
|
|
PrivateDataLen: ULONG;
|
|
PrivateData: PBYTE;
|
|
end;
|
|
{$EXTERNALSYM _WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0}
|
|
WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 = _WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
|
|
{$EXTERNALSYM WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0}
|
|
PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 = ^WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
|
|
{$EXTERNALSYM PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0}
|
|
TWlxConsoleSwitchCredentialsInfoV1_0 = WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
|
|
PWlxConsoleSwitchCredentialsInfoV1_0 = PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Services that replacement GINAs ** MUST ** provide //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
{$IFDEF MSGINA_IMPORT}
|
|
|
|
{$IFDEF MSGINA1_0}
|
|
|
|
function WlxNegotiate(dwWinlogonVersion: DWORD; var pdwDllVersion: WORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxNegotiate}
|
|
|
|
function WlxInitialize(lpWinsta: LPWSTR; hWlx: HANDLE; pvReserved: PVOID;
|
|
pWinlogonFunctions: PVOID; var pWlxContext: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxInitialize}
|
|
|
|
procedure WlxDisplaySASNotice(pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM WlxDisplaySASNotice}
|
|
|
|
function WlxLoggedOutSAS(pWlxContext: PVOID; dwSasType: DWORD;
|
|
var pAuthenticationId: LUID; var pLogonSid: SID; var pdwOptions: DWORD;
|
|
var phToken: HANDLE; var pNprNotifyInfo: WLX_MPR_NOTIFY_INFO;
|
|
var pProfile: PVOID): Integer; stdcall;
|
|
{$EXTERNALSYM WlxLoggedOutSAS}
|
|
|
|
function WlxActivateUserShell(pWlxContext: PVOID; pszDesktopName: PWSTR;
|
|
pszMprLogonScript: PWSTR; pEnvironment: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxActivateUserShell}
|
|
|
|
function WlxLoggedOnSAS(pWlxContext: PVOID; dwSasType: DWORD; pReserved: PVOID): Integer; stdcall;
|
|
{$EXTERNALSYM WlxLoggedOnSAS}
|
|
|
|
procedure WlxDisplayLockedNotice(pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM WlxDisplayLockedNotice}
|
|
|
|
function WlxWkstaLockedSAS(pWlxContext: PVOID; dwSasType: DWORD): Integer; stdcall;
|
|
{$EXTERNALSYM WlxWkstaLockedSAS}
|
|
|
|
function WlxIsLockOk(pWlxContext: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxIsLockOk}
|
|
|
|
function WlxIsLogoffOk(pWlxContext: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxIsLogoffOk}
|
|
|
|
procedure WlxLogoff(pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM WlxLogoff}
|
|
|
|
procedure WlxShutdown(pWlxContext: PVOID; ShutdownType: DWORD); stdcall;
|
|
{$EXTERNALSYM WlxShutdown}
|
|
|
|
{$ENDIF MSGINA1_0}
|
|
|
|
{$IFDEF MSGINA1_1}
|
|
|
|
function WlxScreenSaverNotify(pWlxContext: PVOID; var pSecure: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxScreenSaverNotify}
|
|
|
|
function WlxStartApplication(pWlxContext: PVOID; pszDesktopName: PWSTR;
|
|
pEnvironment: PVOID; pszCmdLine: PWSTR): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxStartApplication}
|
|
|
|
{$ENDIF MSGINA1_1}
|
|
|
|
{$IFDEF MSGINA1_3}
|
|
|
|
function WlxNetworkProviderLoad(pWlxContext: PVOID;
|
|
var pNprNotifyInfo: WLX_MPR_NOTIFY_INFO): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxNetworkProviderLoad}
|
|
|
|
const
|
|
STATUSMSG_OPTION_NOANIMATION = $00000001;
|
|
{$EXTERNALSYM STATUSMSG_OPTION_NOANIMATION}
|
|
STATUSMSG_OPTION_SETFOREGROUND = $00000002;
|
|
{$EXTERNALSYM STATUSMSG_OPTION_SETFOREGROUND}
|
|
|
|
function WlxDisplayStatusMessage(pWlxContext: PVOID; hDesktop: HDESK;
|
|
dwOptions: DWORD; pTitle: PWSTR; pMessage: PWSTR): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxDisplayStatusMessage}
|
|
|
|
function WlxGetStatusMessage(pWlxContext: PVOID; var pdwOptions: DWORD;
|
|
pMessage: PWSTR; dwBufferSize: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxGetStatusMessage}
|
|
|
|
function WlxRemoveStatusMessage(pWlxContext: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxRemoveStatusMessage}
|
|
|
|
{$ENDIF MSGINA1_3}
|
|
|
|
{$IFDEF MSGINA1_4}
|
|
|
|
function WlxGetConsoleSwitchCredentials(pWlxContext, pCredInfo: PVOID): BOOL; stdcall;
|
|
{$EXTERNALSYM WlxGetConsoleSwitchCredentials}
|
|
|
|
procedure WlxReconnectNotify(pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM WlxReconnectNotify}
|
|
|
|
procedure WlxDisconnectNotify(pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM WlxDisconnectNotify}
|
|
|
|
{$ENDIF MSGINA1_4}
|
|
|
|
{$ENDIF MSGINA_IMPORT}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Services that Winlogon provides //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
type
|
|
PWLX_DESKTOP = ^WLX_DESKTOP;
|
|
{$EXTERNALSYM PWLX_DESKTOP}
|
|
_WLX_DESKTOP = record
|
|
Size: DWORD;
|
|
Flags: DWORD;
|
|
hDesktop: HDESK;
|
|
pszDesktopName: PWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DESKTOP}
|
|
WLX_DESKTOP = _WLX_DESKTOP;
|
|
{$EXTERNALSYM WLX_DESKTOP}
|
|
TWlxDesktop = WLX_DESKTOP;
|
|
PWlxDesktop = PWLX_DESKTOP;
|
|
|
|
const
|
|
WLX_DESKTOP_NAME = $00000001; // Name present
|
|
{$EXTERNALSYM WLX_DESKTOP_NAME}
|
|
WLX_DESKTOP_HANDLE = $00000002; // Handle present
|
|
{$EXTERNALSYM WLX_DESKTOP_HANDLE}
|
|
|
|
type
|
|
PWLX_USE_CTRL_ALT_DEL = procedure(hWlx: HANDLE); stdcall;
|
|
{$EXTERNALSYM PWLX_USE_CTRL_ALT_DEL}
|
|
PWLX_SET_CONTEXT_POINTER = procedure(hWlx: HANDLE; pWlxContext: PVOID); stdcall;
|
|
{$EXTERNALSYM PWLX_SET_CONTEXT_POINTER}
|
|
PWLX_SAS_NOTIFY = procedure(hWlx: HANDLE; dwSasType: DWORD); stdcall;
|
|
{$EXTERNALSYM PWLX_SAS_NOTIFY}
|
|
PWLX_SET_TIMEOUT = function(hWlx: HANDLE; Timeout: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_SET_TIMEOUT}
|
|
PWLX_ASSIGN_SHELL_PROTECTION = function(hWlx, hToken, hProcess, hThread: HANDLE): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_ASSIGN_SHELL_PROTECTION}
|
|
PWLX_MESSAGE_BOX = function(hWlx: HANDLE; hwndOwner: HWND; lpszText,
|
|
lpszTitle: LPWSTR; fuStyle: UINT): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_MESSAGE_BOX}
|
|
PWLX_DIALOG_BOX = function(hWlx, hInst: HANDLE; lpszTemplate: LPWSTR;
|
|
hwndOwner: HWND; dlgprc: DLGPROC): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_DIALOG_BOX}
|
|
PWLX_DIALOG_BOX_INDIRECT = function(hWlx, hInst: HANDLE;
|
|
hDialogTemplate: LPCDLGTEMPLATE; hwndOwner: HWND; dlgprc: DLGPROC): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_DIALOG_BOX_INDIRECT}
|
|
PWLX_DIALOG_BOX_PARAM = function(hWlx, hInst: HANDLE; lpszTemplate: LPWSTR;
|
|
hwndOwner: HWND; dlgprc: DLGPROC; dwInitParam: LPARAM): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_DIALOG_BOX_PARAM}
|
|
PWLX_DIALOG_BOX_INDIRECT_PARAM = function(hWlx, hInst: HANDLE;
|
|
hDialogTemplate: LPCDLGTEMPLATE; hwndOwner: HWND; dlgprc: DLGPROC;
|
|
dwInitParam: LPARAM): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_DIALOG_BOX_INDIRECT_PARAM}
|
|
PWLX_SWITCH_DESKTOP_TO_USER = function(hWlx: HANDLE): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_SWITCH_DESKTOP_TO_USER}
|
|
PWLX_SWITCH_DESKTOP_TO_WINLOGON = function(hWlx: HANDLE): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_SWITCH_DESKTOP_TO_WINLOGON}
|
|
PWLX_CHANGE_PASSWORD_NOTIFY = function(hWlx: HANDLE;
|
|
var pMprInfo: WLX_MPR_NOTIFY_INFO; dwChangeInfo: DWORD): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_CHANGE_PASSWORD_NOTIFY}
|
|
PWLX_GET_SOURCE_DESKTOP = function(hWlx: HANDLE; var ppDesktop: PWLX_DESKTOP): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_GET_SOURCE_DESKTOP}
|
|
PWLX_SET_RETURN_DESKTOP = function(hWlx: HANDLE; const pDesktop: WLX_DESKTOP): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_SET_RETURN_DESKTOP}
|
|
PWLX_CREATE_USER_DESKTOP = function(hWlx, hToken: HANDLE; Flags: DWORD;
|
|
pszDesktopName: PWSTR; var ppDesktop: PWLX_DESKTOP): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_CREATE_USER_DESKTOP}
|
|
|
|
const
|
|
WLX_CREATE_INSTANCE_ONLY = $00000001;
|
|
{$EXTERNALSYM WLX_CREATE_INSTANCE_ONLY}
|
|
WLX_CREATE_USER = $00000002;
|
|
{$EXTERNALSYM WLX_CREATE_USER}
|
|
|
|
type
|
|
PWLX_CHANGE_PASSWORD_NOTIFY_EX = function(hWlx: HANDLE;
|
|
const pMprInfo: WLX_MPR_NOTIFY_INFO; dwChangeInfo: DWORD;
|
|
ProviderName: PWSTR; Reserved: PVOID): Integer; stdcall;
|
|
{$EXTERNALSYM PWLX_CHANGE_PASSWORD_NOTIFY_EX}
|
|
PWLX_CLOSE_USER_DESKTOP = function(hWlx: HANDLE; const pDesktop: WLX_DESKTOP;
|
|
hToken: HANDLE): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_CLOSE_USER_DESKTOP}
|
|
PWLX_SET_OPTION = function(hWlx: HANDLE; Option: DWORD; Value: ULONG_PTR;
|
|
var OldValue: ULONG_PTR): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_SET_OPTION}
|
|
PWLX_GET_OPTION = function(hWlx: HANDLE; Option: DWORD; var Value: ULONG_PTR): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_GET_OPTION}
|
|
PWLX_WIN31_MIGRATE = procedure(hWlx: HANDLE); stdcall;
|
|
{$EXTERNALSYM PWLX_WIN31_MIGRATE}
|
|
PWLX_QUERY_CLIENT_CREDENTIALS = function(var pCred: WLX_CLIENT_CREDENTIALS_INFO_V1_0): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_QUERY_CLIENT_CREDENTIALS}
|
|
PWLX_QUERY_IC_CREDENTIALS = function(var pCred: WLX_CLIENT_CREDENTIALS_INFO_V1_0): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_QUERY_IC_CREDENTIALS}
|
|
PWLX_QUERY_TS_LOGON_CREDENTIALS = function(pCred: PWLX_CLIENT_CREDENTIALS_INFO_V2_0): BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_QUERY_TS_LOGON_CREDENTIALS}
|
|
PWLX_DISCONNECT = function : BOOL; stdcall;
|
|
{$EXTERNALSYM PWLX_DISCONNECT}
|
|
PWLX_QUERY_TERMINAL_SERVICES_DATA = function(hWlx: HANDLE;
|
|
var pTSData: WLX_TERMINAL_SERVICES_DATA; UserName, Domain: PWCHAR): DWORD; stdcall;
|
|
{$EXTERNALSYM PWLX_DISCONNECT}
|
|
PWLX_QUERY_CONSOLESWITCH_CREDENTIALS = function(pCred: PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0): DWORD; stdcall;
|
|
{$EXTERNALSYM PWLX_QUERY_CONSOLESWITCH_CREDENTIALS}
|
|
|
|
//
|
|
// Options that can be get or set:
|
|
//
|
|
|
|
const
|
|
WLX_OPTION_USE_CTRL_ALT_DEL = $00000001;
|
|
{$EXTERNALSYM WLX_OPTION_USE_CTRL_ALT_DEL}
|
|
WLX_OPTION_CONTEXT_POINTER = $00000002;
|
|
{$EXTERNALSYM WLX_OPTION_CONTEXT_POINTER}
|
|
WLX_OPTION_USE_SMART_CARD = $00000003;
|
|
{$EXTERNALSYM WLX_OPTION_USE_SMART_CARD}
|
|
WLX_OPTION_FORCE_LOGOFF_TIME = $00000004;
|
|
{$EXTERNALSYM WLX_OPTION_FORCE_LOGOFF_TIME}
|
|
WLX_OPTION_IGNORE_AUTO_LOGON = $00000008;
|
|
{$EXTERNALSYM WLX_OPTION_IGNORE_AUTO_LOGON}
|
|
WLX_OPTION_NO_SWITCH_ON_SAS = $00000009;
|
|
{$EXTERNALSYM WLX_OPTION_NO_SWITCH_ON_SAS}
|
|
|
|
//
|
|
// Options that can be queried only:
|
|
//
|
|
|
|
WLX_OPTION_SMART_CARD_PRESENT = $00010001;
|
|
{$EXTERNALSYM WLX_OPTION_SMART_CARD_PRESENT}
|
|
WLX_OPTION_SMART_CARD_INFO = $00010002;
|
|
{$EXTERNALSYM WLX_OPTION_SMART_CARD_INFO}
|
|
WLX_OPTION_DISPATCH_TABLE_SIZE = $00010003;
|
|
{$EXTERNALSYM WLX_OPTION_DISPATCH_TABLE_SIZE}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function dispatch tables. //
|
|
// One of the following tables will be passed to the GINA DLL //
|
|
// in the WlxInitialize() call during initialization. //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
type
|
|
PWLX_DISPATCH_VERSION_1_0 = ^WLX_DISPATCH_VERSION_1_0;
|
|
{$EXTERNALSYM PWLX_DISPATCH_VERSION_1_0}
|
|
_WLX_DISPATCH_VERSION_1_0 = record
|
|
WlxUseCtrlAltDel: PWLX_USE_CTRL_ALT_DEL;
|
|
WlxSetContextPointer: PWLX_SET_CONTEXT_POINTER;
|
|
WlxSasNotify: PWLX_SAS_NOTIFY;
|
|
WlxSetTimeout: PWLX_SET_TIMEOUT;
|
|
WlxAssignShellProtection: PWLX_ASSIGN_SHELL_PROTECTION;
|
|
WlxMessageBox: PWLX_MESSAGE_BOX;
|
|
WlxDialogBox: PWLX_DIALOG_BOX;
|
|
WlxDialogBoxParam: PWLX_DIALOG_BOX_PARAM;
|
|
WlxDialogBoxIndirect: PWLX_DIALOG_BOX_INDIRECT;
|
|
WlxDialogBoxIndirectParam: PWLX_DIALOG_BOX_INDIRECT_PARAM;
|
|
WlxSwitchDesktopToUser: PWLX_SWITCH_DESKTOP_TO_USER;
|
|
WlxSwitchDesktopToWinlogon: PWLX_SWITCH_DESKTOP_TO_WINLOGON;
|
|
WlxChangePasswordNotify: PWLX_CHANGE_PASSWORD_NOTIFY;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DISPATCH_VERSION_1_0}
|
|
WLX_DISPATCH_VERSION_1_0 = _WLX_DISPATCH_VERSION_1_0;
|
|
{$EXTERNALSYM WLX_DISPATCH_VERSION_1_0}
|
|
TWlxDispatchVersion1_0 = WLX_DISPATCH_VERSION_1_0;
|
|
PWlxDispatchVersion1_0 = PWLX_DISPATCH_VERSION_1_0;
|
|
|
|
PWLX_DISPATCH_VERSION_1_1 = ^WLX_DISPATCH_VERSION_1_1;
|
|
{$EXTERNALSYM PWLX_DISPATCH_VERSION_1_1}
|
|
_WLX_DISPATCH_VERSION_1_1 = record
|
|
WlxUseCtrlAltDel: PWLX_USE_CTRL_ALT_DEL;
|
|
WlxSetContextPointer: PWLX_SET_CONTEXT_POINTER;
|
|
WlxSasNotify: PWLX_SAS_NOTIFY;
|
|
WlxSetTimeout: PWLX_SET_TIMEOUT;
|
|
WlxAssignShellProtection: PWLX_ASSIGN_SHELL_PROTECTION;
|
|
WlxMessageBox: PWLX_MESSAGE_BOX;
|
|
WlxDialogBox: PWLX_DIALOG_BOX;
|
|
WlxDialogBoxParam: PWLX_DIALOG_BOX_PARAM;
|
|
WlxDialogBoxIndirect: PWLX_DIALOG_BOX_INDIRECT;
|
|
WlxDialogBoxIndirectParam: PWLX_DIALOG_BOX_INDIRECT_PARAM;
|
|
WlxSwitchDesktopToUser: PWLX_SWITCH_DESKTOP_TO_USER;
|
|
WlxSwitchDesktopToWinlogon: PWLX_SWITCH_DESKTOP_TO_WINLOGON;
|
|
WlxChangePasswordNotify: PWLX_CHANGE_PASSWORD_NOTIFY;
|
|
WlxGetSourceDesktop: PWLX_GET_SOURCE_DESKTOP;
|
|
WlxSetReturnDesktop: PWLX_SET_RETURN_DESKTOP;
|
|
WlxCreateUserDesktop: PWLX_CREATE_USER_DESKTOP;
|
|
WlxChangePasswordNotifyEx: PWLX_CHANGE_PASSWORD_NOTIFY_EX;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DISPATCH_VERSION_1_1}
|
|
WLX_DISPATCH_VERSION_1_1 = _WLX_DISPATCH_VERSION_1_1;
|
|
{$EXTERNALSYM WLX_DISPATCH_VERSION_1_1}
|
|
TWlxDispatchVersion1_1 = WLX_DISPATCH_VERSION_1_1;
|
|
PWlxDispatchVersion1_1 = PWLX_DISPATCH_VERSION_1_1;
|
|
|
|
PWLX_DISPATCH_VERSION_1_2 = ^WLX_DISPATCH_VERSION_1_2;
|
|
{$EXTERNALSYM PWLX_DISPATCH_VERSION_1_2}
|
|
_WLX_DISPATCH_VERSION_1_2 = record
|
|
WlxUseCtrlAltDel: PWLX_USE_CTRL_ALT_DEL;
|
|
WlxSetContextPointer: PWLX_SET_CONTEXT_POINTER;
|
|
WlxSasNotify: PWLX_SAS_NOTIFY;
|
|
WlxSetTimeout: PWLX_SET_TIMEOUT;
|
|
WlxAssignShellProtection: PWLX_ASSIGN_SHELL_PROTECTION;
|
|
WlxMessageBox: PWLX_MESSAGE_BOX;
|
|
WlxDialogBox: PWLX_DIALOG_BOX;
|
|
WlxDialogBoxParam: PWLX_DIALOG_BOX_PARAM;
|
|
WlxDialogBoxIndirect: PWLX_DIALOG_BOX_INDIRECT;
|
|
WlxDialogBoxIndirectParam: PWLX_DIALOG_BOX_INDIRECT_PARAM;
|
|
WlxSwitchDesktopToUser: PWLX_SWITCH_DESKTOP_TO_USER;
|
|
WlxSwitchDesktopToWinlogon: PWLX_SWITCH_DESKTOP_TO_WINLOGON;
|
|
WlxChangePasswordNotify: PWLX_CHANGE_PASSWORD_NOTIFY;
|
|
WlxGetSourceDesktop: PWLX_GET_SOURCE_DESKTOP;
|
|
WlxSetReturnDesktop: PWLX_SET_RETURN_DESKTOP;
|
|
WlxCreateUserDesktop: PWLX_CREATE_USER_DESKTOP;
|
|
WlxChangePasswordNotifyEx: PWLX_CHANGE_PASSWORD_NOTIFY_EX;
|
|
WlxCloseUserDesktop : PWLX_CLOSE_USER_DESKTOP;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DISPATCH_VERSION_1_2}
|
|
WLX_DISPATCH_VERSION_1_2 = _WLX_DISPATCH_VERSION_1_2;
|
|
{$EXTERNALSYM WLX_DISPATCH_VERSION_1_2}
|
|
TWlxDispatchVersion1_2 = WLX_DISPATCH_VERSION_1_2;
|
|
PWlxDispatchVersion1_2 = PWLX_DISPATCH_VERSION_1_2;
|
|
|
|
PWLX_DISPATCH_VERSION_1_3 = ^WLX_DISPATCH_VERSION_1_3;
|
|
{$EXTERNALSYM PWLX_DISPATCH_VERSION_1_3}
|
|
_WLX_DISPATCH_VERSION_1_3 = record
|
|
WlxUseCtrlAltDel: PWLX_USE_CTRL_ALT_DEL;
|
|
WlxSetContextPointer: PWLX_SET_CONTEXT_POINTER;
|
|
WlxSasNotify: PWLX_SAS_NOTIFY;
|
|
WlxSetTimeout: PWLX_SET_TIMEOUT;
|
|
WlxAssignShellProtection: PWLX_ASSIGN_SHELL_PROTECTION;
|
|
WlxMessageBox: PWLX_MESSAGE_BOX;
|
|
WlxDialogBox: PWLX_DIALOG_BOX;
|
|
WlxDialogBoxParam: PWLX_DIALOG_BOX_PARAM;
|
|
WlxDialogBoxIndirect: PWLX_DIALOG_BOX_INDIRECT;
|
|
WlxDialogBoxIndirectParam: PWLX_DIALOG_BOX_INDIRECT_PARAM;
|
|
WlxSwitchDesktopToUser: PWLX_SWITCH_DESKTOP_TO_USER;
|
|
WlxSwitchDesktopToWinlogon: PWLX_SWITCH_DESKTOP_TO_WINLOGON;
|
|
WlxChangePasswordNotify: PWLX_CHANGE_PASSWORD_NOTIFY;
|
|
WlxGetSourceDesktop: PWLX_GET_SOURCE_DESKTOP;
|
|
WlxSetReturnDesktop: PWLX_SET_RETURN_DESKTOP;
|
|
WlxCreateUserDesktop: PWLX_CREATE_USER_DESKTOP;
|
|
WlxChangePasswordNotifyEx: PWLX_CHANGE_PASSWORD_NOTIFY_EX;
|
|
WlxCloseUserDesktop : PWLX_CLOSE_USER_DESKTOP;
|
|
WlxSetOption: PWLX_SET_OPTION;
|
|
WlxGetOption: PWLX_GET_OPTION;
|
|
WlxWin31Migrate: PWLX_WIN31_MIGRATE;
|
|
WlxQueryClientCredentials: PWLX_QUERY_CLIENT_CREDENTIALS;
|
|
WlxQueryInetConnectorCredentials: PWLX_QUERY_IC_CREDENTIALS;
|
|
WlxDisconnect: PWLX_DISCONNECT;
|
|
WlxQueryTerminalServicesData: PWLX_QUERY_TERMINAL_SERVICES_DATA;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DISPATCH_VERSION_1_3}
|
|
WLX_DISPATCH_VERSION_1_3 = _WLX_DISPATCH_VERSION_1_3;
|
|
{$EXTERNALSYM WLX_DISPATCH_VERSION_1_3}
|
|
TWlxDispatchVersion1_3 = WLX_DISPATCH_VERSION_1_3;
|
|
PWlxDispatchVersion1_3 = PWLX_DISPATCH_VERSION_1_3;
|
|
|
|
PWLX_DISPATCH_VERSION_1_4 = ^WLX_DISPATCH_VERSION_1_4;
|
|
{$EXTERNALSYM PWLX_DISPATCH_VERSION_1_4}
|
|
_WLX_DISPATCH_VERSION_1_4 = record
|
|
WlxUseCtrlAltDel: PWLX_USE_CTRL_ALT_DEL;
|
|
WlxSetContextPointer: PWLX_SET_CONTEXT_POINTER;
|
|
WlxSasNotify: PWLX_SAS_NOTIFY;
|
|
WlxSetTimeout: PWLX_SET_TIMEOUT;
|
|
WlxAssignShellProtection: PWLX_ASSIGN_SHELL_PROTECTION;
|
|
WlxMessageBox: PWLX_MESSAGE_BOX;
|
|
WlxDialogBox: PWLX_DIALOG_BOX;
|
|
WlxDialogBoxParam: PWLX_DIALOG_BOX_PARAM;
|
|
WlxDialogBoxIndirect: PWLX_DIALOG_BOX_INDIRECT;
|
|
WlxDialogBoxIndirectParam: PWLX_DIALOG_BOX_INDIRECT_PARAM;
|
|
WlxSwitchDesktopToUser: PWLX_SWITCH_DESKTOP_TO_USER;
|
|
WlxSwitchDesktopToWinlogon: PWLX_SWITCH_DESKTOP_TO_WINLOGON;
|
|
WlxChangePasswordNotify: PWLX_CHANGE_PASSWORD_NOTIFY;
|
|
WlxGetSourceDesktop: PWLX_GET_SOURCE_DESKTOP;
|
|
WlxSetReturnDesktop: PWLX_SET_RETURN_DESKTOP;
|
|
WlxCreateUserDesktop: PWLX_CREATE_USER_DESKTOP;
|
|
WlxChangePasswordNotifyEx: PWLX_CHANGE_PASSWORD_NOTIFY_EX;
|
|
WlxCloseUserDesktop : PWLX_CLOSE_USER_DESKTOP;
|
|
WlxSetOption: PWLX_SET_OPTION;
|
|
WlxGetOption: PWLX_GET_OPTION;
|
|
WlxWin31Migrate: PWLX_WIN31_MIGRATE;
|
|
WlxQueryClientCredentials: PWLX_QUERY_CLIENT_CREDENTIALS;
|
|
WlxQueryInetConnectorCredentials: PWLX_QUERY_IC_CREDENTIALS;
|
|
WlxDisconnect: PWLX_DISCONNECT;
|
|
WlxQueryTerminalServicesData: PWLX_QUERY_TERMINAL_SERVICES_DATA;
|
|
WlxQueryConsoleSwitchCredentials: PWLX_QUERY_CONSOLESWITCH_CREDENTIALS;
|
|
WlxQueryTsLogonCredentials: PWLX_QUERY_TS_LOGON_CREDENTIALS;
|
|
end;
|
|
{$EXTERNALSYM _WLX_DISPATCH_VERSION_1_4}
|
|
WLX_DISPATCH_VERSION_1_4 = _WLX_DISPATCH_VERSION_1_4;
|
|
{$EXTERNALSYM WLX_DISPATCH_VERSION_1_4}
|
|
TWlxDispatchVersion1_4 = WLX_DISPATCH_VERSION_1_4;
|
|
PWlxDispatchVersion1_4 = PWLX_DISPATCH_VERSION_1_4;
|
|
|
|
//
|
|
// Non-GINA notification DLLs
|
|
//
|
|
|
|
PFNMSGECALLBACK = function(bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall;
|
|
{$EXTERNALSYM PFNMSGECALLBACK}
|
|
TFnMsgeCallback = PFNMSGECALLBACK;
|
|
|
|
PWLX_NOTIFICATION_INFO = ^WLX_NOTIFICATION_INFO;
|
|
{$EXTERNALSYM PWLX_NOTIFICATION_INFO}
|
|
_WLX_NOTIFICATION_INFO = record
|
|
Size: ULONG;
|
|
Flags: ULONG;
|
|
UserName: PWSTR;
|
|
Domain: PWSTR;
|
|
WindowStation: PWSTR;
|
|
hToken: HANDLE;
|
|
hDesktop: HDESK;
|
|
pStatusCallback: PFNMSGECALLBACK;
|
|
end;
|
|
{$EXTERNALSYM _WLX_NOTIFICATION_INFO}
|
|
WLX_NOTIFICATION_INFO = _WLX_NOTIFICATION_INFO;
|
|
{$EXTERNALSYM WLX_NOTIFICATION_INFO}
|
|
TWlxNotificationInfo = WLX_NOTIFICATION_INFO;
|
|
PWlxNotificationInfo = PWLX_NOTIFICATION_INFO;
|
|
|
|
{$ENDIF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
implementation
|
|
//uses ...
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
|
|
|
|
{$IFNDEF JWA_INTERFACESECTION}
|
|
|
|
{$IFDEF MSGINA_IMPORT}
|
|
|
|
{$IFNDEF JWA_INCLUDEMODE}
|
|
const
|
|
msgina = 'msgina.dll';
|
|
{$ENDIF JWA_INCLUDEMODE}
|
|
|
|
{$IFDEF DYNAMIC_LINK}
|
|
|
|
{$IFDEF MSGINA1_0}
|
|
|
|
var
|
|
_WlxNegotiate: Pointer;
|
|
|
|
function WlxNegotiate;
|
|
begin
|
|
GetProcedureAddress(_WlxNegotiate, msgina, 'WlxNegotiate');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxNegotiate]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxInitialize: Pointer;
|
|
|
|
function WlxInitialize;
|
|
begin
|
|
GetProcedureAddress(_WlxInitialize, msgina, 'WlxInitialize');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxInitialize]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxDisplaySASNotice: Pointer;
|
|
|
|
procedure WlxDisplaySASNotice;
|
|
begin
|
|
GetProcedureAddress(_WlxDisplaySASNotice, msgina, 'WlxDisplaySASNotice');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxDisplaySASNotice]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxLoggedOutSAS: Pointer;
|
|
|
|
function WlxLoggedOutSAS;
|
|
begin
|
|
GetProcedureAddress(_WlxLoggedOutSAS, msgina, 'WlxLoggedOutSAS');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxLoggedOutSAS]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxActivateUserShell: Pointer;
|
|
|
|
function WlxActivateUserShell;
|
|
begin
|
|
GetProcedureAddress(_WlxActivateUserShell, msgina, 'WlxActivateUserShell');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxActivateUserShell]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxLoggedOnSAS: Pointer;
|
|
|
|
function WlxLoggedOnSAS;
|
|
begin
|
|
GetProcedureAddress(_WlxLoggedOnSAS, msgina, 'WlxLoggedOnSAS');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxLoggedOnSAS]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxDisplayLockedNotice: Pointer;
|
|
|
|
procedure WlxDisplayLockedNotice;
|
|
begin
|
|
GetProcedureAddress(_WlxDisplayLockedNotice, msgina, 'WlxDisplayLockedNotice');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxDisplayLockedNotice]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxWkstaLockedSAS: Pointer;
|
|
|
|
function WlxWkstaLockedSAS;
|
|
begin
|
|
GetProcedureAddress(_WlxWkstaLockedSAS, msgina, 'WlxWkstaLockedSAS');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxWkstaLockedSAS]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxIsLockOk: Pointer;
|
|
|
|
function WlxIsLockOk;
|
|
begin
|
|
GetProcedureAddress(_WlxIsLockOk, msgina, 'WlxIsLockOk');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxIsLockOk]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxIsLogoffOk: Pointer;
|
|
|
|
function WlxIsLogoffOk;
|
|
begin
|
|
GetProcedureAddress(_WlxIsLogoffOk, msgina, 'WlxIsLogoffOk');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxIsLogoffOk]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxLogoff: Pointer;
|
|
|
|
procedure WlxLogoff;
|
|
begin
|
|
GetProcedureAddress(_WlxLogoff, msgina, 'WlxLogoff');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxLogoff]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxShutdown: Pointer;
|
|
|
|
procedure WlxShutdown;
|
|
begin
|
|
GetProcedureAddress(_WlxShutdown, msgina, 'WlxShutdown');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxShutdown]
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF MSGINA1_0}
|
|
|
|
{$IFDEF MSGINA1_1}
|
|
|
|
var
|
|
_WlxScreenSaverNotify: Pointer;
|
|
|
|
function WlxScreenSaverNotify;
|
|
begin
|
|
GetProcedureAddress(_WlxScreenSaverNotify, msgina, 'WlxScreenSaverNotify');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxScreenSaverNotify]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxStartApplication: Pointer;
|
|
|
|
function WlxStartApplication;
|
|
begin
|
|
GetProcedureAddress(_WlxStartApplication, msgina, 'WlxStartApplication');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxStartApplication]
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF MSGINA1_1}
|
|
|
|
{$IFDEF MSGINA1_3}
|
|
|
|
var
|
|
_WlxNetworkProviderLoad: Pointer;
|
|
|
|
function WlxNetworkProviderLoad;
|
|
begin
|
|
GetProcedureAddress(_WlxNetworkProviderLoad, msgina, 'WlxNetworkProviderLoad');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxNetworkProviderLoad]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxDisplayStatusMessage: Pointer;
|
|
|
|
function WlxDisplayStatusMessage;
|
|
begin
|
|
GetProcedureAddress(_WlxDisplayStatusMessage, msgina, 'WlxDisplayStatusMessage');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxDisplayStatusMessage]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxGetStatusMessage: Pointer;
|
|
|
|
function WlxGetStatusMessage;
|
|
begin
|
|
GetProcedureAddress(_WlxGetStatusMessage, msgina, 'WlxGetStatusMessage');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxGetStatusMessage]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxRemoveStatusMessage: Pointer;
|
|
|
|
function WlxRemoveStatusMessage;
|
|
begin
|
|
GetProcedureAddress(_WlxRemoveStatusMessage, msgina, 'WlxRemoveStatusMessage');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxRemoveStatusMessage]
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF MSGINA1_3}
|
|
|
|
{$IFDEF MSGINA1_4}
|
|
|
|
var
|
|
_WlxGetConsoleSwitchCredentials: Pointer;
|
|
|
|
function WlxGetConsoleSwitchCredentials;
|
|
begin
|
|
GetProcedureAddress(_WlxGetConsoleSwitchCredentials, msgina, 'WlxGetConsoleSwitchCredentials');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxGetConsoleSwitchCredentials]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxReconnectNotify: Pointer;
|
|
|
|
procedure WlxReconnectNotify;
|
|
begin
|
|
GetProcedureAddress(_WlxReconnectNotify, msgina, 'WlxReconnectNotify');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxReconnectNotify]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_WlxDisconnectNotify: Pointer;
|
|
|
|
procedure WlxDisconnectNotify;
|
|
begin
|
|
GetProcedureAddress(_WlxDisconnectNotify, msgina, 'WlxDisconnectNotify');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_WlxDisconnectNotify]
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF MSGINA1_4}
|
|
|
|
{$ELSE}
|
|
|
|
{$IFDEF MSGINA1_0}
|
|
function WlxNegotiate; external msgina name 'WlxNegotiate';
|
|
function WlxInitialize; external msgina name 'WlxInitialize';
|
|
procedure WlxDisplaySASNotice; external msgina name 'WlxDisplaySASNotice';
|
|
function WlxLoggedOutSAS; external msgina name 'WlxLoggedOutSAS';
|
|
function WlxActivateUserShell; external msgina name 'WlxActivateUserShell';
|
|
function WlxLoggedOnSAS; external msgina name 'WlxLoggedOnSAS';
|
|
procedure WlxDisplayLockedNotice; external msgina name 'WlxDisplayLockedNotice';
|
|
function WlxWkstaLockedSAS; external msgina name 'WlxWkstaLockedSAS';
|
|
function WlxIsLockOk; external msgina name 'WlxIsLockOk';
|
|
function WlxIsLogoffOk; external msgina name 'WlxIsLogoffOk';
|
|
procedure WlxLogoff; external msgina name 'WlxLogoff';
|
|
procedure WlxShutdown; external msgina name 'WlxShutdown';
|
|
{$ENDIF MSGINA1_0}
|
|
{$IFDEF MSGINA1_1}
|
|
function WlxScreenSaverNotify; external msgina name 'WlxScreenSaverNotify';
|
|
function WlxStartApplication; external msgina name 'WlxStartApplication';
|
|
{$ENDIF MSGINA1_1}
|
|
{$IFDEF MSGINA1_3}
|
|
function WlxNetworkProviderLoad; external msgina name 'WlxNetworkProviderLoad';
|
|
function WlxDisplayStatusMessage; external msgina name 'WlxDisplayStatusMessage';
|
|
function WlxGetStatusMessage; external msgina name 'WlxGetStatusMessage';
|
|
function WlxRemoveStatusMessage; external msgina name 'WlxRemoveStatusMessage';
|
|
{$ENDIF MSGINA1_3}
|
|
{$IFDEF MSGINA1_4}
|
|
function WlxGetConsoleSwitchCredentials; external msgina name 'WlxGetConsoleSwitchCredentials';
|
|
procedure WlxReconnectNotify; external msgina name 'WlxReconnectNotify';
|
|
procedure WlxDisconnectNotify; external msgina name 'WlxDisconnectNotify';
|
|
{$ENDIF MSGINA1_4}
|
|
|
|
{$ENDIF DYNAMIC_LINK}
|
|
|
|
{$ENDIF MSGINA_IMPORT}
|
|
|
|
{$ENDIF JWA_INTERFACESECTION}
|
|
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
end.
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|