次の方法で共有


D3DKMT_CREATEALLOCATIONFLAGS構造体 (d3dkmthk.h)

D3DKMT_CREATEALLOCATIONFLAGS は、D3DKMTCreateAllocation 関数の呼び出しで割り当てを作成する方法を指定するビット フィールドの構造です。

構文

typedef struct _D3DKMT_CREATEALLOCATIONFLAGS {
  UINT CreateResource : 1;
  UINT CreateShared : 1;
  UINT NonSecure : 1;
  UINT CreateProtected : 1;
  UINT RestrictSharedAccess : 1;
  UINT ExistingSysMem : 1;
  UINT NtSecuritySharing : 1;
  UINT ReadOnly : 1;
  UINT CreateWriteCombined : 1;
  UINT CreateCached : 1;
  UINT SwapChainBackBuffer : 1;
  UINT CrossAdapter : 1;
  UINT OpenCrossAdapter : 1;
  UINT PartialSharedCreation : 1;
  UINT Zeroed : 1;
  UINT WriteWatch : 1;
  UINT StandardAllocation : 1;
  UINT ExistingSection : 1;
  UINT AllowNotZeroed : 1;
  UINT PhysicallyContiguous : 1;
  UINT NoKmdAccess : 1;
  UINT SharedDisplayable : 1;
  UINT NoImplicitSynchronization : 1;
#if ...
  UINT Reserved : 9;
#elif
  UINT Reserved : 10;
#elif
  UINT Reserved : 11;
#elif
  UINT Reserved : 13;
#elif
  UINT Reserved : 14;
#elif
  UINT Reserved : 16;
#elif
  UINT Reserved : 21;
#else
  UINT Reserved : 26;
#endif
} D3DKMT_CREATEALLOCATIONFLAGS;

メンバーズ

CreateResource

デバイス固有のリソースを作成するかどうかを指定します。 CreateShared 設定する場合は、CreateResource 設定する必要もあります。

CreateShared

すべてのデバイスで共有されるリソースを作成するかどうかを指定します。 CreateShared 設定する場合は、CreateResource 設定する必要もあります。 CreateShared 使用する方法の詳細については、「解説」セクションを参照してください。

NonSecure

任意のプロセスで開くことができる割り当てを作成するかどうかを指定します。 セキュリティで保護されていない 設定されている場合、セキュリティで保護されたプロセスとセキュリティで保護されていないプロセスが割り当てを開くことができます。

CreateProtected

このメンバーは予約されており、0 に設定する必要があります。 Windows 7 以降でサポートされています。

RestrictSharedAccess

すべてのデバイスで共有されているリソースを作成するかどうかを指定しますが、一部の制限があります。 Windows 7 以降でサポートされています。

ExistingSysMem

このメンバーは予約されており、0 に設定する必要があります。 Windows 7 以降でサポートされています。 ExistingSysMemの制限事項は次のとおりです。

  • ExistingSystemMemExistingSection は、同じ割り当てに対して両方を設定することはできません。 ExistingSysMem が設定 は、StandardAllocation も設定する必要があります。

  • ExistingSysMem が正しく配置されている必要があります。 D3D ランタイムがカーネルに提供する既存のシステム メモリ バッファーは、ページアラインとページ サイズの倍数である必要があります。それ以外の場合、カーネルは D3DKMTCreateAllocation呼び出しに失敗します。

  • カーネルが標準割り当てのD3DKMDT_STANDARDALLOCATION_GDISURFACE型を作成する場合:

    • ランタイムは、既存のシステム バッファーのサイズを提供します。 このサイズを使用して、カーネルは、KMD が正しく理解する次のパラメーターを持つ GDISURFACE 型の標準割り当てを作成します。

      D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer
      D3DKMDT_GDISURFACEDATA::Height = 1
      D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN
      D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
      
  • MemRotated である DXGALLOCATION を指す ExistingSysMem ポインターから保護する

    カーネルは、ユーザー モードが既存の DXGALLOCATION をロックし、結果の CPU ポインターを使用して ExistingSysMem 標準割り当てを作成するシナリオから保護する必要があります。 DXGALLOCATION VAD がMEM_ROTATEされている場合、つまり割り当てが VRAM にある可能性がある場合、このケースは無効です。 カーネルは、ExistingSysMem 呼び出しによる標準割り当ての作成で次の手順を実行します。

    • ExistingSysMem ポインターを MemSecure します。
    • メモリを VirtualQuery します。 属性にMEM_ROTATEが含まれている場合、呼び出しは失敗します。
    • MemSecure は、カーネルの背後でメモリが変更されないように、この割り当てが解放された場合にのみ解放されます。

