D3DKMT_CREATEALLOCATIONFLAGS-Struktur (d3dkmthk.h)

D3DKMT_CREATEALLOCATIONFLAGS ist eine Struktur von Bitfeldern, die angeben, wie eine Zuordnung in einem Aufruf der Funktion D3DKMTCreateAllocation erstellt werden soll.

Syntax

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;

Member

CreateResource

Gibt an, ob eine gerätespezifische Ressource erstellt werden soll. Wenn Sie CreateShared festlegen, müssen Sie auch CreateResource festlegen.

CreateShared

Gibt an, ob eine Ressource erstellt werden soll, die für alle Geräte freigegeben ist. Wenn Sie CreateShared festlegen, müssen Sie auch CreateResource festlegen. Weitere Informationen zur Verwendung von CreateShared finden Sie im Abschnitt Hinweise.

NonSecure

Gibt an, ob eine Zuordnung erstellt werden soll, die von einem beliebigen Prozess geöffnet werden kann. Wenn NonSecure festgelegt ist, können sichere und nicht sichere Prozesse die Zuordnung öffnen.

CreateProtected

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden. Unterstützt ab Windows 7.

RestrictSharedAccess

Gibt an, ob eine Ressource erstellt werden soll, die für alle Geräte freigegeben ist, jedoch mit einigen Einschränkungen. Unterstützt ab Windows 7.

ExistingSysMem

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden. Unterstützt ab Windows 7. Die Einschränkungen von ExistingSysMem folgen:

  • ExistingSystemMem und ExistingSection können nicht beide für dieselbe Zuordnung festgelegt werden. ExistingSysMem ist festgelegt, StandardAllocation muss ebenfalls festgelegt werden.

  • ExistingSysMem muss ordnungsgemäß ausgerichtet sein. Der vorhandene Systemspeicherpuffer, den die D3D-Runtime dem Kernel bereitstellt, muss seitenbündig ausgerichtet sein und ein Vielfaches der Seitengröße aufweisen. Andernfalls schlägt der Kernel den Aufruf von D3DKMTCreateAllocation fehl.

  • Wenn der Kernel eine D3DKMDT_STANDARDALLOCATION_GDISURFACE Typ der Standardzuordnung erstellt:

    • Die Runtime stellt die Größe des vorhandenen Systempuffers bereit. Bei Verwendung dieser Größe erstellt der Kernel eine Standardzuordnung des GDISURFACE-Typs mit den folgenden Parametern, die KMDs richtig verstehen:

      D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer
      D3DKMDT_GDISURFACEDATA::Height = 1
      D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN
      D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
      
  • Schutz vor Dem ExistingSysMem-Zeiger, der auf eine DXGALLOCATION zeigt, die MemRotated ist

    Der Kernel muss vor dem Szenario schützen, in dem der Benutzermodus eine vorhandene DXGALLOCATION sperrt und den resultierenden CPU-Zeiger verwendet, um eine ExistingSysMem-Standardzuordnung zu erstellen. Dieser Fall ist ungültig, wenn die DXGALLOCATION VAD MEM_ROTATE ist, d. h. wenn die Zuordnung in VRAM erfolgen könnte. Der Kernel führt die folgenden Schritte im Aufruf create standard allocation with ExistingSysMem (Standardzuordnung mit ExistingSysMem erstellen) aus:

    • MemSecure, der ExistingSysMem-Zeiger.
    • VirtualAbfragen des Arbeitsspeichers. Wenn Attribute MEM_ROTATE, schlägt der Aufruf fehl.
    • MemSecure wird nur freigegeben, wenn diese Zuordnung freigegeben wird, um zu verhindern, dass der Arbeitsspeicher hinter dem Kernelrücken geändert wird.

NtSecuritySharing

Gibt an, ob die Zuordnung für ein NT-Handle freigegeben wird, d. h. es verfügt nicht über ein globales D3DKMT_HANDLE Kernelmodushandle für die Ressource.

Wenn NtSecuritySharing auf 1 (TRUE) festgelegt ist:

  • Die Zuordnung wird mithilfe der D3DKMTShareObjects-Funktion freigegeben, verfügt aber nicht über ein globales D3DKMT_HANDLE Handle für die Ressource.
  • CreateShared muss auf 1 festgelegt werden.

Weitere Informationen zur Verwendung von NtSecuritySharing finden Sie im Abschnitt Hinweise. Unterstützt ab Windows 8.

ReadOnly

Gibt an, ob die Zuordnung nur aus gelesen werden kann. Unterstützt ab Windows 8.

CreateWriteCombined

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden. Unterstützt ab Windows 8.

CreateCached

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden. Unterstützt ab Windows 8.

SwapChainBackBuffer

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden. Unterstützt ab Windows 8.

CrossAdapter

Wenn festgelegt, gibt an, dass es sich bei der Ressource um eine freigegebene adapterübergreifende Ressource handelt.

OpenCrossAdapter

Wenn festgelegt, gibt an, dass die Ressource durch Öffnen einer adapterübergreifenden Ressource erstellt wird. Kann nicht verwendet werden, wenn die Zuordnung über den Benutzermodus erstellt wird. Unterstützt ab Windows 8.1 (WDDM 1.3).

PartialSharedCreation

Gibt an, ob die Zuordnung als teilweise freigegebene Zuordnung erstellt wird. Unterstützt ab Windows 8.1 (WDDM 1.3).

Zeroed

[out] Legt fest, wann die Zuordnung mit nullen Seiten erfüllt wurde. Unterstützt ab Windows 8 (WDDM 1.3).

WriteWatch

[in] Gibt an, ob die Zuordnung mit aktivierter Schreibüberwachung erstellt werden soll. Unterstützt ab Windows 8.1 (WDDM 1.3).

StandardAllocation

[in] Wenn festgelegt, weist Dxgkrnl an, eine Standardzuordnung mit pStandardAllocation anstelle von pPrivateDriverData zu erstellen. Entweder ExistingSysMem oder ExistingSection (aber nicht beide) muss ebenfalls festgelegt werden, wenn StandardAllocation festgelegt ist. Darüber hinaus müssen beim Erstellen einer StandardAllocation auch die Flags CreateShared und CrossAdapter festgelegt werden. Unterstützt ab Windows 10 Version 1709 (WDDM 2.3).

ExistingSection

[in] Wenn festgelegt, weist Dxgkrnl an, das Abschnittshandle (hSection) anstelle des Systemspeicherzeigers (pSystemMem) zu verwenden. ExistingSystemMem und ExistingSection können nicht beide für dieselbe Zuordnung festgelegt werden. Wenn ExistingSection festgelegt ist, muss auch StandardAllocation festgelegt werden. Unterstützt ab Windows 10 Version 1709 (WDDM 2.3).

AllowNotZeroed

[in] Gibt an, dass die Zuordnung erstellt werden kann, ohne dass die Seiten auf null gesetzt werden. Unterstützt ab Windows 10, Version 1903 (WDDM 2.6).

PhysicallyContiguous

[in] Gibt an, dass die Zuordnung physisch zusammenhängend sein muss. Unterstützt ab Windows 10, Version 2004 (WDDM 2.7).

NoKmdAccess

[in] Gibt an, dass der KMD nicht über die Zuordnung benachrichtigt wird. Unterstützt ab Windows 10, Version 2004 (WDDM 2.7).

SharedDisplayable

Gibt an, dass es sich bei der Zuordnung um eine freigegebene, anzuzeigende Ressource handelt. Unterstützt ab Windows 11 (WDDM 3.0).

NoImplicitSynchronization

Reserved

Unterstützt ab Windows 8.

Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

Hinweise

Objekte, die mit der D3DKMTShareObjects-Funktion freigegeben werden sollen, müssen zuerst mit festgelegtem NtSecuritySharing-Flagwert erstellt werden. Dieser Flagwert ist in den strukturen D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS und D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS verfügbar.

Treiber sollten die folgenden Richtlinien für D3DKMT_CREATEALLOCATIONFLAGS Freigabeflags befolgen:

  • Wenn die Zuordnung nicht freigegeben ist, legen Sie sowohl CreateShared als auch NtSecuritySharing auf 0 fest.
  • Wenn die Zuordnung für einen D3DKMT_HANDLE Datentyp freigegeben wird, legen Sie CreateShared = 1 und NtSecuritySharing = 0 fest.
  • Wenn die Zuordnung für ein NT-Handle für den Prozess freigegeben wird (und ohne ein globales D3DKMT_HANDLE Kernelmodushandle für die Ressource), legen Sie CreateShared = 1 und NtSecuritySharing = 1 fest.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Kopfzeile d3dkmthk.h (include D3dkmthk.h)

Weitere Informationen

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION