|
CreateProcessAsUser
- createProcessAsUser
// programm zum ausführen von Programmen als admin und auswerten des returncodes / rb 2009
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <tchar.h>
#define Buffers 0x200
#define LOGON_WITH_PROFILE 0x00000001
typedef BOOL (WINAPI *CREATEPROCESSWITHLOGONWD)(LPCWSTR lpUsername,
LPCWSTR lpDomain,LPCWSTR lpPassword,DWORD dwLogonFlags,
LPCWSTR lpApplicationName,LPWSTR lpCommandLine,
DWORD dwCreationFlags,LPVOID lpEnvironment,
LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation);
CREATEPROCESSWITHLOGONWD CreateProcessWithLogonWD = NULL;
//----------------------------------------------------------
int createProc(char* prog)
{
WCHAR cmd[Buffers];
WCHAR user[Buffers];
WCHAR domain[Buffers];
WCHAR pass[Buffers];
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HMODULE hADVAPI32;
hADVAPI32 = LoadLibrary("ADVAPI32.DLL");
if(hADVAPI32 < (HINSTANCE)HINSTANCE_ERROR)
return(-3);
CreateProcessWithLogonWD = (CREATEPROCESSWITHLOGONWD)
GetProcAddress(hADVAPI32,"CreateProcessWithLogonW");
if ( CreateProcessWithLogonWD == NULL )
return(-2);
char host[128],ch1[16],ch2[16],ch3[16],ch4[16],ch5[128];
DWORD dwExitcode;
strcpy(host,"DomainOrHostname");
strcpy(ch2,"administrator");
strcpy(ch3,"geheim"); // wird nicht verschlüsselt!
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,ch2,-1,user,sizeof user);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,host,-1,domain,sizeof domain);//lokaler Rechner?
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,prog,-1,cmd,sizeof cmd);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,ch3,-1,pass,sizeof pass);
si.cb = sizeof(si);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = L"Updates installieren"; // NULL;
//si.dwFlags = 0;
si.dwFlags = STARTF_USESHOWWINDOW ; //rb
si.wShowWindow = SW_SHOW; //HIDE; // rb
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
if ( CreateProcessWithLogonWD(user,domain,pass,LOGON_WITH_PROFILE,NULL,cmd,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE |
CREATE_NEW_PROCESS_GROUP | CREATE_SEPARATE_WOW_VDM,
NULL,NULL,&si,&pi) == FALSE ){
printf("Fehler : %d \n",GetLastError());
return(-1);
}
//printf("%d\n",pi.dwProcessId);
strcpy(ch2,"\0");strcpy(ch3,"\0");
WaitForSingleObject(pi.hProcess, INFINITE); // warte auf Rückkehr...
GetExitCodeProcess(pi.hProcess, &dwExitcode);
//printf("%d\n",dwExitcode);
return dwExitcode;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int ret;
ret = createProc("wuauclt /detectnow");
return ret;
}
//---------------------------------------------------------------------------
|
|