Windows API

BlitzMax Forums/BlitzMax Beginners Area/Windows API

Strict

Framework brl.blitz
Import "-lkernel32"
Import "-ladvapi32"

Extern "Win32"
  'advapi32
  Function OpenProcessToken(ProcessHandle, DesiredAccess, TokenHandle:Byte Ptr)
  Function LookupPrivilegeValue(lpSystemName$z, lpName$z, lpLuid:Byte Ptr) = "LookupPrivilegeValueA@12"
  Function AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges, NewState:Byte Ptr,..
                                BufferLength, PreviousState:Byte Ptr, ReturnLength:Byte Ptr)
  'kernel32
  Function GetCurrentProcess()
  Function SetSystemPowerState(fSuspend, fForce)
  Function GetLastError()                               
End Extern

Const TOKEN_ADJUST_PRIVILEGES = $20
Const TOKEN_QUERY = $8
Const SE_PRIVILEGE_ENABLED = $2


StandBy() ' Bye Bye

End


Function StandBy()
  Local tokenPrivilege[4]
  
  If LookupPrivilegeValue(Null, "SeShutdownPrivilege", Byte Ptr(tokenPrivilege) + 4) = 0
    DebugLog "LookupPrivilegeValue error : " + GetLastError()
    Return
  EndIf
  
  Local hProc = GetCurrentProcess() ' -1
  Local hToken
  
  If OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, Varptr(hToken)) = 0
    DebugLog "OpenProcessToken error : " + GetLastError()
    Return
  EndIf
  
  tokenPrivilege[0] = 1
  tokenPrivilege[3] = SE_PRIVILEGE_ENABLED
    
  If AdjustTokenPrivileges(hToken, False, Byte Ptr(tokenPrivilege), Null, Null, Null) = 0
    DebugLog "AdjustTokenPrivileges error : " + GetLastError()
    Return
  EndIf
  
  If SetSystemPowerState(True, False) = 0
    DebugLog "SetSystemPowerState error : " + GetLastError()
    Return
  EndIf
End Function