D3DKMTGetSharedPrimaryHandle 関数 (d3dkmthk.h)
D3DKMTGetSharedPrimaryHandle 関数は、プライマリ サーフェスのグローバル共有ハンドルを取得します。
構文
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
パラメーター
unnamedParam1
pData [in, out]
共有ハンドルを取得するために必要なパラメーターを記述する D3DKMT_GETSHAREDPRIMARYHANDLE 構造体へのポインター。
戻り値
D3DKMTGetSharedPrimaryHandle は、次のいずれかの値を返します。
リターン コード | 形容 |
---|---|
STATUS_SUCCESS | ハンドルが正常に取得されました。 |
STATUS_DEVICE_REMOVED | グラフィックス アダプターが停止したか、ディスプレイ デバイスがリセットされました。 |
STATUS_INVALID_PARAMETER | パラメーターが検証され、正しくないと判断されました。 |
この関数は、他の NTSTATUS 値を返す場合もあります。
備考
プライマリ サーフェスは通常、表示モードが変更されるたびに Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) によって作成されます (ただし、状況によっては、共有プライマリが存在しない可能性があります)。 OpenGL アプリケーションがプライマリ サーフェスの作成を試みる場合は、通常、既存の共有プライマリを開く必要があります。 共有プライマリを開くには、OpenGL アプリケーション D3DKMTGetSharedPrimaryHandle を使用して、プライマリ サーフェスのグローバル共有ハンドルを取得する必要があります。
例
次のコード例は、OpenGL ICD が D3DKMTGetSharedPrimaryHandle を使用して、共有ハンドルを開いてプライマリ サーフェスを作成する方法を示しています。
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;
}
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista |
ターゲット プラットフォーム の | 万国 |
ヘッダー | d3dkmthk.h (D3dkmthk.h を含む) |
ライブラリ | Gdi32.lib |
DLL | Gdi32.dll |