Freigeben über


DXGKCB_GETHANDLEDATA Rückruffunktion (d3dkmddi.h)

DXGKCB_GETHANDLEDATA ruft die privaten Daten ab, die einer Zuordnung zugeordnet sind.

Syntax

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

VOID * DxgkcbGethandledata(
  IN_CONST_PDXGKARGCB_GETHANDLEDATA unnamedParam1
)
{...}

Parameter

unnamedParam1

[in] Ein Zeiger auf eine DXGKARGCB_GETHANDLEDATA Struktur, die die abzurufenden Zuordnungsdaten beschreibt.

Rückgabewert

DXGKCB_GETHANDLEDATA gibt einen Puffer zurück, der die privaten Daten für die Zuordnung enthält.

Wenn DXGKCB_GETHANDLEDATA einen NULL-Zeiger zurückgibt, konnte das DirectX-Grafik-Kernelsubsystem das Handle, das im hObject Member der DXGKARGCB_GETHANDLEDATA-Struktur bereitgestellt wird, aus einem Grund wie den folgenden Möglichkeiten nicht auflösen:

  • Ein ungültiger Handle wurde aufgrund eines böswilligen Angriffs oder eines anderen Fehlers vom Anzeigetreiber des Benutzermodus empfangen.
  • Zuordnungen hatten Lebenszyklusprobleme.

Wenn ein NULL-Zeiger zurückgegeben wird, sollte der Anzeigeminiporttreiber die derzeit ausgeführte DDI-Funktion mit STATUS_INVALID_HANDLE nicht ausführen.

Bemerkungen

Wenn das DirectX-Grafik-Kernelsubsystem die DxgkDdiCreateAllocation Funktion aufruft, um Handles für Zuordnungen zu erstellen, kann der Miniporttreiber private Daten für jeden Zuordnungshandle erstellen. Der Miniporttreiber kann anschließend die DXGKCB_GETHANDLEDATA-Funktion aufrufen, um private Daten für jedes grafiksubsystemspezifische Handle abzurufen. Daher ist der Anzeige-Miniporttreiber nicht erforderlich, um eine private Zuordnungshandle-Tabelle beizubehalten.

Wenn das DeviceSpecific- Bitfeld-Flag im Flags Element der DXGKARGCB_GETHANDLEDATA-Struktur festgelegt ist, auf die pData- verweist, gibt DXGKCB_GETHANDLEDATA die gerätespezifischen Daten zurück, die dem gerätespezifischen Handle zugeordnet sind, den der Treiber vom Aufruf an die DxgkDdiOpenAllocation-Funktion zurückgegeben hat. Beachten Sie, dass das DeviceSpecific- Bitfeld-Flag nur gültig ist, wenn der Anzeigeminiporttreiber auch den Type Member von DXGKARGCB_GETHANDLEDATA auf den DXGK_HANDLE_ALLOCATION Enumerationswert für den Handle im hObject Member von DXGKARGCB_GETHANDLEDATAfestlegt.

DXGKCB_XXX Funktionen werden von Dxgkrnlimplementiert. Um diese Rückruffunktion zu verwenden, legen Sie die Member von DXGKARGCB_GETHANDLEDATA fest, und rufen Sie dann DxgkCbGetHandleData über die DXGKRNL_INTERFACEauf.

Beispiel

Das folgende Codebeispiel zeigt eine Implementierung von DxgkDdiOpenAllocation-, in der DXGKCB_GETHANDLEDATA aufgerufen wird.

NTSTATUS
DxgkDdiOpenAllocation(
    VOID    *InterfaceContext,
    CONST DXGKARG_OPENALLOCATION    *pDDIDAData)
{
    DWORD dwIdx;
    DXGKRNL_INTERFACE              *pCallback;
    PR2D3DDevice                    pR2D3DDev;
    PHW_DEVICE_EXTENSION            pAdapter;

    pR2D3DDev = (PR2D3DDevice)InterfaceContext;
    pAdapter  = (PHW_DEVICE_EXTENSION)pR2D3DDev->pAdapter;
    pCallback = &(pAdapter->ddiCallback);

    for (dwIdx=0; dwIdx < pDDIDAData->NumAllocations; dwIdx++) {
        DXGKARGCB_GETHANDLEDATA  getHandleData = {0};
        R2AllocationInfo*  pAllocInfo;

        getHandleData.hObject = pDDIDAData->pOpenAllocation[dwIdx].hAllocation;
        getHandleData.Type    = DXGK_HANDLE_ALLOCATION;
        pAllocInfo = (PR2AllocationInfo)pCallback->DxgkCbGetHandleData(&getHandleData);
        pDDIDAData->pOpenAllocation[dwIdx].hDeviceSpecificAllocation = (HANDLE)pAllocInfo;
        pAllocInfo->vidMemData.hAllocation = pDDIDAData->pOpenAllocation[dwIdx].hAllocation;
    }
    return STATUS_SUCCESS;
}

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista (WDDM 1.0)
Zielplattform- Desktop
Header- d3dkmddi.h (einschließlich D3dkmddi.h)
IRQL- < DISPATCH_LEVEL

Siehe auch

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation-

DXGKRNL_INTERFACE