VC实现windows系统强制关机重启和注销功能的源码

将内容过程中经常用的内容段收藏起来,下面资料是关于VC实现windows系统强制关机重启和注销功能的的内容,应该对码农也有帮助。

#ifndef __H_SHUTDOWN_H__

#define __H_SHUTDOWN_H__

typedef enum _SHUTDOWN_ACTION

{

    ShutdownNoReboot,

    ShutdownReboot,

    ShutdownPowerOff

} SHUTDOWN_ACTION;

            IN SYSTEM_POWER_STATE MinSystemState,

            IN ULONG Flags);

class KsSystemDown

{

protected:

    HMODULE hNtdll;

    TOKEN_PRIVILEGES tkp;

    HANDLE hToken;

    lpNtShutdownSystem NtShutdownSystem;

    lpNtSetSystemPowerState NtSetSystemPowerState;

public:

    BOOL SystemShutdown(SHUTDOWN_ACTION action)

    {

        if (!NtShutdownSystem)

            return FALSE;

        DWORD dwRet = NtShutdownSystem(action);

        if (dwRet == 0)

            return TRUE;

        else

            return FALSE;

    }

    BOOL SystemPowerdown(IN POWER_ACTION SystemAction,IN SYSTEM_POWER_STATE MinSystemState,IN ULONG Flags)

    {

        if (!NtSetSystemPowerState)

            return FALSE;

        DWORD dwRet = NtSetSystemPowerState(SystemAction,MinSystemState,Flags);

        if (dwRet == 0)

            return TRUE;

        else

            return FALSE;

    }

    BOOL CommonLogoff()

    {

        return Shutdown(EWX_LOGOFF);

    }

    BOOL CommonShutdown()

    {

        return Shutdown((EWX_POWEROFF|EWX_SHUTDOWN));

    }

    BOOL CommonReBoot()

    {

        return Shutdown(EWX_REBOOT);

    }

    BOOL FastLogoff()

    {

        return Shutdown(EWX_LOGOFF|EWX_FORCE);

    }

    BOOL FastShutdown()

    {

        return Shutdown(EWX_POWEROFF|EWX_SHUTDOWN|EWX_FORCE);

    }

    BOOL FastReboot()

    {

        return Shutdown(EWX_REBOOT|EWX_FORCE);

    }

    BOOL Shutdown(DWORD dwValue)

    {

        return ExitWindowsEx(dwValue,0);

    }

    BOOL SuperShutdown()

    {

        if (NtShutdownSystem != NULL)

            return NtShutdownSystem(ShutdownNoReboot);

        else

            return FALSE;

    }

    BOOL SuperReboot()

    {

        if (NtShutdownSystem != NULL)

            return NtShutdownSystem(ShutdownReboot);

        else

            return FALSE;

    }

public:

    KsSystemDown():

      NtShutdownSystem(NULL),NtSetSystemPowerState(NULL)

      {

          OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken);

          LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

          tkp.PrivilegeCount = 1;

          tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

          AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);

          CloseHandle(hToken);

          hNtdll = GetModuleHandle("ntdll.dll");

          if (hNtdll)

          {

              NtShutdownSystem = (lpNtShutdownSystem)GetProcAddress(hNtdll,"NtShutdownSystem");

              NtSetSystemPowerState = (lpNtSetSystemPowerState)GetProcAddress(hNtdll,"NtSetSystemPowerState");

          }

      }

      ~KsSystemDown()

      {

          tkp.Privileges[0].Attributes = 0;

          AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);

      }

};

#endif

你可能感兴趣的:(VC实现windows系统强制关机重启和注销功能的源码)