欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC實(shí)現Win2000下屏蔽Ctrl Alt Del鍵
一、 實(shí)現方法

  
首先介紹一下Winlogon。Windows2000/NT有三種系統狀態(tài):沒(méi)有用戶(hù)登錄狀態(tài)、用戶(hù)成功登錄狀態(tài)以及工作站鎖定狀態(tài)。Winlogon是Windows2000/NT操作系統提供交互式登錄支持的組件。Winlogon有三個(gè)組成部分:可執行文件winlogon.exe,提供圖形界面認證功能的動(dòng)態(tài)庫Gina Dll,以及一些網(wǎng)絡(luò )服務(wù)提供動(dòng)態(tài)庫Network Provider Dll。參考模型如下:


參考模型

winlogon.exe處理一些下層導出的接口函數,而認證策略是在Gina Dll中獨立設計的。在系統啟動(dòng)時(shí),GinaDll被winlogon.exe裝載。Microsoft提供了一個(gè)默認的GinaDll--Winnt\system32\msgina.dll,提供了標準的用戶(hù)名、密碼認證模式。GinaDll是可替換的,用戶(hù)可以設計自己的Gina Dll,以提供其他如智能卡、視網(wǎng)膜、指紋或其他一些認證機制。

  開(kāi)發(fā)自定義的GinaDll。必須實(shí)現并導出與winlogon.exe交互的18個(gè)標準函數接口,包括WlxNegotiate、WlxInitialize、WlxLoggedOnSAS等(其他函數接口請參考Msdn)。其中WlxNegotiate是winlogon.exe調用的第一個(gè)接口函數,進(jìn)行必要的版本判斷,隨后調用的是WlxInitialize,主要完成winlogon.exe特定版本的函數分派表向GinaDll的傳遞。筆者還要說(shuō)明的是WlxLoggedOnSAS函數,這個(gè)函數主要的功能是,當winlogon在登錄成功狀態(tài)下,接收到SAS事件,于是調用這個(gè)函數進(jìn)行SAS事件的識別以及進(jìn)行各事件的相應處理。
自定義Gina Dll的使用。比如開(kāi)發(fā)的Gina Dll文件名為MyGina.dll。將該文件放到以下路徑:Winnt\system32。并修改注冊表,如下:

Key Name: \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ Winlogon
Value Name: GinaDLL
Value Type: [REG_SZ]
Value: MyGina.dll

重新啟動(dòng)計算機MyGina.dll即投入使用。在用戶(hù)登錄成功狀態(tài)下,按下Ctrl+Alt+Del時(shí)系統不再彈出"Widows安全"對話(huà)框。由于并不需要改變用戶(hù)名、密碼這種標準的認證模式,所以可以仍然使用msgina.dll中導出的函數接口,而對WlxLoggedOnSAS函數的實(shí)現進(jìn)行必要的改變,不管接收到什么SAS事件,該函數直接返回WLX_SAS_ACTION_NONE而不做其他處理。

  二、編程步驟

  1、啟動(dòng)Visual C++6.0,新建一個(gè)項目,選擇MFC AppWizard(dll),項目名輸入為MyGina,按下"OK"后,選擇Regular DLL with MFC statically linked,按下"Finish";

  2、使用Class Wizard重載CmyGinaApp類(lèi)的InitInstance()和ExitInstance()兩個(gè)函數,并注意在Stdafx.h中加入#include <Winwlx.h>;

  3、在MyGina.h文件中說(shuō)明"extern CMyGinaApp theApp",以便于程序其他地方對theApp的引用;在類(lèi)CMyGinaApp中定義成員變量(具體內容見(jiàn)代碼部分);

  4、添加代碼,編譯程序。

  三、程序代碼

// //////////////////////////////////////////MyGina.h : main header file for the MYGINA DLL
#if !defined(AFX_MYGINA_H__5959C4FD_1D31_4E51_B3CD_B5649C8473B7__INCLUDED_)
#define AFX_MYGINA_H__5959C4FD_1D31_4E51_B3CD_B5649C8473B7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include ‘stdafx.h‘ before including this file for PCH
#endif
#include "resource.h" // main symbols
//定義的函數類(lèi)型;
typedef (WINAPI * NEGOTIATE) (DWORD,PDWORD);
typedef (WINAPI * INITIALIZE) (LPWSTR,HANDLE,PVOID,PVOID,PVOID *);
typedef (WINAPI * ACTIVATE_USHELL) (PVOID,PWSTR,PWSTR,PVOID);
typedef (WINAPI * PARAM_PVOID) (PVOID);
typedef (WINAPI * DISP_STATUS) (PVOID,HDESK,DWORD,PWSTR,PWSTR);
typedef (WINAPI * GET_STATUS) (PVOID,DWORD *,PWSTR,DWORD);
typedef (WINAPI * LOGON_SAS) (PVOID,DWORD,PVOID);
typedef (WINAPI * LOGOUT_SAS) (PVOID,DWORD,PLUID,PSID,PDWORD,
PHANDLE,PWLX_MPR_NOTIFY_INFO,PVOID *);
typedef (WINAPI * NETWORK_LOAD) (PVOID,PWLX_MPR_NOTIFY_INFO);
typedef (WINAPI * SCR_SAVER) (PVOID,BOOL *);
typedef (WINAPI * SHUT_DOWN) (PVOID,DWORD);
typedef (WINAPI * START_APP) (PVOID,PWSTR,PVOID,PWSTR);
typedef (WINAPI * LOCKED_SAS) (PVOID,DWORD);

class CMyGinaApp : public CWinApp
{
 private:
  HMODULE hMsDll;
 public:
  NEGOTIATE MyWlxNegotiate;
  INITIALIZE MyWlxInitialize;
  ACTIVATE_USHELL MyWlxActivateUserShell;
  PARAM_PVOID MyWlxDisplayLockedNotice;
  PARAM_PVOID MyWlxDisplaySASNotice;
  DISP_STATUS MyWlxDisplayStatusMessage;
  GET_STATUS MyWlxGetStatusMessage;
  PARAM_PVOID MyWlxIsLockOk;
  PARAM_PVOID MyWlxIsLogoffOk;
  LOGON_SAS MyWlxLoggedOnSAS;
  LOGOUT_SAS MyWlxLoggedOutSAS;
  PARAM_PVOID MyWlxLogoff;
  NETWORK_LOAD MyWlxNetworkProviderLoad;
  PARAM_PVOID MyWlxRemoveStatusMessage;
  SCR_SAVER MyWlxScreenSaverNotify;
  SHUT_DOWN MyWlxShutdown;
  START_APP MyWlxStartApplication;
  LOCKED_SAS MyWlxWkstaLockedSAS;
 public:
  CMyGinaApp();
  // Overrides
  // ClassWizard generated virtual function overrides
  //{{AFX_VIRTUAL(CMyGinaApp)
   public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
  //}}AFX_VIRTUAL
  //{{AFX_MSG(CMyGinaApp)
  // NOTE - the ClassWizard will add and remove member functions here.
  // DO NOT EDIT what you see in these blocks of generated code !
  //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

extern CMyGinaApp theApp;
#endif
//////////////////

#include "stdafx.h"
#include "MyGina.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////// CMyGinaApp
BEGIN_MESSAGE_MAP(CMyGinaApp, CWinApp)
//{{AFX_MSG_MAP(CMyGinaApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
////////////////////////////////////////////// CMyGinaApp construction
CMyGinaApp::CMyGinaApp()
{
 // 初始化各變量
 hMsDll = NULL;
 MyWlxNegotiate = NULL;
 MyWlxInitialize = NULL;
 MyWlxActivateUserShell = NULL;
 MyWlxDisplayLockedNotice = NULL;
 MyWlxDisplaySASNotice = NULL;
 MyWlxDisplayStatusMessage = NULL;
 MyWlxGetStatusMessage = NULL;
 MyWlxIsLockOk = NULL;
 MyWlxIsLogoffOk = NULL;
 MyWlxLoggedOnSAS = NULL;
 MyWlxLoggedOutSAS = NULL;
 MyWlxLogoff = NULL;
 MyWlxNetworkProviderLoad = NULL;
 MyWlxRemoveStatusMessage = NULL;
 MyWlxScreenSaverNotify = NULL;
 MyWlxShutdown = NULL;
 MyWlxStartApplication = NULL;
 MyWlxWkstaLockedSAS = NULL;
}

CMyGinaApp theApp;

BOOL CMyGinaApp::InitInstance()
{
 // 得到默認的gina dll
 if (hMsDll == NULL)
 {
  hMsDll = ::LoadLibrary("msgina.dll");
 }
 // 導入各個(gè)接口函數
 if (hMsDll != NULL)
 {
  MyWlxNegotiate= (NEGOTIATE) GetProcAddress(hMsDll,"WlxNegotiate");
  MyWlxInitialize= (INITIALIZE) GetProcAddress(hMsDll,"WlxInitialize");
  MyWlxActivateUserShell= (ACTIVATE_USHELL)GetProcAddress(hMsDll,"WlxActivateUserShell");
  MyWlxDisplayLockedNotice= (PARAM_PVOID)GetProcAddress(hMsDll,"WlxDisplayLockedNotice");
  MyWlxDisplaySASNotice= (PARAM_PVOID)GetProcAddress(hMsDll,"WlxDisplaySASNotice");
  MyWlxDisplayStatusMessage= (DISP_STATUS)GetProcAddress(hMsDll,"WlxDisplayStatusMessage");
  MyWlxGetStatusMessage= (GET_STATUS)GetProcAddress(hMsDll,"WlxGetStatusMessage");
  MyWlxIsLockOk= (PARAM_PVOID)GetProcAddress(hMsDll,"WlxIsLockOk");
  MyWlxIsLogoffOk= (PARAM_PVOID)GetProcAddress(hMsDll,"WlxIsLogoffOk");
  MyWlxLoggedOnSAS= (LOGON_SAS)GetProcAddress(hMsDll,"WlxLoggedOnSAS");
  MyWlxLoggedOutSAS= (LOGOUT_SAS)GetProcAddress(hMsDll,"WlxLoggedOutSAS");
  MyWlxLogoff= (PARAM_PVOID) GetProcAddress(hMsDll,"WlxLogoff");
  MyWlxNetworkProviderLoad= (NETWORK_LOAD)GetProcAddress(hMsDll,"WlxNetworkProviderLoad");
  MyWlxRemoveStatusMessage= (PARAM_PVOID)GetProcAddress(hMsDll,"WlxRemoveStatusMessage");
  MyWlxScreenSaverNotify= (SCR_SAVER)GetProcAddress(hMsDll,"WlxScreenSaverNotify");
  MyWlxShutdown= (SHUT_DOWN)GetProcAddress(hMsDll,"WlxShutdown");
  MyWlxStartApplication= (START_APP)GetProcAddress(hMsDll,"WlxStartApplication");
  MyWlxWkstaLockedSAS= (LOCKED_SAS)GetProcAddress(hMsDll,"WlxWkstaLockedSAS");
 }
 return CWinApp::InitInstance();
}

int CMyGinaApp::ExitInstance()
{
 if (hMsDll != NULL)
 {
  ::FreeLibrary(hMsDll);//卸載動(dòng)態(tài)鏈接庫;
  hMsDll = NULL;
 }
 return CWinApp::ExitInstance();
}
////////////////////////////////////////////消息處理函數的實(shí)現;
#include "StdAfx.h"
#include "MyGina.h"
// Winlogon.exe調用的gina dll中的第一個(gè)函數
// 使gina dll確認是否支持當前版本的Winlogon.exe
// 傳遞給winlogon.exe需要那個(gè)版本的接口函數
BOOL WINAPI WlxNegotiate(DWORD dwWinLogonVersion, PDWORD pdwDllVersion)
{
 return theApp.MyWlxNegotiate(dwWinLogonVersion,pdwDllVersion);
}

// 初始化,winlogon.exe向gina dll傳遞需要版本的接口函數分配表
BOOL WINAPI WlxInitialize(LPWSTR lpWinsta,HANDLE hWlx,PVOID pvReserved,PVOID pWinlogonFunctions,PVOID * pWlxContext)
{
 return theApp.MyWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,pWlxContext);
}

