DXGKCB_GETHANDLEDATA回呼函式 (d3dkmddi.h)

DXGKCB_GETHANDLEDATA 擷取與配置相關聯的私人數據。

語法

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

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

參數

unnamedParam1

[in]描述要擷取之配置數據的 DXGKARGCB_GETHANDLEDATA 結構的指標。

傳回值

DXGKCB_GETHANDLEDATA 會傳回緩衝區,其中包含配置的私人數據。

如果DXGKCB_GETHANDLEDATA傳回 NULL 指標,DirectX 圖形核心子系統無法解析DXGKARGCB_GETHANDLEDATA結構之 hObject 成員中提供的句柄,原因如下:

  • 因為惡意攻擊或其他錯誤,所以從使用者模式顯示驅動程式收到無效的句柄。
  • 配置有存留期問題。

如果傳回 NULL 指標,顯示迷你埠驅動程式應該會失敗其目前執行的 DDI 函式,並STATUS_INVALID_HANDLE。

備註

當 DirectX 圖形核心子系統呼叫 display miniport 驅動程式的 DxgkDdiCreateAllocation 函式來建立配置句柄時,顯示迷你埠驅動程式可以為每個配置句柄建立私人數據。 顯示迷你埠驅動程式隨後可以呼叫 DXGKCB_GETHANDLEDATA 函式,以擷取每個圖形子系統特定句柄的私人數據。 因此,不需要顯示迷你埠驅動程序來維護私人配置句柄數據表。

如果在 pData 指向之 DXGKARGCB_GETHANDLEDATA 結構的 Flags 成員中設定 DeviceSpecific 位字段旗標,DXGKCB_GETHANDLEDATA會傳回與驅動程式從呼叫 DxgkDdiOpenAllocation 函式傳回之裝置特定句柄相關聯的裝置特定數據。 請注意,只有在顯示迷你埠驅動程式也會將 DXGKARGCB_GETHANDLEDATAType 成員設定為 DXGKARGCB_GETHANDLEDATA 之 hObject 成員中句柄的 DXGK_HANDLE_ALLOCATION 列舉值時,DeviceSpecific 位字段旗標才有效。

DXGKCB_XXX 函式是由 Dxgkrnl 實作。 若要使用此回呼函式,請設定 DXGKARGCB_GETHANDLEDATA 的成員,然後透過 DXGKRNL_INTERFACE呼叫 DxgkCbGetHandleData

範例

下列程式代碼範例顯示呼叫DXGKCB_GETHANDLEDATA的 DxgkDdiOpenAllocation 實作。

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;
}

規格需求

需求
最低支援的用戶端 Windows Vista (WDDM 1.0)
目標平台 桌面
標頭 d3dkmddi.h (包含 D3dkmddi.h)
IRQL < DISPATCH_LEVEL

另請參閱

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE