Hi,
ich will die CreateProcess
API dynamisch in mein Programm einbinden. Dazu verwende ich:
Delphi-Quellcode:
function CreateProcess(lpApplicationName: PChar; lpCommandLine: PChar;
const lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
out lpProcessInformation: TProcessInformation): BOOL; stdcall;
var
pCreateProcess: function(lpApplicationName: PChar; lpCommandLine: PChar;
const lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
out lpProcessInformation: TProcessInformation): BOOL; stdcall;
begin
pCreateProcess := GetRealProcAddress(GetModuleHandle('kernel32'), 'CreateProcess');
Result := pCreateProcess(lpApplicationName, lpCommandLine, lpProcessAttributes,
lpThreadAttributes, bInheritHandles, dwCreationFlags,
lpEnvironment, lpCurrentDirectory, lpStartupInfo,
lpProcessInformation);
end;
Leider kommt nun nach dem Start des Programmes sofort die Meldung, dass ein Fehler verursacht wurde und das Programm beendet wird.
Woran kann das liegen?
PS: GetRealProcAddress ermittelt nur die "ursprüngliche" Adresse der
API, somit werden Userlevel
API Hooks nicht gecallt.