NtSecuritySharing

割り当てが NT ハンドルと共有されるかどうかを指定します。つまり、リソースに対するグローバル D3DKMT_HANDLE カーネル モード ハンドルがないことを意味します。

NtSecuritySharing が 1 (TRUE) に設定されている場合:

  • 割り当ては、D3DKMTShareObjects 関数を使用して共有されますが、リソースに対するグローバル D3DKMT_HANDLE ハンドルはありません。
  • CreateShared を 1 に設定する必要があります。

ntSecuritySharing 使用する方法の詳細については、「解説」セクションを参照してください。 Windows 8 以降でサポートされています。

ReadOnly

割り当てからのみ読み取ることができるかどうかを指定します。 Windows 8 以降でサポートされています。

CreateWriteCombined

このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。

CreateCached

このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。

SwapChainBackBuffer

このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。

CrossAdapter

設定されている場合は、リソースがアダプター間リソース の共有であることを示します。

OpenCrossAdapter

設定されている場合は、クロス アダプター リソースを開いてリソースが作成されることを示します。 割り当てがユーザー モードから作成されるときには使用できません。 Windows 8.1 (WDDM 1.3) 以降でサポートされています。

PartialSharedCreation

割り当てを部分的な共有割り当てとして作成するかどうかを指定します。 Windows 8.1 (WDDM 1.3) 以降でサポートされています。

Zeroed

[out]割り当てがゼロページで満たされたタイミングを設定します。 Windows 8 (WDDM 1.3) 以降でサポートされます。

WriteWatch

[in]書き込みウォッチを有効にして割り当てを作成するかどうかを示します。 Windows 8.1 (WDDM 1.3) 以降でサポートされています。

StandardAllocation

[in]設定すると、dxgkrnl 、pPrivateDriverData ではなく、pStandardAllocation を使用して標準割り当てを作成するように指示。 StandardAllocation が設定されている場合 、ExistingSysMem または ExistingSection (両方ではなく) も設定 必要があります。 さらに、StandardAllocationを作成する場合は、CreateSharedCrossAdapter フラグも設定する必要があります。 Windows 10 バージョン 1709 (WDDM 2.3) 以降でサポートされています。

ExistingSection

[in]設定すると、システム メモリ ポインター (pSystemMem) の代わりにセクション ハンドル (hSection) を使用するように Dxgkrnl に指示します。 ExistingSystemMemExistingSection は、同じ割り当てに対して両方を設定することはできません。 ExistingSection 設定されている場合は、StandardAllocation も設定する必要があります。 Windows 10 バージョン 1709 (WDDM 2.3) 以降でサポートされています。

AllowNotZeroed

[in]ページをゼロにせずに割り当てを作成できることを示します。 Windows 10 バージョン 1903 (WDDM 2.6) 以降でサポートされています。

PhysicallyContiguous

[in]割り当てが物理的に連続している必要があることを示します。 Windows 10 バージョン 2004 (WDDM 2.7) 以降でサポートされています。

NoKmdAccess

[in]割り当てについて KMD に通知されていないことを示します。 Windows 10 バージョン 2004 (WDDM 2.7) 以降でサポートされています。

SharedDisplayable

割り当てが、表示可能な共有リソースであることを示します。 Windows 11 (WDDM 3.0) 以降でサポートされています。

NoImplicitSynchronization

Reserved

Windows 8 以降でサポートされています。

このメンバーは予約されており、0 に設定する必要があります。

備考

D3DKMTShareObjects 関数を使用して共有するオブジェクトは、まず、NtSecuritySharing フラグ値を設定して作成する必要があります。 このフラグ値は、D3DKMT_CREATEALLOCATIONFLAGSD3DKMT_CREATEKEYEDMUTEX2_FLAGS、および D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 構造体で使用できます。

ドライバーは、D3DKMT_CREATEALLOCATIONFLAGS 共有フラグに関する次のガイドラインに従う必要があります。

  • 割り当てが共有されていない場合は、CreateSharedNtSecuritySharing の両方を 0 に設定します。
  • 割り当てが D3DKMT_HANDLE のデータ型と共有されている場合は、CreateShared = 1 と NtSecuritySharing = 0 設定します。
  • 割り当てがプロセスに対する NT ハンドルと共有されている場合 (リソースに対するグローバル D3DKMT_HANDLE カーネル モード ハンドルがない場合)、CreateShared = 1 設定し、NtSecuritySharing = 1 します。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista
ヘッダー d3dkmthk.h (D3dkmthk.h を含む)

関連項目

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION