struttura D3DKMT_CREATEALLOCATIONFLAGS (d3dkmthk.h)
D3DKMT_CREATEALLOCATIONFLAGS è una struttura di campi di bit che specificano come creare un'allocazione in una chiamata alla funzioneD3DKMTCreateAllocation.
Sintassi
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;
Membri
CreateResource
Specifica se creare una risorsa specifica del dispositivo. Se si imposta CreateShared, è necessario impostare anche CreateResource.
CreateShared
Specifica se creare una risorsa condivisa in tutti i dispositivi. Se si imposta CreateShared, è necessario impostare anche CreateResource. Per altre informazioni sull'uso di CreateShared, vedere la sezione Osservazioni.
NonSecure
Specifica se creare un'allocazione che può essere aperta da qualsiasi processo. Se è impostata non protetta, i processi sicuri e non sicuri possono aprire l'allocazione.
CreateProtected
Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 7.
RestrictSharedAccess
Specifica se creare una risorsa condivisa in tutti i dispositivi, ma con alcune restrizioni. Supportato a partire da Windows 7.
ExistingSysMem
Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 7. Le limitazioni di ExistingSysMemseguono:
ExistingSystemMem e ExistingSection non possono essere entrambi impostati per la stessa allocazione. è impostato ExistingSysMem, è necessario impostare anche StandardAllocation.
ExistingSysMem deve essere allineato correttamente. Il buffer di memoria di sistema esistente fornito dal runtime D3D al kernel deve essere allineato alla pagina e un multiplo di dimensioni della pagina; in caso contrario, il kernel non riesce a eseguire la chiamata a D3DKMTCreateAllocation.
Quando il kernel crea un D3DKMDT_STANDARDALLOCATION_GDISURFACE tipo di allocazione standard:
Il runtime fornisce le dimensioni del buffer di sistema esistente. Usando questa dimensione, il kernel crea un'allocazione standard del tipo GDISURFACE con i parametri seguenti che i KMD comprendono correttamente:
D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer D3DKMDT_GDISURFACEDATA::Height = 1 D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
Protezione da un puntatore ExistingSysMem che punta a DXGALLOCATION, che è MemRotated
Il kernel deve proteggersi dallo scenario in cui la modalità utente blocca un DXGALLOCATION esistente e usa il puntatore della CPU risultante per creare un'allocazione standard ExistingSysMem. Questo caso non è valido se il VAD DXGALLOCATION è MEM_ROTATE, ad esempio se l'allocazione potrebbe essere in VRAM. Il kernel esegue i passaggi seguenti nella creazione dell'allocazione standard con la chiamata ExistingSysMem:
- MemSecure il puntatore ExistingSysMem.
- VirtualQuery la memoria. Se gli attributi contengono MEM_ROTATE la chiamata non riesce.
- MemSecure viene rilasciato solo quando questa allocazione viene liberata per impedire che la memoria venga modificata dietro il retro del kernel.
NtSecuritySharing
Specifica se l'allocazione viene condivisa con un handle NT, ovvero non dispone di un handle globale D3DKMT_HANDLE modalità kernel per la risorsa.
Se NtSecuritySharing è impostato su 1 (TRUE):
- L'allocazione viene condivisa usando la funzione D3DKMTShareObjects, ma non dispone di un handle D3DKMT_HANDLE globale per la risorsa.
- il CreateShared deve essere impostato su 1.
Per altre informazioni sull'uso di NtSecuritySharing, vedere la sezione Osservazioni. Supportato a partire da Windows 8.
ReadOnly
Specifica se l'allocazione può essere letta solo da. Supportato a partire da Windows 8.
CreateWriteCombined
Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.
CreateCached
Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.
SwapChainBackBuffer
Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.
CrossAdapter
Se impostato, indica che la risorsa è una risorsa condivisa tra adattatori.
OpenCrossAdapter
Se impostato, indica che la risorsa viene creata aprendo una risorsa tra adattatori. Non è possibile usare quando l'allocazione viene creata dalla modalità utente. Supportato a partire da Windows 8.1 (WDDM 1.3).
PartialSharedCreation
Specifica se l'allocazione viene creata come allocazione parziale condivisa. Supportato a partire da Windows 8.1 (WDDM 1.3).
Zeroed
[out] Impostare quando l'allocazione è stata soddisfatta con pagine con zero. Supportato a partire da Windows 8 (WDDM 1.3).
WriteWatch
[in] Indica se creare l'allocazione con l'espressione di controllo di scrittura abilitata. Supportato a partire da Windows 8.1 (WDDM 1.3).
StandardAllocation
[in] Se impostato, indica dxgkrnl di creare un'allocazione standard usando pStandardAllocation anziché pPrivateDriverData. È necessario impostare ExistingSysMem o ExistingSection (ma non entrambi) se è impostata StandardAllocation. Inoltre, quando si crea un StandardAllocation, è necessario impostare anche i flag CreateShared CreateShared e CrossAdapter. Supportato a partire da Windows 10 versione 1709 (WDDM 2.3).
ExistingSection
[in] Quando impostato, indica Dxgkrnl di usare l'handle di sezione (hSection) anziché il puntatore alla memoria di sistema (pSystemMem). ExistingSystemMem e ExistingSection non possono essere entrambi impostati per la stessa allocazione. Se è impostata ExistingSection, è necessario impostare StandardAllocation. Supportato a partire da Windows 10 versione 1709 (WDDM 2.3).
AllowNotZeroed
[in] Indica che l'allocazione può essere creata senza zero le pagine. Supportato a partire da Windows 10 versione 1903 (WDDM 2.6).
PhysicallyContiguous
[in] Indica che l'allocazione deve essere fisicamente contigua. Supportato a partire da Windows 10 versione 2004 (WDDM 2.7).
NoKmdAccess
[in] Indica che il KmD non riceve una notifica sull'allocazione. Supportato a partire da Windows 10 versione 2004 (WDDM 2.7).
SharedDisplayable
Indica che l'allocazione è una risorsa condivisa e visualizzabile. Supportato a partire da Windows 11 (WDDM 3.0).
NoImplicitSynchronization
Reserved
Supportato a partire da Windows 8.
Questo membro è riservato e deve essere impostato su zero.
Osservazioni
Gli oggetti da condividere usando la funzioneD3DKMTShareObjectsdevono prima essere creati con il valore del flag NtSecuritySharing impostato. Questo valore di flag è disponibile nelle strutture D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGSe D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .
I driver devono seguire queste linee guida sui flag di condivisione D3DKMT_CREATEALLOCATIONFLAGS:
- Se l'allocazione non è condivisa, impostare sia CreateShared che NtSecuritySharing su 0.
- Se l'allocazione viene condivisa con un tipo di dati D3DKMT_HANDLE, impostare CreateShared = 1 e NtSecuritySharing = 0.
- Se l'allocazione viene condivisa con un handle NT per il processo (e senza un handle globale D3DKMT_HANDLE modalità kernel per la risorsa), impostare CreateShared = 1 e NtSecuritySharing = 1.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows Vista |
intestazione | d3dkmthk.h (include D3dkmthk.h) |