Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u, win7中无 ctrl alt del无限重启



cnpack组件

CnKeyBlocker1

CnKeyBlocker1.BlockAltTab:=true;

win7中无效

Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u,win+l三个系统热键,非屏蔽热键

打开xuetr, 右键 查看...查看进程热键

正常情况下.winlogon.exe注册了三个热键。ctrl+alt+del,win+u,win+l三个。

这三个键用SetWindowsHookEx()函数,使用键盘钩子也屏蔽不了。



我们先把UnregisterSystemHotKey.dll解压出来,放到任意目录.

比如E盘根目录,就运行

[html] view plaincopy?

rundll32E:UnregisterSystemHotKey.dll,Hook

再打开xuetr看下,Winlogo.exe进程注册的热键都没有了.



[cpp] view plaincopy?

#include<windows.h>

#include<process.h>

#include<tchar.h>

#include<stdio.h>

#include<shlwapi.h>

#include<psapi.h>

#pragmacomment(lib,"psapi.lib")

#pragmacomment(lib,"shlwapi.lib")

TCHARModuleFile[MAX_PATH];

TCHARszText[128]={0};

WNDPROCOldWindowProc;

HWNDhWinLogon;

HMODULEhDll;

LRESULTCALLBACKNewWindowProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

if(message==WM_NULL)

{

::UnregisterHotKey(hWnd,0);//Ctrl+Alt+delete

::UnregisterHotKey(hWnd,4);//Ctrl+Shift+Esc

::UnregisterHotKey(hWnd,5);//Win+L

::UnregisterHotKey(hWnd,6);//Win+U

::SetWindowLongPtr(hWnd,GWL_WNDPROC,(LONG)OldWindowProc);

return1;

}

returnCallWindowProc(OldWindowProc,hWnd,message,wParam,lParam);

}

BOOLWINAPIEnablePrivileges()

{

HANDLEhToken;

TOKEN_PRIVILEGEStkp;

if(!OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))

return(FALSE);

LookupPrivilegeValue(NULL,SE_DEBUG_NAME,

&tkp.Privileges[0].Luid);

tkp.PrivilegeCount=1;

tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken,FALSE,&tkp,0,

(PTOKEN_PRIVILEGES)NULL,0);

if(GetLastError()!=ERROR_SUCCESS)

returnFALSE;

returnTRUE;

}

BOOLCALLBACKlpEnumWindowsProc(HWNDhwnd,LPARAMlParam)

{

if(IsWindow(hwnd))

{

::GetWindowText(hwnd,szText,_countof(szText));

if(!_tcscmp(szText,TEXT("SASwindow")))

{

hWinLogon=hwnd;

OldWindowProc=(WNDPROC)::SetWindowLongPtr(hwnd,GWL_WNDPROC,(LONG)NewWindowProc);

PostMessage(hwnd,WM_NULL,0,0);

returnFALSE;

}

}

returnTRUE;

}

UINT_stdcallFreeSelfProc(void*Arg)

{

FreeLibraryAndExitThread(hDll,0);

return1;

}

BOOLWINAPIDllMain(HINSTANCEhDllHandle,DWORDnReason,LPVOIDReserved)

{

switch(nReason)

{

caseDLL_PROCESS_ATTACH:

hDll=hDllHandle;

GetModuleFileName(NULL,ModuleFile,_countof(ModuleFile));

EnablePrivileges();

if(StrStrI(ModuleFile,TEXT("winlogon.exe")))

{

HANDLEhThread;

UINTThreadId;

HDESKhWinLogon=OpenDesktop(TEXT("Winlogon"),0,FALSE,GENERIC_ALL);

::EnumDesktopWindows(hWinLogon,lpEnumWindowsProc,NULL);

CloseDesktop(hWinLogon);

hThread=(HANDLE)_beginthreadex(NULL,NULL,&FreeSelfProc,0,0,&ThreadId);

WaitForSingleObject(hThread,INFINITE);

CloseHandle(hThread);

}

else

{

DWORDdwProcessId=0;

HANDLEhProcess=0;

DWORDProcessList[512],cbNeeded,cProcess;

TCHARszFileName[256];

EnumProcesses(ProcessList,sizeof(ProcessList),&cbNeeded);

cProcess=cbNeeded/sizeof(DWORD);

for(UINTi=0;i<cProcess;i++)

{

if(ProcessList[i]!=0)

{

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessList[i]);

if(hProcess)

{

GetModuleBaseName(hProcess,NULL,szFileName,_countof(szFileName));

if(!_tcsicmp(szFileName,TEXT("winlogon.exe")))

{

dwProcessId=ProcessList[i];

break;

}

}

}

}

if(dwProcessId)

{

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);

}

if(!hProcess)

{

return0;

}

LPVOIDParam=VirtualAllocEx(hProcess,0,512,MEM_COMMIT,PAGE_READWRITE);

if(!Param)

{

MessageBox(NULL,TEXT("申请内存失败"),TEXT("申请内存失败"),MB_ICONWARNING);

return0;

}

GetModuleFileName(hDllHandle,ModuleFile,_countof(ModuleFile));

if(!WriteProcessMemory(hProcess,Param,(LPVOID)ModuleFile,256,NULL))

{

MessageBox(NULL,TEXT("写入内存失败"),TEXT("写入内存失败"),MB_ICONWARNING);

return0;

}

HANDLEhThread=CreateRemoteThread(hProcess,

NULL,

NULL,

(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"LoadLibraryW"),

Param,

NULL,

NULL);

if(hThread)

{

WaitForSingleObject(hThread,INFINITE);

}

else

{

TCHARsztmp[1024];

_stprintf_s(sztmp,_countof(sztmp),TEXT("创建远程线程失败,错误代码:%d,dll=%s"),GetLastError(),ModuleFile);

MessageBox(NULL,sztmp,TEXT("创建远程线程失败"),MB_ICONWARNING);

return0;

}

VirtualFreeEx(hProcess,Param,0,MEM_RELEASE);

CloseHandle(hThread);

CloseHandle(hProcess);

}

break;

caseDLL_THREAD_ATTACH:

break;

caseDLL_THREAD_DETACH:

break;

caseDLL_PROCESS_DETACH:

::SetWindowLongPtr(hWinLogon,GWL_WNDPROC,(LONG)OldWindowProc);

break;

default:

break;

}

return1;

}

EXTERN_C__declspec(dllexport)intHook(void)

{

return1;

}



很不错,用WM_NULL消息,然后注销热键确实是一种好的方法。不过,DLL注入之后其实不用再OpenDesktop然后EnumDesktopWindows枚举窗口了,在DLL中用FindWindow同样也可以找到SAS窗口。

用钩子貌似不行啊,可以屏蔽win键、esc键等,就是屏蔽不了CTRL+ALT+DEL

WindowsXP系统中如何屏蔽Ctrl+Alt+Del、Alt+Tab以及Ctrl+Esc键序列

http://www.vckbase.com/document/viewdoc/?id=424

在Windows2000中Ctrl-Alt-Delete组合键的处理如下:

Winlogon初始化的时候,在系统中注册了CTRL+ALT+DELSecureAttentionSequence(SAS)热键,并且在WinSta0Windows系统中创建三个桌面。

SAS热键的注册使得Winlogon成为第一个处理CTRL+ALT+DEL的进程,所以保证了没有其他应用程序能够处理这个热键。

在WindowsNT/Windows2000/WindowsXP中,WinSta0是表示物理屏幕、鼠标和键盘的Windows系统对象的名字。Winlogon在WinSta0Windows系统中创建了SAS窗口(窗口标题是"SASWindow")和如下三个桌面。

Winlogon桌面

应用程序桌面

屏幕保护桌面

当用户按下Ctrl-Alt-Delete组合键时,Winlogon桌面上的SAS窗口收到它注册的系统热键消息(WM_HOTKEY)

SASWindow窗口处理这个消息调用GraphicalIdentificationandAuthentication(GINA)动态连接库中的相关函数

要中断Ctrl-Alt-Delete组合键的处理,可以有以下方式

从键盘驱动层捕获Ctrl-Alt-Delete

替换Winlogon

替换GINA

HookWinlogon上SAS窗口的窗口过程(需要当前登录用户有调试权限)

HookGINA里边的函数WlxLoggedOnSAS,然后返回WLX_SAS_ACTION_NONE(未研究)

更多信息

鉴于系统的更新可能造成我们替换的系统文件和其他系统文件不兼容(著名的DLL地狱),所以不推荐替换Winlogon.exe和GINA的方法。这里我们讨论HookWinlogon上的SAS窗口的窗口过程的方法。

因为SAS窗口和我们的程序内存地址空间不同,所以要写一个动态连接库,加载到SAS窗口的内存空间中。下面是动态连接库的源代码。

//---------------------------------------------------------------------------

//作者:韦覃武

//网上呢称:BCB_FANS(四大名捕之追杀令)(此为CSDN和www.driverdevelop.com之帐号)

//E-Mail:slwqw@163.com

//日期:2002-10-20

//

//功能:在2000下屏蔽Ctrl+Alt+Del组合键。(在Windows2000ProfessionalSP3

//中文版平台下面测试通过)

//原理:采用远程线程注入技术,装载一个DLL到Winlogon进程,然后截获SAS窗口的窗

//口过程,接管WM_HOTKEY消息,以达到屏蔽Ctrl+Alt+Del之目的。

//开发语言:BorlandC++Builder5.0Patch2

//技术比较:关于在2000下面如何屏蔽Ctrl+Alt+Del组合键,一种常被提到的解决方法就

//是使用自己写的GINA去替换MSGINA.DLL,然后在WlxLoggedOnSAS里边直接返回

//WLX_SAS_ACTION_NONE。嘿嘿,说到底这并不是真正地屏蔽了这个组合键,只是

//直接返回WLX_SAS_ACTION_NONE时,Winlogon进程又自动从"Winlogon"桌面切换

//回原来的"Default"桌面了,而不是显示安全对话框,所以看起来被屏蔽了:),

//使用那种方法明显地看到桌面在闪烁!但是使用本文的方法时,你不会看到任

//何闪烁!

//鸣谢:www.driverdevelop.com上的icube和lu0。

//版权:转载请注明原作者:)

//---------------------------------------------------------------------------

#include"stdafx.h"

#include<string>

usingnamespacestd;

//---------------------------------------------------------------------------

HWNDhSASWnd;

FARPROCFOldProc;

LRESULTCALLBACKSASWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);

BOOLCALLBACKEnumWindowsProc(HWNDhwnd,LPARAMlParam);

//---------------------------------------------------------------------------

HANDLEhThread=NULL;

DWORDdwThreadId;

DWORDWINAPIThreadFunc();

//---------------------------------------------------------------------------

BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved)

{

switch(ul_reason_for_call)

{

caseDLL_PROCESS_ATTACH:

hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&dwThreadId);

break;

caseDLL_PROCESS_DETACH:

if(FOldProc!=NULL)

{

SetWindowLong(hSASWnd,GWL_WNDPROC,long(FOldProc));

}

CloseHandle(hThread);

break;

}

returnTRUE;

}

//---------------------------------------------------------------------------

DWORDWINAPIThreadFunc()

{

HDESKhDesk;

hDesk=OpenDesktop("Winlogon",0,false,MAXIMUM_ALLOWED);

FOldProc=NULL;

hSASWnd=NULL;

EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowsProc,0);

if(hSASWnd!=NULL)

{

FOldProc=(FARPROC)SetWindowLong(hSASWnd,GWL_WNDPROC,long(SASWindowProc));

}

CloseHandle(hDesk);

return1;

}

//---------------------------------------------------------------------------

//查找"Winlogon"桌面的窗口

BOOLCALLBACKEnumWindowsProc(HWNDhwnd,LPARAMlParam)

{

charClassBuf[128];

GetWindowText(hwnd,ClassBuf,sizeof(ClassBuf));

//我自己写了一个系统服务,然后在里边查询"Winlogon"桌面上的窗口,发现桌面上存在

//窗口"SASwindow"。

stringClassName(ClassBuf);

if(ClassName.find("SASwindow")!=-1)

{

hSASWnd=hwnd;

returnfalse;

}

returntrue;

}

//---------------------------------------------------------------------------

//SAS窗口的窗口过程

LRESULTCALLBACKSASWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

//屏蔽Ctrl+Alt+Del

if(uMsg==WM_HOTKEY)

{

WORDwKey=HIWORD(lParam);
Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u, win7中无 ctrl alt del无限重启

WORDwModifier=LOWORD(lParam);

boolIsCtrlDown=((wModifier&VK_CONTROL)!=0);

boolIsAltDown=((wModifier&VK_MENU)!=0);

boolIsShiftDown=((wModifier&VK_SHIFT)!=0);

//按下Ctrl+Alt+Del组合键

if(IsCtrlDown&&IsAltDown&&wKey==VK_DELETE)

{

return1;

}

//按下Ctrl+Shift+Esc组合键,这个组合键将显示任务管理器,可根据需要是否屏蔽。

elseif(IsCtrlDown&&IsShiftDown&&wKey==VK_ESCAPE)

{

//Donothing

}

}

returnCallWindowProc((WNDPROC)FOldProc,hwnd,uMsg,wParam,lParam);

}

//---------------------------------------------------------------------------

这样,如果Winlogon加载了这个动态连接库,那么就替换了SAS窗口的窗口过程。如果Winlogon卸载了这个动态连接库,则恢复了SAS窗口的窗口过程。

为了让Winlogon加载我们的动态连接库,首先要找到Winlogon进程,然后在进程中分配空间存放我们的代码,再通过创建远程线程赖执行我们的代码。下面是Hook部分的代码

//---------------------------------------------------------------------------

//作者:韦覃武,jiangsheng

//网上呢称:BCB_FANS(四大名捕之追杀令)(此为CSDN和www.driverdevelop.com之帐号)jiangsheng(此为CSDN帐号)

//E-Mail:slwqw@163.com

//日期:2002-10-20

//2002-11-5jingsheng修改

//功能:在2000下屏蔽Ctrl+Alt+Del组合键。(在Windows2000ProfessionalSP3

//中文版平台下面测试通过)

//原理:采用远程线程注入技术,装载一个DLL到Winlogon进程,然后截获SAS窗口的窗

//口过程,接管WM_HOTKEY消息,以达到屏蔽Ctrl+Alt+Del之目的。

//开发语言:BorlandC++Builder5.0Patch2,VisualC++6.0SP5

//技术比较:关于在2000下面如何屏蔽Ctrl+Alt+Del组合键,一种常被提到的解决方法就

//是使用自己写的GINA去替换MSGINA.DLL,然后在WlxLoggedOnSAS里边直接返回

//WLX_SAS_ACTION_NONE。嘿嘿,说到底这并不是真正地屏蔽了这个组合键,只是

//直接返回WLX_SAS_ACTION_NONE时,Winlogon进程又自动从"Winlogon"桌面切换

//回原来的"Default"桌面了,而不是显示安全对话框,所以看起来被屏蔽了:),

//使用那种方法明显地看到桌面在闪烁!但是使用本文的方法时,你不会看到任

//何闪烁!

//鸣谢:www.driverdevelop.com上的icube和lu0。

//版权:转载请注明原作者:)

屏蔽SAS安全序列键有如下几个方法,

1、GINA替换

2、键盘过滤驱动,下面写的那个

3、注册表禁用任务管理器(变相实现)

最简单的就是子类化SAS窗口,这个热键是由系统直接交给SAS窗口(窗口标题为:"SASwindow",窗口类为:"SASWindowclass")处理的,所以低级键盘钩想都不要想,子类化后,只需要处理WM_HOTKEY消息就可以了,具体实现可以看http://www.codeproject.com/KB/winsdk/AntonioWinLock.aspx

#include<ntddk.h>

#include<stdio.h>

#defineBOOLint

#defineTRUE1

#defineFALSE0

BOOLctrl_state;

BOOLalt_state;

ctrl_state=FALSE;

alt_state=FALSE;

typedefstruct_KEYBOARD_INPUT_DATA{

USHORTUnitId;

USHORTMakeCode;

USHORTFlags;

USHORTReserved;

ULONGExtraInformation;

}KEYBOARD_INPUT_DATA,*PKEYBOARD_INPUT_DATA;

typedefstruct_DEVICE_EXTENSION

{

PDEVICE_OBJECTTopOfStack;

}DEVICE_EXTENSION,*PDEVICE_EXTENSION;

NTSTATUSInit(

INPDRIVER_OBJECTDriverObject

)

{

CCHARntNameBuffer[64];

STRINGntNameString;

UNICODE_STRINGntUnicodeString;

PDEVICE_OBJECTdevice;

NTSTATUSstatus;

PDEVICE_EXTENSIONdevExt;

sprintf(ntNameBuffer,"\Device\KeyboardClass0");

RtlInitAnsiString(&ntNameString,ntNameBuffer);

RtlAnsiStringToUnicodeString(&ntUnicodeString,&ntNameString,TRUE);

status=IoCreateDevice(DriverObject,

sizeof(DEVICE_EXTENSION),

NULL,

FILE_DEVICE_KEYBOARD,

0,

FALSE,

&device);

if(!NT_SUCCESS(status)){

RtlFreeUnicodeString(&ntUnicodeString);

returnSTATUS_SUCCESS;

}

RtlZeroMemory(device->DeviceExtension,sizeof(DEVICE_EXTENSION));

devExt=(PDEVICE_EXTENSION)device->DeviceExtension;

device->Flags|=DO_BUFFERED_IO;

device->Flags&=~DO_DEVICE_INITIALIZING;

status=IoAttachDevice(device,&ntUnicodeString,&devExt->TopOfStack);

if(!NT_SUCCESS(status)){

IoDeleteDevice(device);

RtlFreeUnicodeString(&ntUnicodeString);

returnSTATUS_SUCCESS;

}

RtlFreeUnicodeString(&ntUnicodeString);

returnSTATUS_SUCCESS;

}

VOID

Unload(

INPDRIVER_OBJECTDriver

)

{

}

NTSTATUSCompleteRoutine(

INPDEVICE_OBJECTDeviceObject,

INPIRPIrp,

INPVOIDContext

)

{

PIO_STACK_LOCATIONIrpSp;

PKEYBOARD_INPUT_DATAKeyData;

intnumKeys,i;

IrpSp=IoGetCurrentIrpStackLocation(Irp);

if(NT_SUCCESS(Irp->IoStatus.Status)){

KeyData=Irp->AssociatedIrp.SystemBuffer;

numKeys=Irp->IoStatus.Information/sizeof(KEYBOARD_INPUT_DATA);

for(i=0;i<numKeys;i++){

if(ctrl_state&&alt_state&&KeyData[i].MakeCode==0x53){

KeyData[i].MakeCode=0;

}

switch(KeyData[i].MakeCode){

case0x1d:

if(KeyData[i].Flags)

ctrl_state=FALSE;

else

ctrl_state=TRUE;

break;

case0x38:

if(KeyData[i].Flags)

alt_state=FALSE;

else

alt_state=TRUE;

break;

default:

break;

}

}

}

if(Irp->PendingReturned){

IoMarkIrpPending(Irp);

}

returnIrp->IoStatus.Status;

}

NTSTATUSDispatchRead(

INPDEVICE_OBJECTDeviceObject,

INPIRPIrp)

{

PDEVICE_EXTENSIONdevExt;

PIO_STACK_LOCATIONcurrentIrpStack;

PIO_STACK_LOCATIONnextIrpStack;

devExt=(PDEVICE_EXTENSION)DeviceObject->DeviceExtension;

currentIrpStack=IoGetCurrentIrpStackLocation(Irp);

nextIrpStack=IoGetNextIrpStackLocation(Irp);

*nextIrpStack=*currentIrpStack;

IoSetCompletionRoutine(Irp,CompleteRoutine,DeviceObject,TRUE,TRUE,TRUE);

returnIoCallDriver(devExt->TopOfStack,Irp);

}

NTSTATUSDispatchProc(

INPDEVICE_OBJECTDeviceObject,

INPIRPIrp

)

{

Irp->CurrentLocation++;

Irp->Tail.Overlay.CurrentStackLocation++;

returnIoCallDriver(((PDEVICE_EXTENSION)DeviceObject->DeviceExtension)->TopOfStack,Irp);

}

NTSTATUSDriverEntry(

INPDRIVER_OBJECTDriverObject,

INPUNICODE_STRINGRegistryPath

)

{

ULONGi;

for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++){

DriverObject->MajorFunction[i]=DispatchProc;

}

DriverObject->MajorFunction[IRP_MJ_READ]=DispatchRead;

DriverObject->DriverUnload=Unload;

Init(DriverObject);

return0;

}

在WINDOWS9X环境中我们可以使用SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,NULL,0);来屏蔽CTRL+ALT+DEL,但在NT/2000/xp等环境下却行不通,通过替换GINADLL的方式很好地实现了在NT/2000/xp下屏蔽CTRL+ALT+DEL的功能...

Delphi/Pascal code?

一、原理

在NT/2000中交互式的登陆支持是由WinLogon调用GINADLL实现的,GINADLL提供了一个交互式的界面为用户登陆提供认证请求。在WinLogon初始化时,就向系统注册截获CTRL+ALT+DEL消息,所以其他程序就无法得到CTRL+ALT+DEL的消息。

WinLogon会和GINADLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供的接口,自己

可以编GINADLL来代替MSGINA.DLL。

WinLogon初始化时会创建3个桌面:

(1)、winlogon桌面:主要显示window安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等

(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面

(3)、屏幕保护桌面:屏幕保护显示界面。

在用户登陆以后,按下CTRL+ALT+DEL键的时候,WinLogon回调用GINADLL的输出函数:WlxLoggedOnSAS,

这时正处于winlogon桌面,我们只要直接将他转向应用程序桌面,系统就不会显示Windows安全那个界面,换一种说法

也就是用户按下CTRL+ALT+DEL后,不会起什么作用。当是我们在切换桌面的时候会出现屏幕闪动!

二、程序实现

GINADLL要输出下列函数(winlogon会调用)

WlxActivateUserShell

WlxDisplayLockedNotice

WlxDisplaySASNotice

WlxDisplayStatusMessage

WlxGetStatusMessage

WlxInitialize

WlxIsLockOk

WlxIsLogoffOk

WlxLoggedOnSAS

WlxLoggedOutSAS

WlxLogoff

WlxNegotiate

WlxNetworkProviderLoad

WlxRemoveStatusMessage

WlxScreenSaverNotify

WlxShutdown

WlxStartApplication

WlxWkstaLockedSAS

为了简化编程,我们从MSGINA.DLL中动态获取上诉函数,在自定义的DLL中(以下称为NoReboot.DLL)中直接调用MSGINA.DLL

的函数即可。现在我们要处理的就是WlxLoggedOnSAS函数:

intWINAPIWlxLoggedOnSAS(

PVOIDpWlxContext,

DWORDdwSasType,

PVOIDpReserved)

{

HANDLEhMutex;

WriteInfo("WlxLoggedOnSAS

");//用于记录信息

if(dwSasType==WLX_SAS_TYPE_CTRL_ALT_DEL){//屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽

//我采用了Mutex来控制是否屏蔽,(注意:要用unicode)

hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"_ac952_z_cn_CTRL_ALT_DEL");

if(hMutex){

CloseHandle(hMutex);

WriteInfo("disbleCTRL+ALT+DEL

");

returnWLX_SAS_ACTION_NONE;//将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL

}

else

WriteInfo("notdisbleCTRL+ALT+DEL

");

}

returnprcWlxLoggedOnSAS(//这是我从MSGINA.DLL中获取的函数。

pWlxContext,

dwSasType,

pReserved);

}

我们要在自己的程序中调用hMutex=CreateMutex(NULL,FALSE,"_ac952_z_cn_CTRL_ALT_DEL");就可屏蔽CTRL+ALT+DEL。

三、安装和注意事项:

在编写GIANDLL中要注意,GINADLL使用的是unicode。

GINADLL的安装:

键名:HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWinlogon

变量名:GinaDLL

变量类型:[REG_SZ]

内容:"你的GINADLL的名称"如:"NoReboot.DLL:

将你的GINADLL(NoReboot.dll)拷贝到系统目录下(system32),重启机器,你的GINADLL(NoReboot.dll)就会运行。

如果出现进不了你的系统,那你进入DOS后,将msgina.dll拷贝成你的GINADLL(NoReboot.dll)就可进入了,或者进入

安全模式,删除掉那个键值。

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/120842.html

更多阅读

winlogon.exe-应用程序错误 game.exe应用程序错误

  winlogon.exe-应用程序错误  20分标签:应用程序 内存 电脑 自动重启 我不管回答:2 浏览:21050 提问时间:2008-12-18 17:28开机即跳出任务框,内容显示“OxO13b06ac”指令引用的“Oxc3d9cce8”内存。该内存不能为“written”。要终止

C#查杀WINWORD.EXE进程 winword.exe占用cpu

最近写C#控制WINDORD的程序,生成doc文档后如何也关不掉winword的App对象,没办法来点强制手段:protected void killAllProcess() //杀掉所有winword.exe进程{System.Diagnostics.Process[]myPs;myPs =System.Diagnostics.Process.Get

HPLaserJet1010打印机-在Win7下安装驱动 hplaserjet1010

先点此链接:http://wenku.baidu.com/view/c0dd819a51e79b89680226ab.html目前HP官方网站暂时没有提供1010打印机在win7系统下的驱动,以下是USB线连接时安装驱动的方法,仅供测试使用。解决问题:(连接USB,添加win7系统自带LaserJet1015驱动

声明:《Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u, win7中无 ctrl alt del无限重启》为网友薄荷少年微微凉分享!如侵犯到您的合法权益请联系我们删除