D3DKMT_CREATEALLOCATIONFLAGS struttura (d3dkmthk.h)
D3DKMT_CREATEALLOCATIONFLAGS è una struttura di campi di bit che specificano come creare un'allocazione in una chiamata alla funzione D3DKMTCreateAllocation .
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;
Members
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 NonSecure è impostato, 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 ExistingSysMem seguono:
ExistingSystemMem e ExistingSection non possono essere impostati per la stessa allocazione. ExistingSysMem è impostato, StandardAllocation deve essere impostato anche.
EsistenteSysMem deve essere allineato correttamente. Il buffer di memoria di sistema esistente che il runtime D3D fornisce al kernel deve essere allineato alla pagina e a più dimensioni di pagina, in caso contrario il kernel non riesce 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
Proteggere dal puntatore ExistingSysMem che punta a una DXGALLOCATION che è MemRotated
Il kernel deve essere protetto dallo scenario in cui la modalità utente blocca un'esistente DXGALLOCATION e usa il puntatore CPU risultante per creare un'allocazione standard di ExistingSysMem. Questo caso non è valido se il VAD DXGALLOCATION è MEM_ROTATE, ad esempio se l'allocazione potrebbe essere in VRAM. Il kernel esegue la procedura seguente 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 la schiena del kernel.
NtSecuritySharing
Specifica se l'allocazione è condivisa con un handle NT, ovvero che non dispone di un handle globale D3DKMT_HANDLE modalità kernel alla risorsa.
Se NtSecuritySharing è impostato su 1 (TRUE):
- L'allocazione viene condivisa usando la funzione D3DKMTShareObjects , ma non ha un D3DKMT_HANDLE globale che gestisce la risorsa.
- 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 di sola lettura. 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 multi-adapter condivisa.
OpenCrossAdapter
Se impostato, indica che la risorsa viene creata aprendo una risorsa tra schede. 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 condivisa parziale. Supportato a partire da Windows 8.1 (WDDM 1.3).
Zeroed
[out] Impostare quando l'allocazione è stata soddisfatta con pagine zero. Supportato a partire da Windows 8 (WDDM 1.3).
WriteWatch
[in] Indica se creare l'allocazione con l'orologio di scrittura abilitato. Supportato a partire da Windows 8.1 (WDDM 1.3).
StandardAllocation
[in] Se impostato, indica a Dxgkrnl di creare un'allocazione standard usando pStandardAllocation anziché pPrivateDriverData. È necessario impostare anche ExistingSysMem o ExistingSection (ma non entrambi) se StandardAllocation è impostato. Inoltre, quando si crea un oggetto StandardAllocation, è necessario impostare anche i flag CreateShared e CrossAdapter . Supportato a partire da Windows 10 versione 1709 (WDDM 2.3).
ExistingSection
[in] Se impostato, indica a Dxgkrnl di usare l'handle di sezione (hSection) anziché il puntatore alla memoria di sistema (pSystemMem). ExistingSystemMem e ExistingSection non possono essere impostati per la stessa allocazione. Se ExistingSection è impostato, StandardAllocation deve essere impostato anche. 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 servizio di gestione delle chiavi 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.
Commenti
Gli oggetti da condividere usando la funzione D3DKMTShareObjects devono prima essere creati con il valore del flag NtSecuritySharing . Questo valore di flag è disponibile nelle strutture D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS e D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS.
I driver devono seguire queste linee guida sui flag di condivisione D3DKMT_CREATEALLOCATIONFLAGS :
- Se l'allocazione non è condivisa, impostare CreateShared e 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 al processo (e senza un handle D3DKMT_HANDLE in modalità kernel globale per la risorsa), impostare CreateShared = 1 e NtSecuritySharing = 1.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Intestazione | d3dkmthk.h (include D3dkmthk.h) |