Link to home
Start Free TrialLog in
Avatar of sraab2004
sraab2004

asked on

disable ctrl+alt+del

Iwant delphi code to disable ctrl+alt+del and alt+F4 and any method used to close running programms for all windows(include win 2000) .  
ASKER CERTIFIED SOLUTION
Avatar of DragonSlayer
DragonSlayer
Flag of Malaysia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of knightmad
knightmad

 hi .... to disable Ctrl_Alt_Del isn't possible (on WinNT based systems) unless you replace the Windows GINA. Take a look at http://geocities.yahoo.com.br/armlessjohn/Hidden_Resources.html, there is a couple of good source codes to help you to program this ...
it is possible, knightmad, check my link above ;-)
DragonSlayer: I did checked it : ) Last year, I wrote a couple of sources related to this subject (disabling Alt+Tab, Win Keys, Ctrl+Esc and so forth) and, except for Ctrl+Alt+del thing, the code I wrote was borrowed from that site you posted the link : ) , all I did was to convert the source from C++ to Delphi. And, although you can detect Ctrl+Alt+Del using a LowLevel keyboard hook, you cannot avoid that the Task Manager being shown, unless you turn on that registry key, having that annoying message ; )
So, I borrowed (again) some code from Jedi's site and adapted it to really disable the Ctrl+Alt+Del thing, having no message (well, it still have an annoting flickering, but it is acceptable)
Both source code and binaries are avaliable in that link I posted, because this is one of the most Frequent Asked Questions here in EE : ) We both were in a question like this months ago, and we answered exactly the same things there lol

sraab2004: take a look at these links, they are PAQ annd may help : )

https://www.experts-exchange.com/questions/20728852/Disable-Alt-Tab.html

https://www.experts-exchange.com/questions/20598492/Keyboard-hook-or-MSGina-dll.html

yup... deja vu all the time ;-)

wonder why some of the people who post questions never do a search first? Hmm...
/**************************************************************/
// Filename: Main.c
// Author  : sima huapeng
// Time    : 2002-10-13
// GINA    : Graphical Identification and Authentication
// SAS     : Secure Attention Sequence
/**************************************************************/

//10/13
// 实现自定义gina接口,设计与winlogon.exe的交互
// 开发原理:依赖Microsoft默认的gina dll:msgina.dll,在本dll中
// 导入msgina.dll导出的接口,在本dll的导出接口中,保持大部分接
// 口与msgina.dll操作的一致性,改变WlxLoggedOnSAS接口的响应,使
// 系统在登陆成功的状态下,根据设置,去定是否响应Ctrl+Alt+Del.
// 在启动后,按CTRL_ALT_DEL,系统会调用WlxLoggedOnSAS!
// 将这个DLL拷到system32目录下,并在注册表中加入:
// \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
// 加一个GinaDLL,类型RegSZ, 内容为你的dll名,如:'myGina.dll'.
// 重起机器,系统就会使用你的dll,GINA可以实现很多东西,值得研究!
// 按下CTRL+ALT+DEL屏幕会闪一下,那是因为屏幕从Winsta0转到Desktop!
// 必须要用unicode,如果改了后启动不了,请将msgina.dll拷贝成你的dll,再启动!

//10/15
// 为了保护本Gina,本程序在退出时,应检测注册表

//10/16
// 暂时使用注册表通信

#define UNICODE
#include <windows.h>
#include <Winwlx.h>
#include <dbt.h>
#include "main.h"
#include "resource.h"


#define _DEBUG            //&#26159;&#21542;&#35760;&#24405;&#26085;&#24535;

#define ID_TIMER    32767

HINSTANCE myHandle    = NULL;
HANDLE    hGlobalWlx  = NULL;
HANDLE    hf          = NULL;
PVOID     g_pWinlogon = NULL;

void WriteInfo(const char * buf);   //&#26085;&#24535;&#32426;&#24405;
void LockWS(void);                  //&#38145;&#23450;&#31995;&#32479;
BOOL SetRegFlag(void);                        //&#21152;&#20837;&#27880;&#20876;&#34920;
BOOL GetUsbFlag(void);              //&#35835;&#21462;USB&#28040;&#24687;,&#22914;&#26524;&#25104;&#21151;&#21017;&#23558;&#28040;&#24687;&#22797;&#20301;

//-------------------------------------------------------------------------------------------
// &#21521;&#22806;&#36755;&#20986;&#26085;&#24535;&#20449;&#24687;
void WriteInfo(const char * buf)
{
      #ifdef _DEBUG

      DWORD dwRt;
      int i = 0;
      if (hf != INVALID_HANDLE_VALUE){
            while (TRUE){
                  if (!buf[i])
                        break;
                  else
                        i++;
            }
            i++;
            WriteFile(hf, buf, i, &dwRt, NULL);
      }

      #endif
}

//-------------------------------------------------------------------------------------------
// &#38145;&#23450;&#31995;&#32479;
void LockWS(void)
{
  HINSTANCE hlib = LoadLibrary(L"user32.dll");

  if( hlib != NULL ) {
    typedef BOOL (*LWS)(VOID);
    LWS fnLockWorkStation = (LWS) GetProcAddress(hlib,"LockWorkStation");
    if( fnLockWorkStation != NULL ) fnLockWorkStation();
    FreeLibrary(hlib);
  }
}

//-------------------------------------------------------------------------------------------
// &#35835;&#21462;&#26631;&#24535;&#20301;
BOOL GetUsbFlag(void)
{
   HKEY hKey = NULL;
   DWORD mSubKey;
   DWORD mType  = REG_DWORD;
   DWORD dwLen  = sizeof(DWORD)+4;
   DWORD mRegValue;
   BOOL bRet = FALSE;
   if ( RegCreateKeyEx( HKEY_LOCAL_MACHINE,
                         L"Software\\Lanseal\\PAK",
                                 0, L"", 0, KEY_ALL_ACCESS, NULL,
                                 &hKey, &mRegValue ) == ERROR_SUCCESS )
   {
        if ( RegQueryValueEx( hKey, L"FLAG",
                                NULL, &mType,
                                          (LPBYTE)&mSubKey, &dwLen) == ERROR_SUCCESS )
        {
         if (mSubKey > 0)
             {
               mRegValue = 0;
               if (RegSetValueEx(hKey, L"FLAG",
                                   0L, REG_DWORD,
                                         (LPBYTE)&mRegValue, sizeof(DWORD) ) == ERROR_SUCCESS)
                     bRet = TRUE;
             }       
        }
   }
   RegCloseKey(hKey);
   
   return bRet;
};

//-------------------------------------------------------------------------------------------
// &#21152;&#20837;&#27880;&#20876;&#34920;                        
BOOL SetRegFlag(void)
{
   HKEY hKey = NULL;
   UCHAR szBuf[80];
   BOOL bRet = TRUE;

   if (RegCreateKey(HKEY_LOCAL_MACHINE,
         TEXT("\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"), &hKey))
   {
         bRet=FALSE;
   };

   strcpy(szBuf, "%SystemRoot%\\System32\\lsGina.dll");

   if (RegSetValueEx(hKey,            // subkey handle
            TEXT("ginadll"),              // value name
            0,                        // must be zero
            REG_EXPAND_SZ,            // value type
            (LPBYTE) szBuf,           // pointer to value data
            strlen(szBuf) + 1))       // length of value data
   {
       bRet=FALSE;    
   }

   RegCloseKey(hKey);
   return bRet;
};

