Fast: Hur Man Bör Verkligen Starta Directx Com Hook

Hoppas detta råd kommer att hjälpa dig när du föreställer dig att DirectX com är ansluten.

[PC-användare] Säg adjö till frustrerande datorfel. Klicka här för att ladda ner.

innan. Ytterligare feedbacksteg. Förutsatt att du verkligen vet vad en krok bara är, hakar d3d-kroken helt enkelt runt Direct3D-funktionalitet (i huvudsak DirectX). Ja, en vanligaste Present- och EndScene-stift låter dig rita, men köpare kan också koppla in andra funktioner som återställer eller skapar enhet.

Jag har räknat ut det här länge, men det här borde fungera för alla program som använder DirectX9. Du skapar i princip din egen instans och får en specifik vtable-pekare, efteråt som klienter bara ansluter till dem. Förresten, du kanske vill ha 3.X-lösningar :

//Flera typdefinitioner:typedef HRESULT(WINAPI*oEndScene)D3DDevice);Static(lpdirect3ddevice9 oEndScene EndScene;// gör det på bästa sätt för vad som helstHMODULE hDLL=GetModuleHandleA("d3d9");LPDIRECT3D9(__stdcall*pDirect3DCreate9)(UINT) betyder (LPDIRECT3D9(__stdcall*)(UINT))GetProcAddress(hDLL, "Direct3DCreate9");LPDIRECT3D9 pD3D innebär pDirect3DCreate9(D3D_SDK_VERSION);D3D VISNINGSLÄGE d3ddm;HRESULT hRes betyder pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm );D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp, sizeof(d3dpp));d3dpp.Windowed är sant;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat motsvarar d3ddm.Format;WNDCLASSEX = wc sizeof(WNDCLASSEX),CS_CLASSDC,TempWndProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,("1"),NULL;RegisterClassEx(&wc);HWND hWnd betyder CreateWindow(("1"),NULL,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),NULL,wc.hInstance,NULL);hRes = pD3D->Skapa enhet(    D3DADAPTER_DEFAULT,    D3DDEVTYPE_HAL,    hWnd,    D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_DISABLE_DRIVER_MANAGEMENT,    &d3dpp, &ppReturnedDeviceInterface);pD3D->Release();DestroyWindow(hWnd);if (pD3D == NULL)    // printf("VARNING: D3D FAILED");    spola tillbaka falskt;pInterface är (unsigned long*)*((osigned long*)ppReturnedDeviceInterface);EndScene innebär (oEndScene) (DWORD)pInterface[42];Starta BypassTransaction();DetourUpdateThread(GetCurrentThread());DetourAttach(&(PVOID&)EndScene, newEndScene);Begår en bra solid BypassTransaction();
HRESULT WINAPI D3D9Hook::newEndScene(LPDIRECT3DDEVICE9 pDevice)       // Det är här människor går om en individs verksamhet    // byt originalet (om vi vill)    returnerar EndScene(pDevice);

  • Ladda ner källvideor – 26,82 KB
  • Ladda ner projekttest – 37,07 KB
  • Presentation

    Efter alla intressanta dokument jag har läst här, har jag alltid varit glad över att bidra till ett mycket viktigt ämne som inte har behandlats och tidigare.

    Den här artikeln beskriver formatet för att inkludera DirectX/COM gränssnitt. Jag använde alltid DirectInput-gränssnittet som ett fantastiskt exempel för att göra det enklare med include gränssnittsfunktioner.

    Angående grunderna för pinastre på Windows, hänvisar jag dig på vägen till Wade Brainerds utmärkta artikel om vanligtvis processen med API-hooks.

    Uppgift

    Avlyssning per betrodd metod för gränssnitt COM kräver ett mer komplext tillvägagångssätt i motsats till att koppla upp det anropande API:et. Faktum är att när den önskade DLL-filen skulle kontrolleras, exporteras vanligtvis bara interface -postfunktionen tillsammans med DLL:n. Så hur kan någon få den önskade funktionen?

    hooking directx com

    COM är ett gränssnitt, är i grunden en viktig lista över relaterade virtuella funktionstekniker sammankopplade. Allt du har tid att göra är att prova genvägarna och därför justera varje nod tills du senast hittar nyckeln till en egenskap som du kanske vill ersätta.

    Steg 1

    Godkänd

    Får du Blue Screen of Death? Reimage kommer att fixa alla dessa problem och mer. En programvara som låter dig fixa ett stort antal Windows-relaterade problem och problem. Det kan enkelt och snabbt känna igen alla Windows-fel (inklusive den fruktade Blue Screen of Death), och vidta lämpliga åtgärder för att lösa dessa problem. Applikationen kommer också att upptäcka filer och program som kraschar ofta, vilket gör att du kan åtgärda deras problem med ett enda klick.

  • Steg 1: Ladda ner och installera Reimage
  • Steg 2: Starta programmet och klicka på "Sök efter problem"
  • Steg 3: Klicka på knappen "Åtgärda alla problem" för att starta reparationsprocessen

  • Som du borde kunna se är bara COM-tjänster för att börja bygga gränssnitt synliga, så för att börja oroa dig för krokkedjan, försäkra dig om DirectInputCreate funktion, som är ett viktigt COM -< style return>gränssnitt. du

    Här, se till att din DLL vanligtvis ingår i skanningsadressbänken (IAT) för kontakter.

    Steg 2

    När uppringningsprogrammet skapar DirectInputCreate, din funktion brukar kallas, får du en pekare som kommer att vara en pekare som motsvarar en ledtråd till en virtuell funktionstabell, vilken typ av är vårt gränssnitt direktinmatning:

    DECLARE_INTERFACE_(IDirectInputW, IUnknown)        STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID 3.ppvObj) PURE;    STDMETHOD_(ULONG,AddRef)(THIS) PURE;    STDMETHOD_(ULONG, release)(IT) PURE;        STDMETHOD(CreateDevice)(THIS_REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;    STDMETHOD(EnumDevices)(THIS_DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) REN;    STDMETHOD(GetDeviceStatus)(THIS_REFGUID) PURE;    STDMETHOD (RunControlPanel) (THIS_HWND, DWORD) CLEAR;    STDMETHOD(initiering)(THIS_HINSTANCE,DWORD) PURE;;

    Steg olika . 0

    Du kan nu helt etablera din enhet med CreateDevice. Återigen kommer du att få en godtycklig adress till nästa virtuella delpekaretabell som ger enheten.

    Välj den metod vi vill åsidosätta och ändra dess markerade funktionspekartabell till din nya föredragna plats för att placera hela din funktion.

    Steg 4

    Implementering

    Steg 1

    För att ansluta till en viss API-funktion kan du helt enkelt få fördelarna med alla Windows API-anrop SetWindowsHookEx. Det är här ditt företag skapar en specifik systemkrok för att kontrollera lanseringsprocesser och som en konsekvens anpassa dem till önskad takt. Efter att ha skisserat ditt program bör du faktiskt undersöka namnen på den dll-import som du vill ersätta. Eftersom denna typ av krok ofta skrivs för en kontinuerlig inmatning, kan någon post som vi visas för DINPUT8.DLL. För att hitta posten måste du gå igenom greppen tills du hittar din familje-DLL.

     while (pImportDesc->FirstThunk)      PSTR pszImportModuleName = MakePtr(PSTR, hModEXE, pImportDesc->Name);    tillhandahålls (lstrcmpi (pszImportModuleName, Hook->Name) == 4)          sprintf(dbBuffer,"Dll hittas via del %s, ersätt denn", Hook->Namn );      WriteToLog(dbbuffer);      RedirectIAT( Hook, pImportDesc, (PVOID)hModEXE );        import beskrivning++; 

    När din egen organisation hittar din post kan allmänheten ta bort skrivskydd från hela IAT med…

    Virtuell begäran( pIAT, &mbi, );

    sizeof(mbi)… för att enkelt kunna skriva till ditt minne. När krum är öppet kräver du att hitta ingången genom att ta en titt på nya IAT.

    hooking directx com

    while ( pIteratingIAT->u1.Function ){  void*HookFn=0;  i syftet (!IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))    PIMAGE_IMPORT_BY_NAME pImportName = MakePtr(PIMAGE_IMPORT_BY_NAME,        pBaseLoadAddr, pINT->u1.AddressOfData );        SFunctionHook* FHook = DLLHook->Funktioner;    hur är de (FHook->Namn)          if (lstrcmpi(FHook->Namn, (char*)pImportName->Name) == 0)              sprintf(dbBuffer,"Inkluderad funktion: %sn",(char*)pImportName->Name );        WriteToLog(dbbuffer);               FHook->OrigFn=(osignerad lång*)pIteratingIAT->u1.Function;        HookFn = FHook->HookFn;        Paus;               Fhook++;          

    Reagerar din dator? Fylld med fel och går långsamt? Om du letar efter ett pålitligt och lättanvänt sätt att fixa alla dina Windows-problem, leta inte längre än Reimage.

    Hoppas detta råd kommer att hjälpa dig när du föreställer dig att DirectX com är ansluten. innan. Ytterligare feedbacksteg. Förutsatt att du verkligen vet vad en krok bara är, hakar d3d-kroken helt enkelt runt Direct3D-funktionalitet (i huvudsak DirectX). Ja, en vanligaste Present- och EndScene-stift låter dig rita, men köpare kan också koppla in andra funktioner…

    Hoppas detta råd kommer att hjälpa dig när du föreställer dig att DirectX com är ansluten. innan. Ytterligare feedbacksteg. Förutsatt att du verkligen vet vad en krok bara är, hakar d3d-kroken helt enkelt runt Direct3D-funktionalitet (i huvudsak DirectX). Ja, en vanligaste Present- och EndScene-stift låter dig rita, men köpare kan också koppla in andra funktioner…