Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[Deze functies zijn onderhevig aan wijzigingen bij elke revisie van het besturingssysteem. Gebruik in plaats daarvan de Microsoft DirectDraw en Microsoft Direct3DAPIs; deze API's isoleren toepassingen van dergelijke wijzigingen in het besturingssysteem en verbergen veel andere problemen die betrokken zijn bij het rechtstreeks communiceren met beeldschermstuurprogramma's. Zie Inleiding totweergeven voor meer informatie.]
DirectDraw en Direct3D gebruiken enkele kernelmodusroutines om te communiceren met het besturingssysteem en het beeldschermstuurprogramma.
De kernel van het besturingssysteem lijkt een DirectDraw/Direct3D-weergavestuurprogramma te zijn vanuit het oogpunt van onderdelen in de gebruikersmodus. Er bestaan echter wel enkele verschillen tussen kernel- en weergavestuurprogramma's. De onderdelen van de kernelmodus behouden een kopie van structuren die DirectDraw/Direct3D-objecten vertegenwoordigen, zoals apparaten en oppervlakken. Het gebruikersmodusonderdeel van DirectDraw/Direct3D vraagt het maken van deze structuren aan, waarnaar wordt verwezen met ingangen die worden geretourneerd door de kernelmodus. Daarom zijn de verschillen voornamelijk in de argumenten die worden doorgegeven aan de routines: kernel accepteert ingangen terwijl stuurprogramma's meestal pointers accepteren.
- ontwikkeling van toegangspunten voor kernelmodus
- de kernel- aanroepen
- Draagbare toepassingen schrijven
- apparaat maken
- kernelobjecten
- Functions-
- Verwante onderwerpen
Evolutie van toegangspunten voor kernelmodus
DirectDraw maakt alle verbindingen met de kernelmodus via de Gdi32.dll met behulp van verschillende toegangspunten. Deze toegangspunten zijn doorgaans alleen maar marshalparameters. Als onderdeel van het maken van apparaten retourneert de Gdi32.dll aanwijzers naar routines binnen zichzelf die vervolgens worden gebruikt door DirectDraw en Direct3D 7.0.
Direct3D 8.x maakt een schone onderbreking van Gdi32.dllen roept rechtstreeks de toegangspunten in de kernelmodus aan.
De kernel aanroepen
Deze toegangspunten zijn vergelijkbaar en in veel gevallen identiek aan toegangspunten in het displaystuurprogramma zelf, dus een goed begrip van de DDK-materialen (Driver Development Kit) voor DirectDraw en Direct3D is een essentiële vereiste voor het gebruik van deze functies.
Het aanroepen van deze functies verschilt tussen besturingssystemen. In Windows 2000 is het W2KUMODE. LIB-bibliotheek bevat routines waarmee de aanroepende thread de overgang naar kernelmodus kan maken. Deze routines voeren geen parameter marshalling uit en zijn het ideale aanroepende mechanisme voor Windows 2000. Het mechanisme waarmee de overgang naar de kernelmodus wordt uitgevoerd, is afhankelijk van de volgorde van een tabel. Deze volgorde verandert in revisies van het besturingssysteem. Daarom is het niet raadzaam om een toepassing te bouwen die afhankelijk is van W2KUMODE. LIB voor Windows 2000 en verwacht dat het niet-gewijzigd wordt uitgevoerd in Windows XP. In de volgende sectie wordt een mechanisme beschreven voor het maken van draagbaarheid van besturingssystemen.
In Windows XP exporteert D3D8THK.DLL alle functies van de kernelmodus, maar met een enigszins versierde naam. In het volgende voorbeeld ziet u hoe toepassingen de clientfuncties op laag niveau kunnen aliasen met behulp van de preprocessor. Voordat u dit doet, koppelt u dynamisch aan D3D8THK.DLL.
#define NtGdiDdUnlock OsThunkDdUnlock
#include "ntgdi.h" // Brings in the definition of "NtGdiDdUnlock",
. // which is now seen as OsThunkDdUnlock.
.
.
OsThunkDdUnlock(hSurface, puUnlockData);
Draagbare toepassingen schrijven
Er zijn verschillende technieken beschikbaar om een toepassing overdraagbaar te maken in besturingssystemen. De meest robuuste is het installeren van het Microsoft DirectX 8.x redistributable-pakket op Windows 2000 als onderdeel van het installatieproces van uw eigen toepassing. Dit garandeert dat D3D8THK.DLL beschikbaar is op Windows 2000-systemen en één codepad in de toepassing toestaat, omdat u dezelfde techniek kunt gebruiken als beschreven voor Windows XP hierboven.
Toepassingen kunnen ook hun eigen isolerende DLL bouwen en twee versies van die DLL implementeren, één voor Windows 2000 met behulp van de hierboven weergegeven techniek en één voor Windows XP die gebruikmaakt van D3D8THK.DLL.
Apparaat maken
DirectDraw en Direct3D moeten eerst een exemplaar maken van de abstractie van het stuurprogrammaobject van de kernel. In Gdi32.dll en Ddraw.dllwordt dit bereikt door het aanroepen van DdCreateDirectDrawObject, DdQueryDirectDrawObject en DdReenableDirectDrawObject. In Direct3D 8.xwordt dit bereikt door NtGdiDdCreateDirectDrawObject, NtGdiDdQueryDirectDrawObject en NtGdiDdReenableDirectDrawObjectaan te roepen. Houd er rekening mee dat de GdiEntry*-toegangspunten slechts marshallers zijn voor de kernelmodusinvoerpunten.
Na het aanroepen van deze functies wordt een ingang geretourneerd die de abstractie van het kernelobject van een DirectDraw-apparaat vertegenwoordigt. Dit kernelobject vertegenwoordigt een stuurprogramma-exemplaar dat eigendom is van het weergavestuurprogramma. Deze ingang kan worden gebruikt in volgende aanroepen, zoals DdCreateSurfaceObject (of NtGdiDdCreateSurfaceObject in Direct3D 8.x) om verdere objecten te maken.
Kernelobjecten
Er worden enkele toegangspunten gebruikt om de weergaven van de kernelmodus van bepaalde objecten te beheren. DdCreateSurfaceObject (of NtGdiDdCreateSurfaceObject in Direct3D 8.x) is een goed voorbeeld. Met dit toegangspunt wordt een kernelmodusobject gemaakt dat een deel van het systeemgeheugen vertegenwoordigt. Het toegangspunt retourneert een ingang en deze ingang kan worden gebruikt in volgende tekenoproepen. De kernel leidt een aanwijzer af naar een eigen structuur van deze ingangen en geeft die aanwijzer door aan het weergavestuurprogramma, dat vervolgens de bewerking uitvoert.
Functies
Deze tabel bevat functies die toegangspunten in de kernelmodus vertegenwoordigen en de helperroutines in de gebruikersmodus in Gdi32.dll die deze toegangspunten verpakken.
| Onderwerp | Inhoud |
|---|---|
| DdAttachSurface- | De DdAttachSurface functie koppelt twee weergaven van de kernelmodus. |
| DdCreateDIBSection | Hiermee maakt u een DIBSECTION structuur die de kleurtabel met het apparaat deelt. GdiEntry9 wordt #defined als alias voor deze functie. |
| DdCreateDirectDrawObject | Wrapper voor de NtGdiDdCreateDirectDrawObject functie en maakt een kernelweergave van het DirectDraw-object. Een ingang voor deze weergave wordt opgeslagen in pDirectDrawGlobal->hDD. GdiEntry1- wordt gedefinieerd als een alias voor deze functie. |
| DdCreateSurfaceObject | Wrapper voor de functie NtGdiDdCreateSurfaceObject en maakt een oppervlakobject in de kernelmodus. GdiEntry4- wordt gedefinieerd als een alias voor deze functie. |
| DdDeleteDirectDrawObject | Wrapper voor de functie NtGdiDdDeleteDirectDrawObject en verwijdert een DirectDraw-object in de kernelmodus dat eerder is gemaakt met DdCreateDirectDrawObject. GdiEntry3- wordt gedefinieerd als een alias voor deze functie. |
| DdDeleteSurfaceObject | Wrapper voor de functie NtGdiDdDeleteSurfaceObject en verwijdert een oppervlakobject in de kernelmodus dat eerder is gemaakt door NtGdiDdCreateSurfaceObject. GdiEntry5- is gedefinieerd als een alias voor deze functie. |
| DdGetDC- | Wrapper voor de NtGdiDdGetDC--functie en retourneert een GDI-apparaatcontext (Windows Graphics Device Interface) die het aangegeven DirectDraw-oppervlak vertegenwoordigt. GdiEntry7- wordt gedefinieerd als een alias voor deze functie. |
| DdGetDxHandle- | De DdGetDxHandle- retourneert de kernelmodus microsoft DirectX API-ingang die moet worden gebruikt in volgende aanroepen naar de toegangspunten in de kernelmodus waarmee het DirectX API-mechanisme wordt beheerd. |
| DdQueryDirectDrawObject | Wrapper voor de NtGdiDdQueryDirectDrawObject functie en voert een query uit op een eerder gemaakte kernelmodusweergave voor mogelijkheden. GdiEntry2- is gedefinieerd als een alias voor deze functie. |
| DdQueryDisplaySettingsUniqueness | Retourneert de huidige waarde van een geheel getal dat wordt verhoogd wanneer een modusschakelaar plaatsvindt, zoals wanneer er een desktopswitch, een snelle gebruikersswitch of een microsoft-MS-DOS-vak op volledig scherm is. De toepassing kan deze functie herhaaldelijk aanroepen en de oude en nieuwe waarden van de retourwaarde vergelijken om te bepalen of de weergave-instellingen zijn gewijzigd. GdiEntry13 is gedefinieerd als een alias voor deze functie. |
| DdReenableDirectDrawObject | Wrapper voor de functie NtGdiDdReenableDirectDrawObject. Het schakelt een DirectDraw-stuurprogrammaexemplaren opnieuw in na een moduswijzigingsgebeurtenis, zoals een modusschakelaar, het uiterlijk van een MS-DOS-vak op volledig scherm of het wijzigen van het beeldschermstuurprogramma. GdiEntry10- wordt gedefinieerd als een alias voor deze functie. |
| DdReleaseDC- | Wrapper voor de functie NtGdiDdReleaseDC en brengt een dc uit die eerder is verkregen via DdGetDC- of GdiEntry7. GdiEntry8- is gedefinieerd als een alias voor deze functie. |
| DdResetVisrgn- | Wrapper voor de functie NtGdiDdResetVisrgn en schakelt tijdige gebruikersmodusgegevens in in de knipregio voor vensters op het bureaublad. GdiEntry6- wordt gedefinieerd als een alias voor deze functie. |
| DdSetGammaRamp | De DdSetGammaRamp-functie stelt de gamma-ramp voor het apparaat in. |
| DdSwapTextureHandles | Ontwikkeld voor DDIs's (Device Driver Interfaces) vóór Microsoft DirectDraw 7.0 en doet niets op Microsoft Windows NT-systemen. Alle parameters worden genegeerd. GdiEntry16- wordt gedefinieerd als een alias voor deze functie. |
| DdUnattachSurface | De functie DdUnattachSurface verwijdert een bijlage, gemaakt met DdAttachSurface, tussen twee oppervlakobjecten in de kernelmodus. |
| NtGdiD3DContextCreate- | Hiermee maakt u een context. |
| NtGdiD3DContextDestroy- | Hiermee verwijdert u de opgegeven context. |
| NtGdiD3DContextDestroyAll | Hiermee wordt de hoeveelheid vrij geheugen in de door het stuurprogramma beheerde geheugen-heap opgevraagd. |
| NtGdiD3DDrawPrimitives2 | Geeft primitieven weer en retourneert de bijgewerkte weergavestatus. |
| NtGdiD3DGetDriverState | Wordt gebruikt door de DirectDraw- en Direct3D-runtimes om informatie te verkrijgen van het stuurprogramma over de huidige status. |
| NtGdiD3DValidateTextureStageState | Retourneert het aantal slagen waar de hardware de mengbewerkingen kan uitvoeren die zijn opgegeven in de huidige status. |
| NtGdiDdAddAlphaBlt- | Niet geïmplementeerd. |
| NtGdiDdAddAttachedSurface | Bevestigt een oppervlak aan een ander oppervlak. |
| NtGdiDdAttachSurface | Koppelt twee surface-weergaven in de kernelmodus. |
| NtGdiDdBeginMoCompFrame | Begint met het decoderen van een nieuw frame. |
| NtGdiDdBlt- | Voert een bitblokoverdracht uit. |
| NtGdiDdCanCreateD3DBuffer | Bepaalt of het stuurprogramma een opdracht op stuurprogrammaniveau of hoekpuntbuffer van de opgegeven beschrijving kan maken. |
| NtGdiDdCanCreateSurface | Geeft aan of het stuurprogramma een oppervlak van de opgegeven surfacebeschrijving kan maken. |
| NtGdiDdColorControl- | Hiermee bepaalt u de helderheids- en helderheidsregelaars van een overlayoppervlak. |
| NtGdiDdCreateD3DBuffer | Wordt gebruikt om een opdracht op stuurprogrammaniveau of hoekpuntbuffer van de opgegeven beschrijving te maken. |
| NtGdiDdCreateDirectDrawObject | Hiermee maakt u een weergave aan de kernelzijde van het DirectDraw-object. |
| NtGdiDdCreateMoComp- | Hiermee wordt het stuurprogramma gemeld dat een softwaredecoder bewegingscompensatie gaat gebruiken met de opgegeven GUID. |
| NtGdiDdCreateSurface | Bevestigt een oppervlak aan een ander oppervlak. |
| NtGdiDdCreateSurfaceEx | Hiermee maakt u een Direct3D-oppervlak van een DirectDraw-oppervlak en koppelt u er een aangevraagde ingangswaarde aan. |
| NtGdiDdCreateSurfaceObject | Hiermee maakt u een oppervlakobject in de kernelmodus dat het surface-object in de gebruikersmodus vertegenwoordigt waarnaar wordt verwezen door puSurfaceLocal-. |
| NtGdiDdDeleteDirectDrawObject | Vernietigt een eerder gemaakt DirectDraw-apparaatobject in de kernelmodus. |
| NtGdiDdDeleteSurfaceObject |
NtGdiDdDeleteSurfaceObject verwijdert een eerder gemaakt oppervlakobject in de kernelmodus. |
| NtGdiDdDestroyD3DBuffer | Hiermee wordt een eerder toegewezen DirectDraw-oppervlakobject in de kernelmodus vernietigd dat is gemaakt met de dwCaps- lid van de DDSCAPS- structuur ingesteld op DDSCAPS_EXECUTEBUFFER. |
| NtGdiDdDestroyMoComp- | Hiermee wordt de bestuurder op de hoogte gebracht dat dit bewegingscompensatieobject niet meer wordt gebruikt. Het stuurprogramma moet nu alle benodigde opschoning uitvoeren. |
| NtGdiDdDestroySurface | Vernietigt een eerder toegewezen DirectDraw-oppervlakobject in de kernelmodus. |
| NtGdiDDEndMoCompFrame | Voltooit een gedecodeerd frame. |
| NtGdiDdFlip- | Zorgt ervoor dat het surface-geheugen dat is gekoppeld aan het doel en de huidige oppervlakken, worden uitgewisseld. |
| NtGdiDdFlipToGDISurface | Hiermee wordt het stuurprogramma op de hoogte gemaakt wanneer DirectDraw naar of van een GDI-oppervlak wordt geknipt. |
| NtGdiDdGetAvailDriverMemory- | Hiermee wordt de hoeveelheid vrij geheugen in alle videogeheugen-heaps opgevraagd. |
| NtGdiDdGetBltStatus | Hiermee wordt de status blit van het opgegeven oppervlak opgevraagd. |
| NtGdiDdGetDC- | Hiermee maakt u een DC voor het opgegeven oppervlak. |
| NtGdiDdGetDriverInfo | Hiermee wordt het stuurprogramma opgevraagd voor extra DirectDraw- en Direct3D-functionaliteit die door het stuurprogramma wordt ondersteund. |
| NtGdiDdGetDxHandle- | Retourneert de DirectX API-ingang in de kernelmodus die moet worden gebruikt in volgende aanroepen naar de ingangspunten in de kernelmodus die het DirectX API-mechanisme beheren. |
| NtGdiDdGetFlipStatus | Bepaalt of de meest recent aangevraagde flip op een oppervlak heeft plaatsgevonden. |
| NtGdiDdGetInternalMoCompInfo | Hiermee kan het stuurprogramma rapporteren dat het intern weergavegeheugen toewijst om bewegingscompensatie uit te voeren. |
| NtGdiDdGetMoCompBuffInfo | Hiermee kan het stuurprogramma opgeven hoeveel tussentijdse oppervlakken nodig zijn om de opgegeven GUID te ondersteunen, evenals de grootte, locatie en indeling van elk van deze oppervlakken. |
| NtGdiDdGetMoCompFormats | Geeft de niet-gecomprimeerde indelingen aan waarmee de hardware de gegevens kan decoderen. |
| NtGdiDdGetMoCompGuids- | Hiermee wordt het aantal GUID's opgehaald dat het stuurprogramma ondersteunt. |
| NtGdiDdGetScanLine- | Retourneert het nummer van de huidige fysieke scanregel. |
| NtGdiDdLock- | Vergrendelt een opgegeven gebied van surface memory en biedt een geldige aanwijzer naar een blok geheugen dat is gekoppeld aan een surface. |
| NtGdiDdLockD3D- | Wordt gebruikt om een opgegeven buffergeheugengebied te vergrendelen en een geldige aanwijzer te bieden voor een blok geheugen dat aan de buffer is gekoppeld. |
| NtGdiDdQueryDirectDrawObject | Query's uitvoeren op een eerder gemaakte kernelmodusweergave van een DirectDraw-object voor de mogelijkheden ervan. |
| NtGdiDdQueryMoCompStatus | Query's uitvoeren op de status van de meest recente renderingbewerking naar het opgegeven oppervlak. |
| NtGdiDdReenableDirectDrawObject | Hiermee schakelt u een Apparaatobject in de DirectDraw-kernelmodus opnieuw in na een modusschakelaar. |
| NtGdiDdReleaseDC- | Hiermee wordt de eerder gemaakte DC uitgebracht voor het aangegeven DirectDraw-oppervlakobject in de kernelmodus. |
| NtGdiDdRenderMoComp- | Geeft aan welk stuurprogramma macroblokkeringen moeten worden weergegeven door de oppervlakken op te geven die de macroblokkeringen bevatten, de verschuivingen in elk oppervlak waar de macroblokkeringen bestaan en de grootte van de macroblokgegevens die moeten worden weergegeven. |
| NtGdiDdResetVisrgn- | Wordt gebruikt om de gebruikersmodus in staat te stellen om een geldig inzicht te krijgen in de knipregio voor vensters op het bureaublad. Deze knipbewerking kan asynchroon worden gewijzigd vanuit het oogpunt van threads in de gebruikersmodus. |
| NtGdiDdSetColorKey | Hiermee stelt u de kleursleutelwaarde voor het opgegeven oppervlak in. |
| NtGdiDdSetExclusiveMode | Hiermee wordt het stuurprogramma op de hoogte brengt wanneer een DirectDraw-toepassing overschakelt naar of van de exclusieve modus. |
| NtGdiDdSetGammaRamp | Hiermee stelt u de gamma-ramp voor het apparaat in. |
| NtGdiDdSetOverlayPosition | Hiermee stelt u de positie voor een overlay in. |
| NtGdiDdUnattachSurface | Hiermee verwijdert u een bijlage, gemaakt met NtGdiDdAttachSurface, tussen twee oppervlakobjecten in de kernelmodus. |
| NtGdiDdUnlock | Laat de vergrendeling los op het opgegeven oppervlak. |
| NtGdiDdUnlockD3D- | Wordt gebruikt om een vergrendeling op een opgegeven buffergeheugen vrij te geven. |
| NtGdiDdUpdateOverlay- | De visuele kenmerken van een overlayoppervlak verplaatsen of wijzigen. |
| NtGdiDdWaitForVerticalBlank- | Retourneert de verticale lege status van het apparaat. |
Verwante onderwerpen