// 用戶(hù)登陸成功后,Winlogon.exe調用該函數啟動(dòng)用戶(hù)外殼程序
BOOL WINAPI WlxActivateUserShell(PVOID pWlxContext,PWSTR pszDesktopName,PWSTR pszMprLogonScript,PVOID pEnvironment)
{
 return theApp.MyWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);
}

// 當系統處于鎖定狀態(tài)時(shí),Winlogon.exe調用該函數
// 顯示一些信息,如鎖定者、鎖定時(shí)間等
VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
{
 theApp.MyWlxDisplayLockedNotice(pWlxContext);
}

// 當沒(méi)有任何用戶(hù)登陸時(shí),Winlogon.exe調用該函數顯示一些提示信息
// 可以根據用戶(hù)的動(dòng)作模擬SAS事件的發(fā)送
VOID WINAPI WlxDisplaySASNotice(PVOID pWlxContext)
{
 theApp.MyWlxDisplaySASNotice(pWlxContext);
}

// 當gina dll要顯示一些信息時(shí),Winlogon.exe調用該函數
// 直接返回TRUE表示信息已經(jīng)顯示
BOOL WINAPI WlxDisplayStatusMessage(PVOID pWlxContext,
HDESK hDesktop,
DWORD dwOptions,
PWSTR pTitle,
PWSTR pMessage)
{
 return theApp.MyWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);
 // return TRUE;
}

// Winlogon.exe調用該函數得到gina dll顯示的狀態(tài)信息
// 直接返回TRUE表示信息已經(jīng)接收
BOOL WINAPI WlxGetStatusMessage(PVOID pWlxContext,
DWORD *pdwOptions,
PWSTR pMessage,
DWORD dwBufferSize)
{
 return theApp.MyWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);
 // return TRUE;
}

// 在試圖鎖定工作站之前Winlogon.exe調用該函數,判斷是否可以鎖定
// 直接返回FALSE表示不能鎖定
BOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
{
 return theApp.MyWlxIsLockOk(pWlxContext);
 // return FALSE;
}

// 在試圖注銷(xiāo)時(shí)Winlogon.exe調用該函數,判斷能否注銷(xiāo)
// 直接返回FALSE表示不能注銷(xiāo)
BOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext)
{
 return theApp.MyWlxIsLogoffOk(pWlxContext);
 // return FALSE;
}

// 當系統處于登陸成功,沒(méi)有鎖定的狀態(tài)下
// Winlogon接收到SAS事件,于是調用該函數
// 現屏蔽所有事件,直接返回
int WINAPI WlxLoggedOnSAS(PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved)
{
 return WLX_SAS_ACTION_NONE;
}

// 在沒(méi)有任何一個(gè)用戶(hù)登陸的情況下,Winlogon.exe接收到SAS事件調用該函數
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
 return theApp.MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,
  pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
}

// Winlogon.exe調用該函數,通知gina dll用戶(hù)注銷(xiāo)操作
// 允許gina dll做出相應的處理
VOID WINAPI WlxLogoff(PVOID pWlxContext)
{
 theApp.MyWlxLogoff(pWlxContext);
}

// Winlogon.exe調用該函數收集有效的認證信息
// 返回TRUE表示用戶(hù)被識別
BOOL WINAPI WlxNetworkProviderLoad(PVOID pWlxContext,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
{
 return theApp.MyWlxNetworkProviderLoad(pWlxContext,pNprNotifyInfo);
 // return TRUE;
}

// Winlogon.exe調用該函數,告訴gina dll停止顯示狀態(tài)信息
// 直接返回TRUE表示信息已經(jīng)刪除
BOOL WINAPI WlxRemoveStatusMessage(PVOID pWlxContext)
{
 return theApp.MyWlxRemoveStatusMessage(pWlxContext);
 // return TRUE;
}

// 在屏保程序啟動(dòng)前一瞬Winlogon.exe調用該函數,允許gina dll同屏保程序交互
// 返回FALSE表示屏保程序不能啟動(dòng)
BOOL WINAPI WlxScreenSaverNotify(PVOID pWlxContext, BOOL *pSecure)
{
 return theApp.MyWlxScreenSaverNotify(pWlxContext,pSecure);
}

// 在系統關(guān)閉之前,Winlogon.exe調用該函數
// 允許gina dll處理一些系統關(guān)閉前的處理
VOID WINAPI WlxShutdown(PVOID pWlxContext, DWORD ShutdownType)
{
 theApp.MyWlxShutdown(pWlxContext,ShutdownType);
}

// 當系統要求在用戶(hù)上下文中啟動(dòng)程序,Winlogon.exe調用該函數
// 這種情況發(fā)生在:瀏覽器非正常關(guān)閉需要重啟或需要啟動(dòng)擴展的任務(wù)管理器
// 該接口gina dll可以選擇性實(shí)現
BOOL WINAPI WlxStartApplication(PVOID pWlxContext,PWSTR pszDesktopName,PVOID pEnvironment,PWSTR pszCmdLine)
{
 return theApp.MyWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);
}

// 在鎖定狀態(tài)下,Winlogon.exe接收到SAS事件調用該函數
int WINAPI WlxWkstaLockedSAS(PVOID pWlxContext, DWORD dwSasType)
{
 return theApp.MyWlxWkstaLockedSAS(pWlxContext,dwSasType);
}
四、小結

本實(shí)例介紹了如何通過(guò)自定義一個(gè)DLL文件來(lái)屏蔽Windows2000下Ctrl+Alt+Del鍵的方法,對于讀者朋友了解Windows的內幕性知識是有幫助的,當然,屏蔽Ctrl+Alt+Del鍵的方法不止這一種,本實(shí)例只是起一個(gè)拋磚引玉,開(kāi)拓思路的作用。

 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Gina Dll
Windows核心編程:DLL注入和API攔截
通過(guò)ZwSetSystemInformation和ZwLoadDriver加載驅動(dòng)
根據序號 調用dll函數
調用未公開(kāi)的API函數的方法
C基礎語(yǔ)法梳理:Windows的動(dòng)態(tài)鏈接庫
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久