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 |