Ich werfe mal diese Funktion in den (virtuellen) Raum:
Delphi-Quellcode:
const
SCS_32BIT_BINARY = 0;
SCS_64BIT_BINARY = 6;
SCS_DOS_BINARY = 1;
SCS_OS216_BINARY = 5;
SCS_PIF_BINARY = 3;
SCS_POSIX_BINARY = 4;
SCS_WOW_BINARY = 2;
KERNEL32_DLL = '
kernel32.dll';
// Typ eines Binaries erkennen
// DYNAMISCHER FUNKTIONSIMPORT !!!
type
TGetBinaryType =
function (lpApplicationName: PWideChar;
out lpBinaryType: DWORD): Boolean;
stdcall;
function GetBinaryType(lpApplicationName: PWideChar;
out lpBinaryType: DWORD): Boolean;
var
DLL_Handle : THandle;
// für dynamischen Funktionsimport!
DLL_GetBinaryType : TGetBinaryType;
// für dynamischen Funktionsimport!
begin
// Handle für die KERNEL32.DLL erhalten
DLL_Handle := LoadLibraryW(PWideChar(KERNEL32_DLL));
// Wenn Handle vorhanden, Adressen der Funktionen ermitteln
if DLL_Handle <> 0
then
begin
try
@DLL_GetBinaryType := GetProcAddress(DLL_Handle, '
GetBinaryTypeW');
// Wurde GetBinaryTypeW in der DLL gefunden?
if @DLL_GetBinaryType <>
nil then
begin
Result := DLL_GetBinaryType(lpApplicationName, lpBinaryType);
end
else
begin
RaiseLastOSError;
Result := False;
end;
finally
FreeLibrary(DLL_Handle);
end;
end
else
begin
RaiseLastOSError;
Result := False;
end;
end;
Das dürfte der offizielle Weg sein. Optimierungspotenzial nicht ausgeschlossen.