Bagikan melalui


DXGKCB_GETHANDLEDATA fungsi panggilan balik (d3dkmddi.h)

DXGKCB_GETHANDLEDATA mengambil data privat yang terkait dengan alokasi.

Sintaks

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

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

Parameter

unnamedParam1

[in] Penunjuk ke struktur DXGKARGCB_GETHANDLEDATA yang menjelaskan data alokasi untuk diambil.

Mengembalikan nilai

DXGKCB_GETHANDLEDATA mengembalikan buffer yang berisi data privat untuk alokasi.

Jika DXGKCB_GETHANDLEDATA mengembalikan penunjuk NULL, subsistem kernel grafis DirectX tidak dapat menyelesaikan handel yang disediakan dalam anggota hObject dari struktur DXGKARGCB_GETHANDLEDATA ke data privat karena alasan seperti kemungkinan berikut:

  • Handel yang tidak valid diterima dari driver tampilan mode pengguna karena serangan berbahaya atau beberapa bug lainnya.
  • Alokasi memiliki masalah seumur hidup.

Jika penunjuk NULL dikembalikan, driver miniport tampilan harus gagal menjalankan fungsi DDI yang saat ini berjalan dengan STATUS_INVALID_HANDLE.

Keterangan

Ketika subsistem kernel grafis DirectX memanggil fungsi DxgkDdiCreateAllocation driver miniport tampilan untuk membuat handel ke alokasi, driver miniport tampilan dapat membuat data pribadi untuk setiap handel alokasi. Driver miniport tampilan kemudian dapat memanggil fungsi DXGKCB_GETHANDLEDATA untuk mengambil data pribadi untuk setiap handel khusus subsistem grafis. Oleh karena itu, driver miniport tampilan tidak diperlukan untuk mempertahankan tabel handel alokasi privat.

Jika bendera bidang bit DeviceSpecific diatur di anggota Bendera struktur DXGKARGCB_GETHANDLEDATA yang ditunjuk pData , DXGKCB_GETHANDLEDATA mengembalikan data khusus perangkat yang terkait dengan handel khusus perangkat yang dikembalikan driver dari panggilan ke fungsi DxgkDdiOpenAllocation-nya . Perhatikan bahwa bendera bidang bit DeviceSpecific hanya valid jika driver miniport tampilan juga mengatur anggota JenisDXGKARGCB_GETHANDLEDATA ke nilai enumerasi DXGK_HANDLE_ALLOCATION untuk handel di anggota hObjectDXGKARGCB_GETHANDLEDATA.

DXGKCB_XXX diimplementasikan oleh Dxgkrnl. Untuk menggunakan fungsi panggilan balik ini, atur anggota DXGKARGCB_GETHANDLEDATA lalu panggil DxgkCbGetHandleData melalui DXGKRNL_INTERFACE.

Contoh

Contoh kode berikut menunjukkan implementasi DxgkDdiOpenAllocation di mana DXGKCB_GETHANDLEDATA dipanggil.

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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista (WDDM 1.0)
Target Platform Desktop
Header d3dkmddi.h (termasuk D3dkmddi.h)
IRQL < DISPATCH_LEVEL

Lihat juga

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE