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

任意のプロセスで開くことができる割り当てを作成するかどうかを指定します。 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 呼び出しを使用した標準割り当ての作成で次の手順を実行します。

    • MemSecure ExistingSysMem ポインター。
    • 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

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

StandardAllocation

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

ExistingSection

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

AllowNotZeroed

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

PhysicallyContiguous

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

NoKmdAccess

[入力]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
Header d3dkmthk.h (D3dkmthk.h を含む)

こちらもご覧ください

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION