Windows XP下屏蔽Ctrl_Alt_Del键的方法

 

//调用下面两个函数就可以了
procedure RunFuckCAD;   //屏蔽Ctrl+Alt+Del
procedure StopFuckCAD;  //取消屏蔽Ctrl+Alt+Del
点击下载源文件
主要代码为:

  1. unit Fuck_CAD_Unit;   
  2.   
  3. interface  
  4.   
  5. uses Windows, TLHelp32,SysUtils;   
  6.   
  7. const  
  8.   MyKernel='SnowmanLockScreenHook.Dll';  //释放完得文件名,可以自己改   
  9.   Winlogon='winlogon.exe';   
  10.   MyKernelSize=9216;   
  11.   MyKernelBuf:Array [0..9215of Byte =   
  12.   (   
  13.      //... 数组内容太多,略,见源文件   
  14.   );   
  15.   
  16. procedure RunFuckCAD;   
  17. procedure StopFuckCAD;   
  18.   
  19.   
  20. implementation  
  21.   
  22.   
  23. procedure GetDebugPrivs;  //提升到Debug权限   
  24. var  
  25.   hToken: THandle;   
  26.   tkp: TTokenPrivileges;   
  27.   retval: dword;   
  28. begin  
  29.   If (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then  
  30.   begin  
  31.     LookupPrivilegeValue(nil'SeDebugPrivilege'  , tkp.Privileges[0].Luid);   
  32.     tkp.PrivilegeCount := 1;   
  33.     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;   
  34.     AdjustTokenPrivileges(hToken, False, tkp, 0nil, retval);   
  35.   end;   
  36. end;   
  37.   
  38. function NameToPID(ExeName:pchar):longword;   
  39. //通过进程文件名返回一个Pid,如果多个同名进程返回第一个进程的Pid   
  40.   var  
  41.     hSnap:longword;   
  42.     ProcessEntry: TProcessEntry32;   
  43.     c:boolean;   
  44.   begin  
  45.     result:=0;   
  46.     hSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);   
  47.     ProcessEntry.dwSize:= Sizeof(TProcessEntry32);   
  48.     c:= Process32First(hSnap,ProcessEntry);   
  49.     While c  do  
  50.       begin  
  51.         if LstrcmpiA(ExeName,ProcessEntry.szExeFile)= 0 then  
  52.            begin  
  53.              result:=ProcessEntry.th32ProcessID;   
  54.              break;   
  55.            end;   
  56.         c:=Process32Next(hSnap,ProcessEntry);   
  57.       end;   
  58.     CloseHandle(hSnap);   
  59.   end;   
  60.   
  61. function GetSysPath:pchar;  //最后没加'/'   
  62.   var  
  63.    a:pchar;   
  64.   begin  
  65.    GetMem(a,255);   
  66.    GetSystemDirectory(a,255);   
  67.    Result:=a;   
  68.   end;   
  69.   
  70.   
  71. procedure DelKernel;   
  72.   begin  
  73.     DeleteFile(pchar(string(GetSysPath)+'/'+string(MyKernel))) ;   
  74.   end;   
  75.   
  76. function CreateKernelFile(SaveFile:String):Boolean;   
  77.   var  
  78.     hFile:THandle;   
  79.     BytesWrite: dword;   
  80.   begin  
  81.     Result:=False;   
  82.     hFile := CreateFile(Pchar(SaveFile),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS,0,0);   
  83.     if hFile = INVALID_HANDLE_VALUE then Exit;   
  84.     if WriteFile(hFile,MyKernelBuf,MyKernelSize, BytesWrite, nilthen Result:=True;   
  85.     CloseHandle(hFile);   
  86.   end;   
  87.   
  88. Function  GetModule(ProcessName,ModuleName:Pchar):longword;   
  89. //This is a function written by Hke.   
  90. //检查进程是否加载DLL,是返回指针,否返回0   
  91.   var  
  92.     PID:longword;   
  93.     hModuleSnap:longword;   
  94.     ModuleEntry: TModuleEntry32;   
  95.   begin  
  96.     Pid:=NameToPID(ProcessName);   
  97.     GetDebugPrivs;   
  98.     hModuleSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pid);   
  99.     ModuleEntry.dwSize:=SizeOf(TModuleEntry32);   
  100.     result:=0;   
  101.     if Module32First(hModuleSnap,ModuleEntry) then  
  102.       if  (LstrcmpiA(ModuleEntry.szModule,ModuleName)=0then  
  103.         Result:=ModuleEntry.hModule   
  104.       else  
  105.         begin  
  106.           while  Module32Next(hModuleSnap,ModuleEntry) do  
  107.              begin  
  108.                if LstrcmpiA(ModuleEntry.szModule,ModuleName)=0 then  
  109.                  begin  
  110.                    Result:=ModuleEntry.hModule;   
  111.                    break;   
  112.                  end;   
  113.              end;   
  114.         end;   
  115.     CloseHandle(hModuleSnap);   
  116.   end;   
点击阅读全文内文分页: [1] [2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //作者  :黎富平 //网上呢称:聪聪 //Home Page :http://www.soft520.com //E-Mail :[email protected] //日期  :2004-8-23 //功能  :根据BCB_FANS(四大名捕之追杀令)在2000下屏蔽Ctrl + Alt + Del组合的 //     技术,在Borland C++Builder 6.0 Patch4下编写远程线程注入的代码,封装 //     成DLL并输出EnabledKey和DisabledKey两个函数,使得可以在Delphi,VB等程 //     中可以使用,本程序在Windows Server 2003中文版平台下面测试通过 //开发语言:Borland C++Builder 6.0 Patch4 //文件说明:SASHOOK.dll  屏蔽Ctrl + Alt + Del的DLL //     RunDLL.dll  负责将SASHOOK.dll远程线程注入的DLL,输出EnabledKey和 //     DisabledKey两个函数 //     RunDLLExample.exe 对RunDLL.dll的两个函数调用  //鸣谢  :BCB_FANS(四大名捕之追杀令) //版权  :转载请注明原作者:) //    :以下为 BCB_FANS(四大名捕之追杀令)在2000下屏蔽Ctrl + Alt + Del组合的 //     技术说明 //原理  :采用远程线程注入技术,装载一个DLL到Winlogon进程,然后截获SAS窗口的窗 //     口过程,接管WM_HOTKEY消息,以达到屏蔽Ctrl + Alt + Del之目的。 //技术比较:关于在2000下面如何屏蔽Ctrl + Alt + Del组合,一种常被提到的解决方法就 //   是使用自己写的GINA去替换MSGINA.DLL,然后在WlxLoggedOnSAS里边直接返回 //   WLX_SAS_ACTION_NONE。嘿嘿,说到底这并不是真正地屏蔽了这个组合,只是 //   直接返回WLX_SAS_ACTION_NONE时,Winlogon进程又自动从"Winlogon"桌面切换 //   回原来的"Default"桌面了,而不是显示安全对话框,所以看起来被屏蔽了:), //   使用那种方法明显地看到桌面在闪烁!但是使用本文的方法时,你不会看到任 //   何闪烁!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值