Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Direct3D hook (https://www.delphipraxis.net/110662-direct3d-hook.html)

fortu 21. Mär 2008 23:22


Direct3D hook
 
Hi, ich versuche gerade einen Hook zu schreiben für meine Direct3D8-Anwendung. Da die d3d8.dll keine Exports der einzelnen Funktionen hat, muss ich erst über Direct3DCreate8 hooken und dann iwie IDirect3D8 .. dazu weiß ich aber nicht ganz, wie ich das anstellen soll. Wäre schön, wenn ihr mir sagt, wie ich weiter vorgehen soll. Ich poste mal meinen momentanen Code. Leider funktioniert mein Code so auch nicht richtig. Bekomme nen Error vom Beziehen einer Adresse :| Hoffe ihr könnt mir weiter helfen.
Delphi-Quellcode:
library Project1;

uses
  SysUtils,
  windows,
  GenCodeHook,
  Direct3D8,
  d3dx8,
  funcs in 'funcs.pas';

{$R *.res}


type
  Direct3DCreate8 = function( D3D_SDK_VERSION : cardinal ): IDirect3D8; stdcall;
var
  oDirect3DCreate8 : Direct3DCreate8;
  pIDirect3D8      : IDirect3D8;


//Die neue Funktion
function pDirect3DCreate8( D3D_SDK_VERSION : cardinal ): IDirect3D8; stdcall;
begin
  pIdirect3D8 := oDirect3DCreate8( D3D_SDK_VERSION );
  if pIdirect3D8 <> nil then
    Writelog('Direct3DCreate8 gehookt!');
  result := pIDirect3D8;
end;


procedure dllmain(dwReason: integer); // Wird gecalled, wenn der Prozess die dll lädt / unlädt
var
  module : HMODULE;
begin
  case dwreason of
    1: begin
    // Wenn die dll geladen wurde, alles laden, was benötigt wird

         //Die Adressen aus der D3D8.dll beziehen
         module := GetModuleHandle('D3D8.dll');
         //Detour.
         CreateGenericCodeHook( GetProcAddress(module,pchar('Direct3DCreate8')), @pDirect3DCreate8, @oDirect3DCreate8 );
       end;
    0: begin
    // Wenn die dll wieder entladen wird

         //Die original Funk wieder laden
         RemoveGenericCodeHook(@oDirect3DCreate8);
       end;
  end;
end;

begin
  DLLProc := @DLLMain; // Einsteigspunkt setzen
  DLLMain(1);          // DllMain callen
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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