• Welcome to Theos PowerBasic Museum 2017.

News:

Attachments are only available to registered users.
Please register using your full, real name.

Main Menu

Example how to run something with "CreateProcessWithLogonW()"

Started by Theo Gottwald, October 31, 2009, 07:21:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Theo Gottwald


DECLARE FUNCTION CreateProcessWithLogonW 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


%X_CJ_LOGON_WITH_PROFILE=1
%X_CJ_CREATE_DEFAULT_ERROR_MODE = &H04000000
'#############################################
'                   RunAsUser for Windows 2000 and Later
'#############################################

FUNCTION RunAsUser(BYVAL UserName AS STRING, _
       BYVAL Password AS STRING, _
       BYVAL DomainName AS STRING, _
       BYVAL CommandLine AS STRING, _
       BYVAL CurrentDirectory AS STRING) AS LONG

   LOCAL si AS STARTUPINFO,pi AS PROCESS_INFORMATION

LOCAL wCurrentDir,wCommandLine,wPassword,wUser,wDomain AS STRING
REGISTER R01 AS LONG,R02 AS LONG

   si.cb = LEN(si)

   wUser = UCODE$(UserName + CHR$(0))
   wDomain = UCODE$(DomainName + CHR$(0))
   wPassword = UCODE$(Password + CHR$(0))
   wCommandLine = UCODE$(CommandLine + CHR$(0))
   wCurrentDir = UCODE$(CurrentDirectory + CHR$(0))

   R01 = CreateProcessWithLogonW(STRPTR(wUser),STRPTR(wDomain),STRPTR(wPassword), _
         %X_CJ_LOGON_WITH_PROFILE, 0&, STRPTR(wCommandLine), _
         %X_CJ_CREATE_DEFAULT_ERROR_MODE, 0&, STRPTR(wCurrentDir), si, pi)
   ' CreateProcessWithLogonW() does not
   IF R01 <> 0 THEN
       CloseHandle pi.hThread
       CloseHandle pi.hProcess
       R02 = 0
   ELSE
       R02 = ERR
       MSGBOX "CreateProcessWithLogonW() failed with error " + ERROR$
   END IF
   FUNCTION=R02
END FUNCTION

FUNCTION PBMAIN () AS LONG
   REGISTER R01 AS LONG
   LOCAL S01,S02,S03,S04,S05 AS STRING
   S01="Login"
   S02="Password"
   S03="Domain"
   S04="IsAdminTest.exe"
   S05=EXE.PATH$
   
   R01=RunAsUser(S01,S02,S03,S04,S05)
   ? STR$(R01)

END FUNCTION