📄 winwlx.pas
字号:
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_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}
//
// 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}
//
// 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;
//
// 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}
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}
{$IFDEF MSGINA1_1}
function WlxScreenSaverNotify; external msgina name 'WlxScreenSaverNotify';
function WlxStartApplication; external msgina name 'WlxStartApplication';
{$ENDIF}
{$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}
{$ENDIF IMPORT_MS_GINA}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -