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-Grafikkernsubsystem das handle, das im hObject-Member der DXGKARGCB_GETHANDLEDATA-Struktur bereitgestellt wird, aus einem Grund wie den folgenden Möglichkeiten nicht in private Daten auflösen:

  • Ein ungültiges Handle wurde vom Anzeigetreiber für den Benutzermodus aufgrund eines böswilligen Angriffs oder eines anderen Fehlers empfangen.
  • Bei Zuordnungen gab es Probleme mit der Lebensdauer.

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

Hinweise

Wenn das DirectX-Grafikkernsubsystem die DxgkDdiCreateAllocation-Funktion des Anzeigeminiporttreibers aufruft, um Handles für Zuordnungen zu erstellen, kann der Anzeigeminiporttreiber private Daten für jedes Zuordnungshandle erstellen. Der Anzeigeminiporttreiber kann anschließend die DXGKCB_GETHANDLEDATA-Funktion aufrufen, um private Daten für jedes grafiksubsystemspezifische Handle abzurufen. Daher ist der Anzeigeminiporttreiber nicht erforderlich, um eine private Zuordnungshandle-Tabelle zu verwalten.

Wenn das DeviceSpecific-Bitfeldflag im Flags-Member 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 aus dem Aufruf seiner DxgkDdiOpenAllocation-Funktion zurückgegeben hat. Beachten Sie, dass das DeviceSpecific-Bitfeldflag nur gültig ist, wenn der Anzeigeminiporttreiber auch den Type-Member von DXGKARGCB_GETHANDLEDATA auf den DXGK_HANDLE_ALLOCATION Enumerationswert für das Handle im hObject-Member von DXGKARGCB_GETHANDLEDATA festlegt.

DXGKCB_XXX Funktionen werden von Dxgkrnl implementiert. Um diese Rückruffunktion zu verwenden, legen Sie die Member von DXGKARGCB_GETHANDLEDATA fest, und rufen Sie dann DxgkCbGetHandleData über den DXGKRNL_INTERFACE auf.

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
Unterstützte Mindestversion (Client) Windows Vista (WDDM 1.0)
Zielplattform Desktop
Kopfzeile d3dkmddi.h (einschließlich D3dkmddi.h)
IRQL < DISPATCH_LEVEL

Weitere Informationen

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE