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) |