==for Delphi

ShutDown(dwTimeOut : DWord = 0; bForceClose : Boolean = true; bReboot : Boolean = false) ;
var
  PreviosPrivileges: ^TTokenPrivileges;
  TokenPrivileges: TTokenPrivileges;
  hToken: THandle;
  tmpReturnLength: DWord;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then begin
    if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin
      LookupPrivilegeValue(Nil, 'SeShutdownPrivilege', TokenPrivileges.Privileges[0].Luid); 
      TokenPrivileges.PrivilegeCount := 1;
      TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      tmpReturnLength := 0;
      PreviosPrivileges := nil;
      AdjustTokenPrivileges(hToken, False, TokenPrivileges, 0, PreviosPrivileges^, tmpReturnLength);

      if InitiateSystemShutdown(Nil, Nil, dwTimeOut, bForceClose, bReboot) then begin
        TokenPrivileges.Privileges[0].Attributes := 0;
        AdjustTokenPrivileges(hToken, False, TokenPrivileges, 0, PreviosPrivileges^, tmpReturnLength);
      end ;
    end ;
  end
  else
  ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0);
end ; 


==for C++

void ShutDown( DWORD dwTimeOut /*= 0*/,bool bForceClose /*= true*/, bool bReboot /*= false*/ )
{

    _TOKEN_PRIVILEGES* PreviosPrivileges;
    _TOKEN_PRIVILEGES TokenPrivileges;
    HANDLE hToken;
    DWORD tmpReturnLength;

    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES || TOKEN_QUERY, &hToken))
    {
        LookupPrivilegeValueA(NULL, "SeShutdownPrivilege", &(TokenPrivileges.Privileges[0].Luid));
        TokenPrivileges.PrivilegeCount = 1;
        TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        tmpReturnLength = 0;
        PreviosPrivileges = NULL;
        AdjustTokenPrivileges(hToken, false, &TokenPrivileges, 0, PreviosPrivileges, &tmpReturnLength);

        if (InitiateSystemShutdownA(NULL, NULL, dwTimeOut, bForceClose, bReboot))
        {
            TokenPrivileges.Privileges[0].Attributes = 0;
            AdjustTokenPrivileges(hToken, false, &TokenPrivileges, 0, PreviosPrivileges, &tmpReturnLength);
        }
    }
    else
    {
        ExitWindowsEx(EWX_FORCE || EWX_SHUTDOWN || EWX_POWEROFF, 0);
    }
}