estructura D3DKMT_CREATEALLOCATIONFLAGS (d3dkmthk.h)
D3DKMT_CREATEALLOCATIONFLAGS es una estructura de campos de bits que especifican cómo crear una asignación en una llamada a la función D3DKMTCreateAllocation .
Sintaxis
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;
Miembros
CreateResource
Especifica si se va a crear un recurso específico del dispositivo. Si establece CreateShared, también debe establecer CreateResource.
CreateShared
Especifica si se va a crear un recurso compartido en todos los dispositivos. Si establece CreateShared, también debe establecer CreateResource. Para obtener más información sobre el uso de CreateShared, vea la sección Comentarios.
NonSecure
Especifica si se va a crear una asignación que cualquier proceso pueda abrir. Si se establece NonSecure , los procesos seguros y no seguros pueden abrir la asignación.
CreateProtected
Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 7.
RestrictSharedAccess
Especifica si se va a crear un recurso compartido en todos los dispositivos, pero con algunas restricciones. Se admite a partir de Windows 7.
ExistingSysMem
Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 7. Las limitaciones de ExistingSysMem siguen:
ExistingSystemMem y ExistingSection no se pueden establecer para la misma asignación. ExistingSysMem está establecido, StandardAllocation también debe establecerse.
ExistingSysMem debe estar correctamente alineado. El búfer de memoria del sistema existente que el entorno de ejecución D3D proporciona al kernel debe estar alineado con páginas y un múltiplo de tamaño de página; de lo contrario, el kernel produce un error en la llamada a D3DKMTCreateAllocation.
Cuando el kernel crea un tipo de D3DKMDT_STANDARDALLOCATION_GDISURFACE de asignación estándar:
El tiempo de ejecución proporciona el tamaño del búfer del sistema existente. Con este tamaño, el kernel crea una asignación estándar del tipo GDISURFACE con los parámetros siguientes que los KMD comprenden correctamente:
D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer D3DKMDT_GDISURFACEDATA::Height = 1 D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
Protección contra el puntero ExistingSysMem que apunta a una DXGALLOCATION que es MemRotated
El kernel debe protegerse frente al escenario en el que el modo de usuario bloquea una DXGALLOCATION existente y usa el puntero de CPU resultante para crear una asignación estándar ExistingSysMem. Este caso no es válido si DXGALLOCATION VAD es MEM_ROTATE, es decir, si la asignación podría estar en VRAM. El kernel realiza los pasos siguientes en la llamada de creación de una asignación estándar con ExistingSysMem:
- MemSecure el puntero ExistingSysMem.
- VirtualQuery la memoria. Si los atributos contienen MEM_ROTATE, se produce un error en la llamada.
- MemSecure solo se libera cuando esta asignación se libera para evitar que la memoria se cambie detrás de la espalda del kernel.
NtSecuritySharing
Especifica si la asignación se comparte con un identificador NT, lo que significa que no tiene un identificador global D3DKMT_HANDLE modo kernel para el recurso.
Si NtSecuritySharing está establecido en 1 (TRUE):
- La asignación se comparte mediante la función D3DKMTShareObjects , pero no tiene un identificador de D3DKMT_HANDLE global para el recurso.
- CreateShared debe establecerse en 1.
Para obtener más información sobre el uso de NtSecuritySharing, vea la sección Comentarios. Se admite a partir de Windows 8.
ReadOnly
Especifica si la asignación solo se puede leer. Se admite a partir de Windows 8.
CreateWriteCombined
Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.
CreateCached
Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.
SwapChainBackBuffer
Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.
CrossAdapter
Si se establece, indica que el recurso es un recurso de adaptador cruzado compartido.
OpenCrossAdapter
Si se establece, indica que el recurso se crea abriendo un recurso de adaptador cruzado. No se puede usar cuando se crea la asignación desde el modo de usuario. Se admite a partir de Windows 8.1 (WDDM 1.3).
PartialSharedCreation
Especifica si la asignación se crea como una asignación compartida parcial. Se admite a partir de Windows 8.1 (WDDM 1.3).
Zeroed
[out] Establezca cuándo se cumplió la asignación con páginas de cero. Se admite a partir de Windows 8 (WDDM 1.3).
WriteWatch
[in] Indica si se va a crear la asignación con la inspección de escritura habilitada. Se admite a partir de Windows 8.1 (WDDM 1.3).
StandardAllocation
[in] Cuando se establece, indica a Dxgkrnl que cree una asignación estándar mediante pStandardAllocation en lugar de pPrivateDriverData. ExistingSysMem o ExistingSection (pero no ambos) también deben establecerse si StandardAllocation está establecido. Además, al crear una standardAllocation, también se deben establecer las marcas CreateShared y CrossAdapter . Se admite a partir de Windows 10 versión 1709 (WDDM 2.3).
ExistingSection
[in] Cuando se establece, indica a Dxgkrnl que use el identificador de sección (hSection) en lugar del puntero de memoria del sistema (pSystemMem). ExistingSystemMem y ExistingSection no se pueden establecer para la misma asignación. Si se establece ExistingSection , también se debe establecer StandardAllocation . Se admite a partir de Windows 10 versión 1709 (WDDM 2.3).
AllowNotZeroed
[in] Indica que la asignación se puede crear sin cero en las páginas. Se admite a partir de Windows 10, versión 1903 (WDDM 2.6).
PhysicallyContiguous
[in] Indica que la asignación debe ser físicamente contigua. Se admite a partir de Windows 10, versión 2004 (WDDM 2.7).
NoKmdAccess
[in] Indica que el KMD no recibe una notificación sobre la asignación. Se admite a partir de Windows 10, versión 2004 (WDDM 2.7).
SharedDisplayable
Indica que la asignación es un recurso compartido que se puede mostrar. Se admite a partir de Windows 11 (WDDM 3.0).
NoImplicitSynchronization
Reserved
Se admite a partir de Windows 8.
Este miembro está reservado y debe establecerse en cero.
Comentarios
Los objetos que se van a compartir mediante la función D3DKMTShareObjects deben crearse primero con el valor de marca NtSecuritySharing establecido. Este valor de marca está disponible en las estructuras de D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS y D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .
Los controladores deben seguir estas directrices sobre D3DKMT_CREATEALLOCATIONFLAGS marcas de uso compartido:
- Si la asignación no se comparte, establezca CreateShared y NtSecuritySharing en 0.
- Si la asignación se comparte con un tipo de datos D3DKMT_HANDLE , establezca CreateShared = 1 y NtSecuritySharing = 0.
- Si la asignación se comparte con un identificador NT para el proceso (y sin un identificador global D3DKMT_HANDLE modo kernel para el recurso), establezca CreateShared = 1 y NtSecuritySharing = 1.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Encabezado | d3dkmthk.h (incluya D3dkmthk.h) |