{ **** UBPFD *********** by delphibase.endimus.com **** >> Получение списка экспорта dll
Функция GetImageFunctionList возвращает список всех экспортируемых функций dll FileName - имя dll Strings - объетк, в который будут занесен список экспорта. ВАЖНО! Тестировано только под NT4
Зависимости: Windows, ImageHlp Автор: Mystic, mystic2000@newmail.ru, ICQ:125905046, Харьков Copyright: Mystic Дата: 21 апреля 2002 г. ***************************************************** }
function EnumSymbols(SymbolName: PChar; SymbolAddress, SymbolSize: ULONG; Strings: Pointer): Bool; stdcall; begin TStrings(Strings).Add(SymbolName); Result := True; end;
function GetImageFunctionList(const FileName: string; Strings: TStrings): Boolean;
var Handle: THandle; hProcess: THandle; VersionInfo: TOSVersionInfo; begin Strings.Clear; Result := False;
SymSetOptions(SYMOPT_UNDNAME or SYMOPT_DEFERRED_LOADS);
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo); if not GetVersionEx(VersionInfo) then Exit;
if VersionInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then hProcess := GetCurrentProcessId else hProcess := GetCurrentProcess;
if not SymInitialize(hProcess, nil, True) then Exit; try Handle := LoadLibrary(PChar(FileName)); if Handle = 0 then Exit; try if not SymLoadModule(hProcess, 0, PChar(FileName), nil, Handle, 0) then Exit; try if not SymEnumerateSymbols(hProcess, Handle, EnumSymbols, Strings) then Exit; finally SymUnloadModule(hProcess, Handle); end; finally FreeLibrary(Handle); end; finally SymCleanup(hProcess); end; Result := True; end;
Пример использования: if not GetImageFunctionList('kernel32.dll', ListBox1.Items) then raise Exception.Create('Произошла ошибка');
|