D6实现的windows 2000 下屏蔽Ctrl+Alt+Del的方法,完全SDK发布,来者有分
好不容易在网上查到了屏蔽2000下CAD键的方法,可惜是vc版的,本人费时1天编写sdk并在2003 d6下调试通过。
原理,替换系统GINA DLL中有关CAD的处理函数,其他不变,
vc sdk为winwlx.h
现免费发布,up,gz均给分,目的是提前帖子
1、编辑动态链接库
library dWINWLX;
uses
SysUtils,
Classes,
uMain in 'uMain.pas';
{$R *.res}
exports
WlxNegotiate,
WlxInitialize,
WlxDisplaySASNotice,
WlxLoggedOutSAS,
WlxActivateUserShell,
prcWlxLoggedOnSAS,
WlxLoggedOnSAS,
WlxDisplayLockedNotice,
WlxWkstaLockedSAS,
WlxIsLockOk,
WlxIsLogoffOk,
WlxLogoff,
WlxShutdown,
WlxScreenSaverNotify,
WlxStartApplication,
WlxNetworkProviderLoad;
end.
-----------------------------------------
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes;
const
MSGINADLL='msgina.dll';
const
WLX_VERSION_1_0 =$00010000;
WLX_VERSION_1_1 =$00010001;
WLX_CURRENT_VERSION =WLX_VERSION_1_1;
WLX_SAS_TYPE_TIMEOUT =0;
WLX_SAS_TYPE_CTRL_ALT_DEL =1;
WLX_SAS_TYPE_SCRNSVR_TIMEOUT =2;
WLX_SAS_TYPE_SCRNSVR_ACTIVITY =3;
WLX_SAS_TYPE_USER_LOGOFF =4;
WLX_SAS_TYPE_MAX_MSFT_VALUE =127;
WLX_LOGON_OPT_NO_PROFILE =$00000001;
WLX_LOGON_OPT_USE_GROUPPOLICY =$00000002;
WLX_PROFILE_TYPE_V1_0 =1;
WLX_PROFILE_TYPE_V2_0 =2;
WLX_SAS_ACTION_LOGON =1;
WLX_SAS_ACTION_NONE =2;
WLX_SAS_ACTION_LOCK_WKSTA =3;
WLX_SAS_ACTION_LOGOFF =4;
WLX_SAS_ACTION_SHUTDOWN =5;
WLX_SAS_ACTION_PWD_CHANGED =6;
WLX_SAS_ACTION_TASKLIST =7;
WLX_SAS_ACTION_UNLOCK_WKSTA =8;
WLX_SAS_ACTION_FORCE_LOGOFF =9;
WLX_SAS_ACTION_SHUTDOWN_POWER_OFF =10;
WLX_SAS_ACTION_SHUTDOWN_REBOOT =11;
WLX_SAS_ACTION_SHUTDOWN_SLEEP =12;
WLX_SAS_ACTION_SHUTDOWN_SLEEP2 =13;
WLX_SAS_ACTION_SHUTDOWN_HIBERNATE =14;
WLX_WM_SAS =WM_USER + 601;
WLX_DLG_SAS =101;
WLX_DLG_INPUT_TIMEOUT =102; // Input (keys, etc) timed out
WLX_DLG_SCREEN_SAVER_TIMEOUT =103; // Screen Saver activated
WLX_DLG_USER_LOGOFF =104; // User logged off
type
PVOID=Pointer;
PPVOID=^PVOID;
_LUID=packed record
LowPart:DWORD;
HighPart:int64;
end;
LUID=_LUID;
PLUID=^_LUID;
_WLX_PROFILE_V1_0=packed record
dwType :DWORD;
pszProfile :PWord;
end;
WLX_PROFILE_V1_0 =_WLX_PROFILE_V1_0;
PWLX_PROFILE_V1_0 =^_WLX_PROFILE_V1_0;
_WLX_PROFILE_V2_0 =packed record
dwType :DWORD;
pszProfile :PWord;
pszPolicy :PWord;
pszNetworkDefaultUserProfile :PWord;
pszServerName :PWord;
pszEnvironment :PWord;
end;
WLX_PROFILE_V2_0 =_WLX_PROFILE_V2_0;
PWLX_PROFILE_V2_0 =^_WLX_PROFILE_V2_0;
_WLX_MPR_NOTIFY_INFO =packed record
pszUserName :PWord;
pszDomain :PWord;
pszPassword :PWord;
pszOldPassword :PWord;
END;
WLX_MPR_NOTIFY_INFO=_WLX_MPR_NOTIFY_INFO;
PWLX_MPR_NOTIFY_INFO=^_WLX_MPR_NOTIFY_INFO;
function WlxNegotiate(dwWinlogonVersion:DWORD;pdwDllVersion:PDWORD):Longbool;stdcall;
function WlxInitialize(
lpWinsta :PWORD;
hWlx :THandle;
pvReserved :PVOID;
pWinlogonFunctions:PVOID;
pWlxContext :PPVOID
):LongBool;stdcall;
procedure WlxDisplaySASNotice(
pWlxContext:PVOID
);stdcall;
function WlxLoggedOutSAS(
pWlxContext:PVOID;
dwSasType:DWORD;
pAuthenticationId:PLUID;
pLogonSid:PVOID;
pdwOptions:PWORD;
phToken:PHandle;
pNprNotifyInfo:PWLX_MPR_NOTIFY_INFO;
pProfile:PPVOID
):Integer;stdcall;
function WlxActivateUserShell(
pWlxContext:PVOID;
pszDesktopName:PWORD;
pszMprLogonScript:PWORD;
pEnvironment:PVOID
):LongBool;stdcall;
function prcWlxLoggedOnSAS(
pWlxContext:PVOID;
dwSasType:DWORD;
pReserved:PVOID
):Integer; stdcall;
function WlxLoggedOnSAS(
pWlxContext:PVOID;
dwSasType:DWORD;
pReserved:PVOID
):Integer; stdcall;
procedure WlxDisplayLockedNotice(
pWlxContext:PVOID
);stdcall;
function WlxWkstaLockedSAS(
pWlxContext:PVOID;
dwSasType:DWORD
):Integer;stdcall;
function WlxIsLockOk(
pWlxContext:PVOID
):LongBool;stdcall;
function WlxIsLogoffOk(
pWlxContext:PVOID
):LongBool;stdcall;
procedure WlxLogoff(
pWlxContext:PVOID
);stdcall;
procedure WlxShutdown(
pWlxContext:PVOID;
ShutdownType:DWORD
);stdcall
//
// NEW for version 1.1
//
function WlxScreenSaverNotify(
pWlxContext:PVOID;
pSecure:PBool):Bool;stdcall;
function WlxStartApplication(
pWlxContext:PVOID;
pszDesktopName:PWORD;
pEnvironment:PVOID;
pszCmdLine:PWORD
):Bool;stdcall;
function WlxNetworkProviderLoad(
pWlxContext:PVOID;
pNprNotifyInfo:PWLX_MPR_NOTIFY_INFO
):bool;stdcall;