Получение списка экспорта dll
Автор: Mystic
WEB-сайт: http://delphibase.endimus.com
{ **** 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('Произошла ошибка');
|