AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddress()
Thema durchsuchen
Ansicht
Themen-Optionen

Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddress()

Ein Thema von Assarbad · begonnen am 14. Sep 2003 · letzter Beitrag vom 15. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Assarbad
(Gast)

n/a Beiträge
 
#1

Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddress()

  Alt 14. Sep 2003, 11:19
Ich habe einen Funktionstypen:
Code:
typedef PKBDTABLES (*KBDLAYERDESCRIPTOR)(VOID);
... eine Funktion um eine Adresse zu einer Funktion zu bekommen:
Code:
NTSYSAPI
NTSTATUS
NTAPI
LdrGetProcedureAddress(
   IN HANDLE          ModuleHandle,
   IN PANSI_STRING    FunctionName OPTIONAL,
   IN WORD            Ordinal OPTIONAL,
   OUT PVOID         *FunctionAddress
   );
... sowie eine Variable des obigen Funktionstypen:
Code:
KBDLAYERDESCRIPTOR KbdLayerDescriptor;
Ich habe folgendes versucht (funktioniert aber nicht):
Code:
LdrGetProcedureAddress(hModule, &asFunction, 0, (KBDLAYERDESCRIPTOR)KbdLayerDescriptor);
Ich habe nun im letzten Codestück schon probiert den Indirector an alle möglichen und unmöglichen Stellen zu setzen. Leider hat bisher nix geholfen. Hat jemand hier einen Schimmer wie das geht?

Nachtrag:
Mit GetProcAddress() aus der Win32 API ginge das relativ simpel. Steht mir aber nicht zur Verfügung!
Code:
KbdLayerDescriptor = (KBDLAYERDESCRIPTOR)GetProcAddress((HMODULE)hModule, "KbdLayerDescriptor");
Ich komme wohl irgendwo mit Pointer referenzieren und dereferenzieren durcheinander.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 11:22
Eventuell können dir die hier helfen: http://www.c-plusplus.de/ubb/cgi-bin/ultimatebb.cgi . Kannst auch als Gast posten. Allerdings wird da ziemlich schnell geflammt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#3

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 12:45
Zumindest gab es noch keine schnelle Antwort. Ich suche also bisher immernoch nach der Antwort
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 12:53
Spotlight schon nmal probiert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 12:55
Habe jetzt ein wenig rumgeschweinert und es zumindest zum Laufen gebracht.
Allerdings würde mich die korrekte Schreibweise noch stark interessieren.
Ich habe jetzt einfach einen Pointer auf einen Pointer deklariert.
Dann rufe ich diesen Pointer als Funktion gecastet auf:

Code:
typedef PKBDTABLES (*KBDLAYERDESCRIPTOR)(VOID);

int mymain(int argc, char* argv[])
{
   UNICODE_STRING usBla;
   ANSI_STRING asFunction;
   HANDLE hModule;
   KBDLAYERDESCRIPTOR KbdLayerDescriptor;
   PVOID *X;
   PKBDTABLES Desc;

   RtlInitUnicodeString(&usBla, L"kbdus.dll");
   LdrLoadDll(NULL, 0, &usBla, &hModule);

   RtlInitAnsiString(&asFunction, "KbdLayerDescriptor");
   LdrGetProcedureAddress(hModule, &asFunction, 0, X);
   printf("%8.8X\n", (DWORD)*X);
   Desc = ((KBDLAYERDESCRIPTOR)*X)();
   printf("%4.4X\n", *Desc->pusVSCtoVK);
   printf("%2.2X\n", Desc->bMaxVSCtoVK);
   printf("%8.8X\n", (DWORD)Desc);
}
Wie kann ich aber sofort nen korrekten Cast hinbekommen, so daß ich die
Variable "KbdLayerDescriptor" benutzen kann???
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 13:08
Zitat:
OUT PVOID *FunctionAddress
Hier möchte die Funktion die Adresse einer Variable, die den Zeiger aufnehmen soll. Du übergibst aber die Adresse, auf die KbdLayerDescriptor zeigt.

So müsste es funktionieren:
Code:
LdrGetProcedureAddress(hModule, &asFunction, 0, &KbdLayerDescriptor);
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 13:14
@jbg: Funzt leider nicht. Gleicher Fehler ...
Code:
E:\1\smss__\test\test.cpp(110) : error C2664: 'LdrGetProcedureAddress' : cannot convert parameter 4 from 'struct tagKbdLayer *(__cdecl ** )(void)' to 'void ** '
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
Diese Fehlermeldung stammt von dem Code, den du vorschlugst.

Die folgenden Casts laufen auch nicht:
Code:
LdrGetProcedureAddress(hModule, &asFunction, 0, (PVOID)&KbdLayerDescriptor);
LdrGetProcedureAddress(hModule, &asFunction, 0, (KBDLAYERDESCRIPTOR)&KbdLayerDescriptor);
LdrGetProcedureAddress(hModule, &asFunction, 0, &(PVOID)KbdLayerDescriptor);
@Luckie: Habe jetzt auch mal in SL nachgefragt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 13:16
Code:
LdrGetProcedureAddress(hModule, &asFunction, 0, (KBDLAYERDESCRIPTOR)KbdLayerDescriptor);
Ohne das "&" vor dem KbdLayerDescriptor. Ein "&" vor einem Cast habe ich noch nie gesehen. Soll aber nichts heißen, ich habe viles wohl noch nicht gesehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#9

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 13:20
Hehe ... geht auch nicht. Hatte ich schon bevor ich die Fragen gestellt habe. Wenn ich hier alle aufführen würde, die nicht gehen, wäre das etwas viel
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre

  Alt 14. Sep 2003, 13:48
C++
Code:
static_cast<void **>(&KbdLayerDescriptor)
mit Gewalt: reinterpret_cast<void **>(&KbdLayerDescriptor)
C
Code:
(void **)&KbdLayerDescriptor
edit: beziehungsweise void** = PVOID* zwecks Typsicherheit
edit2: Du solltest Dir (falls nicht vorhanden) einen Pointer-Typen auf den Funktions-Typen deklarieren
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:19 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