D6实现的windows 2000 下屏蔽Ctrl+Alt+Del的方法,完全SDK发布,来者有分

micher_yan 2003-10-16 03:31:46
好不容易在网上查到了屏蔽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;

...全文
56 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenjhshen 2004-03-04
  • 打赏
  • 举报
回复
uu
xhc_2000 2003-12-02
  • 打赏
  • 举报
回复
收藏
mib3000 2003-11-03
  • 打赏
  • 举报
回复
收藏
xuhuiqinfeng 2003-10-29
  • 打赏
  • 举报
回复
对您敬仰如江水一样
micher_yan 2003-10-25
  • 打赏
  • 举报
回复
呵呵,买单,
bengan 2003-10-24
  • 打赏
  • 举报
回复
各高人,经常看到大家谈什么.dell文件其实是什么来的啊?
哪里有介绍api的书和文章?
g58521547 2003-10-23
  • 打赏
  • 举报
回复
studying...
luo1105 2003-10-23
  • 打赏
  • 举报
回复
up,studying!
hebji 2003-10-23
  • 打赏
  • 举报
回复
up
pankun 2003-10-22
  • 打赏
  • 举报
回复
楼上的大侠啊!那我请问你一下,如果有个程序需要限制鼠标范围,但限制鼠标按下CAD就会失效,那么不屏蔽CAD怎么防止这种情况的发生?
CAD不止是会调用任务管理器的,还会做一些后台的事,自己无知就谦虚一点嘛.说话还怎么冲.鄙视你这种人.
yunboddd 2003-10-22
  • 打赏
  • 举报
回复
屏蔽CAD有用吗?不就是不让人用任务管理器么!要知道调出任务管理器的方法不下N种,你只屏蔽了一种热键,鸟用啊!!哪有禁止任务管理器运行来的爽!我鄙视你们
ly_liuyang 2003-10-21
  • 打赏
  • 举报
回复
CSDN文档有的,VC版
http://www.csdn.net/develop/article/15/15645.shtm
----------------------------------------------------------------
我的版本有些不同,我是替换SAS Window的
http://free.dvs168.net/lysoft/projects/SASHook.rar
暂没有完整代码公开
但有相关参考
http://free.dvs168.net/lysoft/projects/API Hook.rar
这是关键代码
--------------
xiangwangz 2003-10-21
  • 打赏
  • 举报
回复
gz
hatedeadlock 2003-10-21
  • 打赏
  • 举报
回复
其实很早前我在写网吧管理系统的时候
在2000屏蔽CAD键
我第一个念头就是HOOK
我觉得使用HOOK是最简单的
fangnaoqiao 2003-10-21
  • 打赏
  • 举报
回复
up,学习ing
koma2003 2003-10-21
  • 打赏
  • 举报
回复
厉害
nyf1220 2003-10-21
  • 打赏
  • 举报
回复
挖,厉害拉~
year2000bug 2003-10-21
  • 打赏
  • 举报
回复
up
ly_liuyang 2003-10-21
  • 打赏
  • 举报
回复
详细的Delphi SAS SDK

http://www.bendlins.de/nico/delphi/WinWlx.zip
haoguozhong 2003-10-20
  • 打赏
  • 举报
回复
up
加载更多回复(37)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