共用方式為


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

這個成員是保留的,而且應該設定為零。 從 Windows 7 開始支援。

RestrictSharedAccess

指定是否要建立跨所有裝置共享的資源,但有一些限制。 從 Windows 7 開始支援。

ExistingSysMem

這個成員是保留的,而且應該設定為零。 從 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

這個成員是保留的,而且應該設定為零。 從 Windows 8 開始支援。

CreateCached

這個成員是保留的,而且應該設定為零。 從 Windows 8 開始支援。

SwapChainBackBuffer

這個成員是保留的,而且應該設定為零。 從 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 使用 pStandardAllocation 建立標準配置,而不是 pPrivateDriverData。 如果已設定 StandardAllocation則必須先設定 ExistingSysMemExistingSection (,但不能同時同時設定) 。 此外,建立 StandardAllocation 時,也必須設定 CreateSharedCrossAdapter 旗標。 從 Windows 10 版本 1709 (WDDM 2.3) 開始支援。

ExistingSection

[in]設定時,會指示 Dxgkrnl 使用區段句柄 (hSection) ,而不是 (pSystemMem) 的系統記憶體指標。 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 開始支援。

這個成員是保留的,而且應該設定為零。

備註

必須先使用 D3DKMTShareObjects 函式來建立物件,並設定 NtSecuritySharing 旗標值。 此旗標值可在 D3DKMT_CREATEALLOCATIONFLAGSD3DKMT_CREATEKEYEDMUTEX2_FLAGSD3DDDI_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