D3DKMTGetSharedPrimaryHandle-Funktion (d3dkmthk.h)
Die D3DKMTGetSharedPrimaryHandle-Funktion ruft das globale freigegebene Handle für die primäre Oberfläche ab.
Syntax
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
Parameter
unnamedParam1
pData [in, out]
Ein Zeiger auf eine D3DKMT_GETSHAREDPRIMARYHANDLE-Struktur , die die Parameter beschreibt, die zum Abrufen des freigegebenen Handles erforderlich sind.
Rückgabewert
D3DKMTGetSharedPrimaryHandle gibt einen der folgenden Werte zurück:
Rückgabecode | Beschreibung |
---|---|
STATUS_SUCCESS | Das Handle wurde erfolgreich abgerufen. |
STATUS_DEVICE_REMOVED | Die Grafikkarte wurde angehalten, oder das Anzeigegerät wurde zurückgesetzt. |
STATUS_INVALID_PARAMETER | Die Parameter wurden überprüft und als falsch ermittelt. |
Diese Funktion gibt möglicherweise auch andere NTSTATUS-Werte zurück.
Hinweise
Die primäre Oberfläche wird in der Regel vom Microsoft DirectX-Grafikkernsubsystem (Dxgkrnl.sys) erstellt, wenn sich der Anzeigemodus ändert (obwohl in einigen Situationen die freigegebene primäre Instanz möglicherweise nicht vorhanden ist). Wenn eine OpenGL-Anwendung versucht, eine primäre Oberfläche zu erstellen, muss sie in der Regel die vorhandene freigegebene primäre Oberfläche öffnen. Zum Öffnen des freigegebenen primären Schlüssels muss die OpenGL-Anwendung D3DKMTGetSharedPrimaryHandle verwenden, um das globale freigegebene Handle für die primäre Oberfläche abzurufen.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein OpenGL-ICD D3DKMTGetSharedPrimaryHandle verwenden kann, um eine primäre Oberfläche zu erstellen, indem das freigegebene Handle geöffnet wird.
HRESULT OpenSharedPrimarySurface(D3DKMT_HANDLE hAdapter,
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
D3DKMT_HANDLE hDevice,
VOID* pPrivateDriverData,
UINT PrivateDriverDataSize,
D3DKMT_HANDLE* phResource,
D3DKMT_HANDLE* phAllocation)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO AllocationInfo;
D3DKMT_GETSHAREDPRIMARYHANDLE GetHandleData;
*phResource = 0;
*phAllocation = 0;
// Get the shared handle.
GetHandleData.hAdapter = hAdapter;
GetHandleData.VidPnSourceId = VidPnSourceId;
if (!NT_SUCCESS((*pfnKTGetSharedPrimaryHandle)(&GetHandleData))) {
return E_FAIL;
}
// Was a shared primary created by the kernel?
if (GetHandleData.hSharedPrimary == NULL) {
return E_FAIL;
}
CreateAllocation.hDevice = hDevice;
CreateAllocation.hResource = NULL;
CreateAllocation.hGlobalShare = GetHandleData.hSharedPrimary;
CreateAllocation.Flags.CreateResource =
CreateAllocation.Flags.CreateShared = TRUE;
CreateAllocation.pPrivateRuntimeData = NULL;
CreateAllocation.PrivateRuntimeDataSize = 0;
CreateAllocation.pPrivateDriverData = NULL;
CreateAllocation.PrivateDriverDataSize = 0;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = NULL;
AllocationInfo.pPrivateDriverData = pPrivateData;
AllocationInfo.PrivateDriverDataSize = PrivateDataSize;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
*phResource = CreateAllocation.hResource;
*phAllocation = AllocationInfo.hAllocation;
return S_OK;
}
return E_FAIL;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Zielplattform | Universell |
Header | d3dkmthk.h (include D3dkmthk.h) |
Bibliothek | Gdi32.lib |
DLL | Gdi32.dll |