'=======================================
' RunAsAdmin
' ----------
' 
' Successfully compiled with PB/CC v4.01
'
' This app does
' 1) start a command session as admin (or any User you like)
' 2) takes its commandline parameters as command for the admin prompt
' 3) leave the command window open (the /K parameter)
'
'=======================================

#COMPILE EXE
#INCLUDE "win32api.inc"

DECLARE FUNCTION CreateProcessWithLogon LIB "ADVAPI32.DLL" ALIAS "CreateProcessWithLogonW" ( _
   BYVAL lpUsername AS DWORD, _
   BYVAL lpDomain AS DWORD, _
   BYVAL lpPassword AS DWORD, _
   BYVAL dwLogonFlags AS DWORD, _
   BYVAL lpApplicationName AS DWORD, _
   BYVAL lpCommandLine AS DWORD, _
   BYVAL dwCreationFlags AS DWORD, _
   BYVAL lpEnvironment AS DWORD, _
   BYVAL lpCurrentDirectory AS DWORD, _
   lpStartupInfo AS STARTUPINFO, _
   lpProcessInfo AS PROCESS_INFORMATION) AS LONG

%LOGON_WITH_PROFILE = &H1

FUNCTION WinErrorMsg (BYVAL ECode AS LONG) AS STRING
   LOCAL Buffer AS ASCIIZ * 255
   FormatMessage %FORMAT_MESSAGE_FROM_SYSTEM, BYVAL %NULL, ECode, %NULL, buffer, SIZEOF(buffer), BYVAL %NULL
   FUNCTION = FORMAT$(ECode, "##### ") & Buffer
END FUNCTION


FUNCTION PBMAIN
    LOCAL UserName         AS STRING
    LOCAL Domain           AS STRING
    LOCAL Passw            AS STRING
    LOCAL ApplicationName  AS STRING
    LOCAL Cmd              AS STRING
    LOCAL j AS LONG
    LOCAL lpStartupInfo AS STARTUPINFO, ProcessInfo AS PROCESS_INFORMATION

    UserName         = UCODE$("administrator")               	'<==== change here
    Domain           = UCODE$("domainname")			'<==== change here	
    Passw            = UCODE$("YourSecretKey")			'<==== change here	

    ApplicationName  = UCODE$("C:\Windows\System32\cmd.exe")	'<==== change here
    Cmd              = UCODE$(" /K ") & UCODE$(COMMAND$)	'<==== change here

    lpStartupInfo.cb = SIZEOF(lpStartupInfo)
    lpStartupInfo.dwFlags = 0&
    lpStartupInfo.wShowWindow = %SW_MINIMIZE

    j = CreateProcessWithLogon( _
      STRPTR(UserName), _
      STRPTR(Domain), _
      STRPTR(Passw), _
      %LOGON_WITH_PROFILE, _
      STRPTR(ApplicationName), _
      STRPTR(Cmd), _
      %CREATE_DEFAULT_ERROR_MODE OR %CREATE_NEW_CONSOLE OR %CREATE_NEW_PROCESS_GROUP, _
      0&, _
      0&, _
      lpStartupInfo, _
      ProcessInfo)

   IF j THEN
      CloseHandle ProcessInfo.hThread
      CloseHandle ProcessInfo.hProcess
   ELSE
      j = GetLastError()
      STDOUT WinErrorMsg(j)
   END IF

END FUNCTION