Share via


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;
#if ...
  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

Especifica si la asignación se va a rellenar de cero cuando se crea. Se admite a partir de Windows 8.

WriteWatch

Indica si se va a crear la asignación con watch de escritura habilitada. Se admite a partir de Windows 8.1 (WDDM 1.3).

StandardAllocation

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

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

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

Indica que la asignación debe ser físicamente contigua. Se admite a partir de Windows 10, versión 2004 (WDDM 2.7).

NoKmdAccess

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

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)

Consulte también

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION