AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi String aus .EXE und .DLL extrahieren?
Thema durchsuchen
Ansicht
Themen-Optionen

String aus .EXE und .DLL extrahieren?

Ein Thema von Rakshasa · begonnen am 26. Mär 2007 · letzter Beitrag vom 27. Mär 2007
Antwort Antwort
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#1

String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 21:27
Hallo Leute,

unter Windows Vista finden sich in der Registry Dateiangaben, die auf Strings in .DLL oder .EXE-Dateien hinweisen, bspw.
"@comres.dll,-947"

Die Frage ist nun: Wie lese ich diese Strings aus? Bisher habe ich folgende Function vom Board hier benutzt:
Code:
function GetString(const lib: string; id: LongWord): string;
var
  hLib: THandle;
  buf: array [Byte] of Char;
begin
  hLib := LoadLibrary(PChar(lib));
  if LongBool(hLib) then
  try
    SetString(Result, buf, LoadString(hLib, id, @buf[0], SizeOf(buf)));
  finally
    FreeLibrary(hLib);
  end;
end;
Nur funktioniert diese Function nicht (mehr). Hat jemand eine Idee, wie die o.g. String-Resourcen ausgelesen werden können/sollen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 21:36
Was heißt "funktioniert nicht mehr" und was sagt MSDN-Library durchsuchenFetLastError?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#3

Re: String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 22:10
Zitat von Luckie:
Was heißt "funktioniert nicht mehr" und was sagt MSDN-Library durchsuchenFetLastError?
"Funktioniert nicht" heißt, dass die String-Ressourcen nicht ausgelesen werden, obwohl sie definitiv da sind (Windows findet sie). Das Ergebnis der Function ist also ein leerer String, eine Exception tritt nicht ein.

"GetLastError" sagt "0", das hilft also auch nicht weiter
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 23:12
ID negiert?
Richtige DLL geladen? (WoW64)?
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#5

Re: String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 23:23
Zitat von NicoDE:
ID negiert?
Richtige DLL geladen? (WoW64)?

- ID negiert
- WOW64 wurde berücksichtigt

  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: String aus .EXE und .DLL extrahieren?

  Alt 26. Mär 2007, 23:29
Zitat von Rakshasa:
WOW64 wurde berücksichtigt
Dann verstehe ich die Verwendung von LoadLibrary nicht. Wenn die FileSystem-Redirection für den Thread deaktiviert wurde und es sich um eine 64-Bit-Bibliothek handelt (und ich mal davon ausgehe, dass du keinen 64-Bit-Pascal-Compiler verwendest), dann kannst du nur LoadLibaryEx(..., LOAD_LIBRARY_AS_DATAFILE) verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#7

Re: String aus .EXE und .DLL extrahieren?

  Alt 27. Mär 2007, 00:18
Zitat von NicoDE:
Zitat von Rakshasa:
WOW64 wurde berücksichtigt
Dann verstehe ich die Verwendung von LoadLibrary nicht. Wenn die FileSystem-Redirection für den Thread deaktiviert wurde und es sich um eine 64-Bit-Bibliothek handelt (und ich mal davon ausgehe, dass du keinen 64-Bit-Pascal-Compiler verwendest), dann kannst du nur LoadLibaryEx(..., LOAD_LIBRARY_AS_DATAFILE) verwenden.
// noch ein Versuch, nachdem mein Post gelöscht wurde?!

Also: An LoadLibraryEx habe ich überhaupt nicht gedacht... immer dieses 64-Bit ...
Mit folgendem Code funktioniert es einwandfrei:

Code:
function GetStringFromDLL(const lib: string; id: LongWord): string;
var
  hLib: THandle;
  buf: array [Byte] of Char;
begin
  ChangeFSRedir(true); // Abstellen der 64-Bit-Redirection
  hLib := LoadLibraryEx(PChar(lib), 0, LOAD_LIBRARY_AS_DATAFILE);
  if LongBool(hLib) then begin
  try
    SetString(Result, buf, LoadString(hLib, id, @buf[0], SizeOf(buf)));
  finally
    FreeLibrary(hLib);
  end;
  end;
 ChangeFSRedir(false); // Zurückstellen der 64-Bit-Redirection
end;
Der Aufruf:

Code:
GetStringFromDLL('C:\Windows\system32\wudfsvc.dll', 1000);
Danke an alle!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz