📄 jwawinwlx.pas
字号:
{$ENDIF}
{$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}
{$ENDIF IMPORT_MS_GINA}
////////////////////////////////////////////////////////////////////////
// //
// 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;
implementation
{$IFDEF IMPORT_MS_GINA}
const
msgina = 'msgina.dll';
{$IFDEF MSGINA1_0}
{$IFDEF DYNAMIC_LINK}
var
_WlxNegotiate: Pointer;
function WlxNegotiate;
begin
GetProcedureAddress(_WlxNegotiate, msgina, 'WlxNegotiate');
asm
mov esp, ebp
pop ebp
jmp [_WlxNegotiate]
end;
end;
{$ELSE}
function WlxNegotiate; external msgina name 'WlxNegotiate';
{$ENDIF DYNAMIC_LINK}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -