OldSchoolHack

Register / Login English

Fragen zu DirectX 11 Hooking


icon Fragen zu DirectX 11 Hooking #1

Join Date: Jul 2011

Posts: 3

Hey OSH,
Ich habe angefangen mich mit DX11 zu beschäftigen.
Habe mir bis jetzt die Sample Tutorials aus der SDK durchgelesen & vieles davon verstanden.
Zu 100% blicke ich leider noch nicht durch. Deswegen meine Fragen:

Ich glaube das ich D3D11CreateDeviceAndSwapChain hooken muss (MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ff476083%28v=vs.85%29.aspx ) Dieses wird nämlich in allen Samples aufgerufen.
Dieses Funktioniert auch nicht.Die Addresse finde ich mit GetProcAddress in der DX11 Dll.

Allerdings kann ich nichts zeichnen ,ich habe versucht wie in den Samples "ClearRenderTargetView" zu benutzen.Dieses Funktioniert aber nicht,und beim hook versuch Crasht es.

Dazu frage ich mich wie ich Text Rendere ,weil ich den Sample Tutorials nichts zu finden ist.

Über ein paar Infos und hilfestellungen würde ich mich sehr freuen.

//EDIT CODE:
TEXT Code:
  1.  
  2.  
  3. typedef HRESULT (WINAPI* __stdcall tD3D11CreateDeviceAndSwapChain)(IDXGIAdapter *pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, const D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain* ppSwapChain, ID3D11Device* ppDevice, D3D_FEATURE_LEVEL *pFeatureLevel, ID3D11DeviceContext **ppImmediateContext);
  4. tD3D11CreateDeviceAndSwapChain pD3D11CreateDeviceAndSwapChain = NULL;
  5.  
  6.  
  7. HRESULT WINAPI D3D11CreateDeviceAndSwapChain_Hook(IDXGIAdapter *pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, const D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain* ppSwapChain, ID3D11Device* ppDevice, D3D_FEATURE_LEVEL *pFeatureLevel, ID3D11DeviceContext **ppImmediateContext)
  8. {
  9. Helper->WriteLog("D3D11 => Hook working.");
  10.  
  11.  
  12. return pD3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext);
  13. }
  14.  
  15.  
  16.  
  17. DWORD WINAPI Thread(LPVOID)
  18. {
  19. DWORD dwD3D11 = NULL;
  20. while( !dwD3D11 )
  21. {
  22. dwD3D11 = (DWORD)GetModuleHandle( L"d3d11.dll" );
  23. Sleep( 250 );
  24.  
  25. }
  26. BYTE *C_Device =( BYTE* ) GetProcAddress( (HMODULE)dwD3D11, "D3D11CreateDeviceAndSwapChain" );
  27. pD3D11CreateDeviceAndSwapChain = ( tD3D11CreateDeviceAndSwapChain ) Hook->DetourCreate(C_Device, ( BYTE* )D3D11CreateDeviceAndSwapChain_Hook, 0);
  28. if(!pD3D11CreateDeviceAndSwapChain){
  29. MessageBoxA(0,"Hooking: D3D11CreateDeviceAndSwapChain Failed.Proccess get closed.","Error 15",MB_OK);
  30. ExitProcess(0);
  31. }
  32. return 0;
  33. }
  34.  
  35.  
  36.  

Mein gehookter bereich wird nicht aufgerufen.

icon #2

Join Date: Jan 2012

Posts: 9

User-Rating:

2 positive
0 negative
Bin mit DX11 nicht allzu vertraut, aber ich vermute, dass du zu langsam bist. In DX9 wird Direct3DCreate9() ja auch nur 1 mal am Anfang aufgerufen. Und hier ist das bei deiner Funktion wahrscheinlich auch der Fall. Daher ruft er die Funktion auf, ehe du deine DLL injizieren kannst und dann wird logischerweise dein Hookbereich auch nicht mehr aufgerufen.
Ich hoffe, du verstehst mein Kauderwelsch
Jeon