//-------------------------------------------------------------------------------------------
// &#20027;&#20989;&#25968;&#30340;&#20837;&#21475;
BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
  )
{
      switch (fdwReason){
      case DLL_PROCESS_ATTACH:
            hf = CreateFile(L"c:\\gina.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
            
            WriteInfo("start 1.3 \r\n");            // &#26174;&#31034;&#21152;&#36733;&#30340;&#29256;&#26412;

            myHandle = hinstDLL;                        

            if (LoadMsGina()){
                  WriteInfo("Init gina ok \r\n");
            }
            else
                  WriteInfo("Init gina false \r\n");

            break;
      case DLL_PROCESS_DETACH:
            ReleaseMsGina();

            WriteInfo("release gina ok \r\n");
            
            if (hf != INVALID_HANDLE_VALUE){
                  CloseHandle(hf);
            }
            break;
      }

      return TRUE;
}

//-------------------------------------------------------------------------------------------
// &#29992;&#25143;&#30331;&#38470;&#25104;&#21151;&#21518;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#21551;&#21160;&#29992;&#25143;&#22806;&#22771;&#31243;&#24207;
BOOL WINAPI WlxActivateUserShell (
  PVOID pWlxContext,
  PWSTR pszDesktopName,
  PWSTR pszMprLogonScript,
  PVOID pEnvironment)
{
      WriteInfo("WlxActivateUserShell \r\n");

      LockWS();                               // &#30331;&#38470;&#25104;&#21151;&#21518;&#65292;&#24320;&#22987;&#39564;&#35777;&#36523;&#20221;

      return prcWlxActivateUserShell (
                          pWlxContext,
                          pszDesktopName,
                          pszMprLogonScript,
                          pEnvironment);
}

//-------------------------------------------------------------------------------------------
// &#24403;&#27809;&#26377;&#20219;&#20309;&#29992;&#25143;&#30331;&#38470;&#26102;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#26174;&#31034;&#19968;&#20123;&#25552;&#31034;&#20449;&#24687;
// &#21487;&#20197;&#26681;&#25454;&#29992;&#25143;&#30340;&#21160;&#20316;&#27169;&#25311;SAS&#20107;&#20214;&#30340;&#21457;&#36865;
VOID WINAPI WlxDisplaySASNotice (
  PVOID pWlxContext)
{
      prcWlxDisplaySASNotice(pWlxContext);
}

//-------------------------------------------------------------------------------------------
// &#21021;&#22987;&#21270;&#65292;winlogon.exe&#21521;gina dll&#20256;&#36882;&#38656;&#35201;&#29256;&#26412;&#30340;&#25509;&#21475;&#20989;&#25968;&#20998;&#37197;&#34920;
BOOL WINAPI WlxInitialize (
  LPWSTR  lpWinsta,
  HANDLE  hWlx,
  PVOID   pvReserved,
  PVOID   pWinlogonFunctions,
  PVOID * pWlxContext)
{
    hGlobalWlx = hWlx;                              
      g_pWinlogon = pWinlogonFunctions;

      return prcWlxInitialize (
              lpWinsta,
              hWlx,
              pvReserved,
              pWinlogonFunctions,
              pWlxContext);
}

//-------------------------------------------------------------------------------------------
// &#24403;&#31995;&#32479;&#22788;&#20110;&#30331;&#38470;&#25104;&#21151;&#65292;&#27809;&#26377;&#38145;&#23450;&#30340;&#29366;&#24577;&#19979;
// Winlogon&#25509;&#25910;&#21040;SAS&#20107;&#20214;&#65292;&#20110;&#26159;&#35843;&#29992;&#35813;&#20989;&#25968;
// &#29616;&#26681;&#25454;&#35774;&#32622;&#23631;&#34109;&#25152;&#26377;&#20107;&#20214;&#65292;&#30452;&#25509;&#36820;&#22238;
int WINAPI WlxLoggedOnSAS (
  PVOID pWlxContext,
  DWORD dwSasType,
  PVOID pReserved)
{      
   HANDLE hMutex;
   WriteInfo("WlxLoggedOnSAS \r\n");
   
   //&#23631;&#34109;CTRL_ALT_DEL,&#20063;&#21487;&#20197;&#26681;&#25454;&#29305;&#23450;&#26465;&#20214;&#26469;&#20915;&#23450;&#26159;&#21542;&#35201;&#23631;&#34109;
   if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL ||
         dwSasType == WLX_SAS_TYPE_USER_LOGOFF ||
         dwSasType == WLX_SAS_TYPE_SCRNSVR_TIMEOUT ||
         dwSasType == WLX_SAS_TYPE_TIMEOUT ||
         dwSasType == WLX_SAS_TYPE_SWITCHUSER)
   {
         //&#25105;&#37319;&#29992;&#20102;Mutex&#26469;&#25511;&#21046;&#26159;&#21542;&#23631;&#34109;&#65292;&#65288;&#27880;&#24847;:&#35201;&#29992;unicode)
         hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"LANSEAL_CTRL_ALT_DEL");
         if (hMutex)
         {
               CloseHandle(hMutex);
               WriteInfo("disble CTRL+ALT+DEL \r\n");
               return WLX_SAS_ACTION_NONE;              //&#36820;&#22238;&#23601;&#26159;&#36864;&#20986;
         }
         else
               WriteInfo("not disble CTRL+ALT+DEL \r\n");
   }
   
   return      prcWlxLoggedOnSAS (
         pWlxContext,
         dwSasType,
         pReserved);
}

//-------------------------------------------------------------------------------------------
// &#22312;&#27809;&#26377;&#20219;&#20309;&#19968;&#20010;&#29992;&#25143;&#30331;&#38470;&#30340;&#24773;&#20917;&#19979;&#65292;Winlogon.exe&#25509;&#25910;&#21040;SAS&#20107;&#20214;&#35843;&#29992;&#35813;&#20989;&#25968;
int WINAPI WlxLoggedOutSAS (
  PVOID                pWlxContext,
  DWORD                dwSasType,
  PLUID                pAuthenticationId,
  PSID                 pLogonSid,
  PDWORD               pdwOptions,
  PHANDLE              phToken,
  PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
  PVOID *              pProfile)
{
    WriteInfo("WlxLoggedOutSAS \r\n");

    return prcWlxLoggedOutSAS (
        pWlxContext,
        dwSasType,
        pAuthenticationId,
        pLogonSid,
        pdwOptions,
        phToken,
        pMprNotifyInfo,
        pProfile);
}

//-------------------------------------------------------------------------------------------
// Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#65292;&#36890;&#30693;gina dll&#29992;&#25143;&#27880;&#38144;&#25805;&#20316;
// &#20801;&#35768;gina dll&#20570;&#20986;&#30456;&#24212;&#30340;&#22788;&#29702;
VOID WINAPI WlxLogoff (PVOID pWlxContext)
{
   WriteInfo("WlxLogoff \r\n");
   prcWlxLogoff(pWlxContext);
}

//-------------------------------------------------------------------------------------------
// Winlogon.exe&#35843;&#29992;&#30340;gina dll&#20013;&#30340;&#31532;&#19968;&#20010;&#20989;&#25968;
// &#20351;gina dll&#30830;&#35748;&#26159;&#21542;&#25903;&#25345;&#24403;&#21069;&#29256;&#26412;&#30340;Winlogon.exe
// &#20256;&#36882;&#32473;winlogon.exe&#38656;&#35201;&#37027;&#20010;&#29256;&#26412;&#30340;&#25509;&#21475;&#20989;&#25968;
BOOL WINAPI WlxNegotiate (
  DWORD  dwWinlogonVersion,
  PDWORD pdwDllVersion)
{
    WriteInfo("WlxNegotiate \r\n");
      return prcWlxNegotiate (
               dwWinlogonVersion,
               pdwDllVersion);
}

//-------------------------------------------------------------------------------------------
// &#22312;&#23631;&#20445;&#31243;&#24207;&#21551;&#21160;&#21069;&#19968;&#30636;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#65292;&#20801;&#35768;gina dll&#21516;&#23631;&#20445;&#31243;&#24207;&#20132;&#20114;
// &#36820;&#22238;FALSE&#34920;&#31034;&#23631;&#20445;&#31243;&#24207;&#19981;&#33021;&#21551;&#21160;
BOOL WINAPI WlxScreenSaverNotify (
  PVOID  pWlxContext,
  BOOL  *pSecure)
{
      WriteInfo("WlxScreenSaverNotify \r\n");
      return prcWlxScreenSaverNotify (
               pWlxContext,
               pSecure);
}

//-------------------------------------------------------------------------------------------
// &#22312;&#31995;&#32479;&#20851;&#38381;&#20043;&#21069;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;
// &#20801;&#35768;gina dll&#22788;&#29702;&#19968;&#20123;&#31995;&#32479;&#20851;&#38381;&#21069;&#30340;&#22788;&#29702;
VOID WINAPI WlxShutdown(
  PVOID pWlxContext,
  DWORD ShutdownType)
{
      WriteInfo("WlxShutdown \r\n");
      
    SetRegFlag();                  // &#25105;&#20204;&#22312;&#20851;&#38381;&#21069;&#27880;&#20876;&#33258;&#24049;&#65292;&#36825;&#26159;&#19968;&#31181;&#20445;&#25252;&#31574;&#30053;

      prcWlxShutdown(pWlxContext, ShutdownType);
}

//-------------------------------------------------------------------------------------------
// &#24403;&#31995;&#32479;&#35201;&#27714;&#22312;&#29992;&#25143;&#19978;&#19979;&#25991;&#20013;&#21551;&#21160;&#31243;&#24207;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;
// &#36825;&#31181;&#24773;&#20917;&#21457;&#29983;&#22312;&#65306;&#27983;&#35272;&#22120;&#38750;&#27491;&#24120;&#20851;&#38381;&#38656;&#35201;&#37325;&#21551;&#25110;&#38656;&#35201;&#21551;&#21160;&#25193;&#23637;&#30340;&#20219;&#21153;&#31649;&#29702;&#22120;
// &#35813;&#25509;&#21475;gina dll&#21487;&#20197;&#36873;&#25321;&#24615;&#23454;&#29616;
BOOL WINAPI WlxStartApplication (
  PVOID pWlxContext,
  PWSTR pszDesktopName,
  PVOID pEnvironment,
  PWSTR pszCmdLine)
{
      WriteInfo("WlxStartApplication \r\n");
      return prcWlxStartApplication (
                    pWlxContext,
                    pszDesktopName,
                    pEnvironment,
                    pszCmdLine);
}

//-------------------------------------------------------------------------------------------
// &#22312;&#38145;&#23450;&#29366;&#24577;&#19979;&#65292;Winlogon.exe&#25509;&#25910;&#21040;SAS&#20107;&#20214;&#35843;&#29992;&#35813;&#20989;&#25968;
// &#22312;&#36825;&#37324;&#36820;&#22238;&#26080;&#25928;&#20449;&#24687;&#65292;&#21017;&#21487;&#20197;&#23631;&#34109;&#38145;&#23450;&#29366;&#24577;&#19979;&#30340;&#28040;&#24687;
int WINAPI WlxWkstaLockedSAS (
  PVOID pWlxContext,
  DWORD dwSasType
)
{
      WriteInfo("WlxWkstaLockedSAS \r\n");
      return prcWlxWkstaLockedSAS (
               pWlxContext,
               dwSasType
            );
}

//-------------------------------------------------------------------------------------------
// &#21152;&#20837;&#26085;&#26399;&#65306;10&#26376;13&#26085;&#19979;&#21320;18:28
// &#20462;&#25913;&#26085;&#26399;&#65306;10&#26376;14&#26085;&#19978;&#21320;10:05
int CALLBACK LockedOffDlgProc(
   HWND        hDlg,
   UINT        Message,
   WPARAM      wParam,
   LPARAM      lParam)
{
   RECT rcDlg;
   int cx, cy;

   switch (Message){
        case WM_INITDIALOG:                              //&#31383;&#21475;&#30340;&#21021;&#22987;&#21270;
            WriteInfo("WM_INITDIALOG \r\n");

                  GetWindowRect(hDlg, &rcDlg);                         //&#24471;&#21040;&#31383;&#21475;&#21306;&#22495;
            cx = GetSystemMetrics(SM_CXSCREEN);          //&#24471;&#21040;&#23631;&#24149;&#23485;&#24230;
            cy = GetSystemMetrics(SM_CYSCREEN);          //&#24471;&#21040;&#23631;&#24149;&#39640;&#24230;
           
                  cx = (cx-(rcDlg.right-rcDlg.left)) / 2;      //&#35745;&#31639;&#23621;&#20013;&#20301;&#32622;
                  cy = (cy-(rcDlg.bottom-rcDlg.top)) / 2;
 
                  SetWindowPos(hDlg,                           //&#35774;&#32622;&#31383;&#21475;&#23621;&#20013;
                        HWND_TOP,
                        cx, cy,                                  //&#31383;&#21475;&#30340;&#20301;&#32622;&#22352;&#26631;
                        0, 0,                                                       // ignores size arguments
                        SWP_NOSIZE);

                  SetTimer(hDlg,             // handle to main window
                        ID_TIMER,              // timer identifier
                        1000,                  // five-minute interval
                        (TIMERPROC) NULL);     // no timer callback

            return( TRUE );
                  break;
            case WM_TIMER:
                  if (GetUsbFlag())
                  {
                    WriteInfo("WM_GET_USB_TRUE \r\n");
                    KillTimer(hDlg, ID_TIMER);
              EndDialog(hDlg, WLX_SAS_ACTION_LOCK_WKSTA);
              return( TRUE );
                  }
   }
   return( FALSE );
}

//-------------------------------------------------------------------------------------------
// &#20462;&#25913;&#26085;&#26399;&#65306;10&#26376;13&#26085;&#19979;&#21320;17:58
// &#24403;&#31995;&#32479;&#22788;&#20110;&#38145;&#23450;&#29366;&#24577;&#26102;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;
// &#26174;&#31034;&#19968;&#20123;&#20449;&#24687;&#65292;&#22914;&#38145;&#23450;&#32773;&#12289;&#38145;&#23450;&#26102;&#38388;&#31561;
VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
{
      int hDlgRet;
      
      hDlgRet = ((PWLX_DISPATCH_VERSION_1_3) g_pWinlogon)->
                        WlxDialogBoxParam(hGlobalWlx, myHandle,(unsigned short *)
                        MAKEINTRESOURCE(IDD_DIALOGMAIN),NULL,LockedOffDlgProc,0);
   
      if (hDlgRet==-1)
      {
       prcWlxDisplayLockedNotice(pWlxContext);
      }

      WriteInfo("WlxDisplayLockedNotice \r\n");
}

//-------------------------------------------------------------------------------------------
// &#24403;gina dll&#35201;&#26174;&#31034;&#19968;&#20123;&#20449;&#24687;&#26102;&#65292;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;
// &#30452;&#25509;&#36820;&#22238;TRUE&#34920;&#31034;&#20449;&#24687;&#24050;&#32463;&#26174;&#31034;
BOOL WINAPI WlxDisplayStatusMessage(
  PVOID pWlxContext,
  HDESK hDesktop,
  DWORD dwOptions,
  PWSTR pTitle,
  PWSTR pMessage
  )
{
      return prcWlxDisplayStatusMessage(
                    pWlxContext,
                    hDesktop,
                    dwOptions,
                    pTitle,
                    pMessage);
}

//-------------------------------------------------------------------------------------------
// Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#24471;&#21040;gina dll&#26174;&#31034;&#30340;&#29366;&#24577;&#20449;&#24687;
// &#30452;&#25509;&#36820;&#22238;TRUE&#34920;&#31034;&#20449;&#24687;&#24050;&#32463;&#25509;&#25910;
BOOL WINAPI WlxGetStatusMessage(
  PVOID pWlxContext,
  DWORD *pdwOptions,
  PWSTR pMessage,
  DWORD dwBufferSize
)
{
      WriteInfo("WlxGetStatusMessage \r\n");
      return prcWlxGetStatusMessage(
                    pWlxContext,
                    pdwOptions,
                    pMessage,
                    dwBufferSize
                  );
}

//-------------------------------------------------------------------------------------------
// &#22312;&#35797;&#22270;&#38145;&#23450;&#24037;&#20316;&#31449;&#20043;&#21069;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#65292;&#21028;&#26029;&#26159;&#21542;&#21487;&#20197;&#38145;&#23450;
// &#30452;&#25509;&#36820;&#22238;FALSE&#34920;&#31034;&#19981;&#33021;&#38145;&#23450;
BOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
{
      return prcWlxIsLockOk(pWlxContext);      
}

//-------------------------------------------------------------------------------------------
// &#22312;&#35797;&#22270;&#27880;&#38144;&#26102;Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#65292;&#21028;&#26029;&#33021;&#21542;&#27880;&#38144;
// &#30452;&#25509;&#36820;&#22238;FALSE&#34920;&#31034;&#19981;&#33021;&#27880;&#38144;
BOOL WINAPI WlxIsLogoffOk(
  PVOID pWlxContext
)
{
      WriteInfo("WlxIsLogoffOk \r\n");
      return prcWlxIsLogoffOk(
                  pWlxContext
      );
}

//-------------------------------------------------------------------------------------------            
// Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#25910;&#38598;&#26377;&#25928;&#30340;&#35748;&#35777;&#20449;&#24687;
// &#36820;&#22238;TRUE&#34920;&#31034;&#29992;&#25143;&#34987;&#35782;&#21035;
BOOL WINAPI WlxNetworkProviderLoad(
  PVOID pWlxContext,
  PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
)
{
      WriteInfo("WlxNetworkProviderLoad \r\n");
      return prcWlxNetworkProviderLoad(
                  pWlxContext,
                  pNprNotifyInfo
      );
}

//-------------------------------------------------------------------------------------------
// Winlogon.exe&#35843;&#29992;&#35813;&#20989;&#25968;&#65292;&#21578;&#35785;gina dll&#20572;&#27490;&#26174;&#31034;&#29366;&#24577;&#20449;&#24687;
// &#30452;&#25509;&#36820;&#22238;TRUE&#34920;&#31034;&#20449;&#24687;&#24050;&#32463;&#21024;&#38500;
BOOL WINAPI WlxRemoveStatusMessage(
  PVOID pWlxContext
)
{
    WriteInfo("WlxRemoveStatusMessage \r\n");
      return prcWlxRemoveStatusMessage(
               pWlxContext
               );
}