Partager via


structure D3DKMT_CREATEALLOCATIONFLAGS (d3dkmthk.h)

D3DKMT_CREATEALLOCATIONFLAGS est une structure de champs de bits qui spécifient comment créer une allocation dans un appel à la fonction D3DKMTCreateAllocation .

Syntaxe

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;

Membres

CreateResource

Spécifie s’il faut créer une ressource spécifique à l’appareil. Si vous définissez CreateShared, vous devez également définir CreateResource.

CreateShared

Spécifie s’il faut créer une ressource partagée sur tous les appareils. Si vous définissez CreateShared, vous devez également définir CreateResource. Pour plus d’informations sur l’utilisation de CreateShared, consultez la section Remarques.

NonSecure

Spécifie s’il faut créer une allocation qui peut être ouverte par n’importe quel processus. Si non sécurisé est défini, les processus sécurisés et non sécurisés peuvent ouvrir l’allocation.

CreateProtected

Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 7.

RestrictSharedAccess

Spécifie s’il faut créer une ressource partagée sur tous les appareils, mais avec certaines restrictions. Pris en charge à partir de Windows 7.

ExistingSysMem

Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 7. Les limitations d’ExistingSysMem sont les suivantes :

  • ExistingSystemMem et ExistingSection ne peuvent pas être définis pour la même allocation. ExistingSysMem est défini, StandardAllocation doit également être défini.

  • ExistingSysMem doit être correctement aligné. La mémoire tampon système existante que le runtime D3D donne au noyau doit être alignée sur la page et un multiple de la taille de page, sinon le noyau échoue à l’appel à D3DKMTCreateAllocation.

  • Lorsque le noyau crée un D3DKMDT_STANDARDALLOCATION_GDISURFACE type d’allocation standard :

    • Le runtime fournit la taille de la mémoire tampon système existante. À l’aide de cette taille, le noyau crée une allocation standard de type GDISURFACE avec les paramètres suivants que les KMDs comprennent correctement :

      D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer
      D3DKMDT_GDISURFACEDATA::Height = 1
      D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN
      D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
      
  • Protéger contre le pointeur ExistingSysMem pointant vers un DXGALLOCATION qui est MemRotated

    Le noyau doit se protéger contre le scénario où le mode utilisateur verrouille une DXGALLOCATION existante et utilise le pointeur du processeur résultant pour créer une allocation standard ExistingSysMem. Ce cas n’est pas valide si le VAD DXGALLOCATION est MEM_ROTATE, c’est-à-dire si l’allocation peut être en VRAM. Le noyau effectue les étapes suivantes dans la création d’une allocation standard avec l’appel ExistingSysMem :

    • MemSecure pointeur ExistingSysMem.
    • VirtualQuery la mémoire. Si les attributs contiennent MEM_ROTATE l’appel échoue.
    • MemSecure n’est libéré que lorsque cette allocation est libérée pour empêcher la modification de la mémoire derrière le noyau.

NtSecuritySharing

Spécifie si l’allocation est partagée avec un handle NT, ce qui signifie qu’elle n’a pas de handle global D3DKMT_HANDLE en mode noyau pour la ressource.

Si NtSecuritySharing a la valeur 1 (TRUE) :

  • L’allocation est partagée à l’aide de la fonction D3DKMTShareObjects, mais elle n’a pas de handle D3DKMT_HANDLE global pour la ressource.
  • CreateShared doit avoir la valeur 1.

Pour plus d’informations sur l’utilisation de NtSecuritySharing, consultez la section Remarques. Pris en charge à partir de Windows 8.

ReadOnly

Spécifie si l’allocation ne peut être lue qu’à partir de. Pris en charge à partir de Windows 8.

CreateWriteCombined

Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

CreateCached

Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

SwapChainBackBuffer

Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

CrossAdapter

Si la valeur est définie, indique que la ressource est une ressource inter-adaptateur partagée.

OpenCrossAdapter

Si la valeur est définie, indique que la ressource est créée en ouvrant une ressource inter-adaptateurs. Impossible d’utiliser lorsque l’allocation est créée à partir du mode utilisateur. Pris en charge à partir de Windows 8.1 (WDDM 1.3).

PartialSharedCreation

Spécifie si l’allocation est créée en tant qu’allocation partagée partielle. Pris en charge à partir de Windows 8.1 (WDDM 1.3).

Zeroed

[out] Définissez le moment où l’allocation a été remplie avec des pages à zéro. Pris en charge à partir de Windows 8 (WDDM 1.3).

WriteWatch

[in] Indique s’il faut créer l’allocation avec la veille d’écriture activée. Pris en charge à partir de Windows 8.1 (WDDM 1.3).

StandardAllocation

[in] Lorsqu’il est défini, indique à Dxgkrnl de créer une allocation standard à l’aide de pStandardAllocation au lieu de pPrivateDriverData. ExistingSysMem ou ExistingSection (mais pas les deux) doivent également être définis si StandardAllocation est défini. En outre, lors de la création d’un StandardAllocation, les indicateurs CreateShared et CrossAdapter doivent également être définis. Pris en charge à partir de Windows 10 version 1709 (WDDM 2.3).

ExistingSection

[in] Lorsqu’il est défini, indique à Dxgkrnl d’utiliser le handle de section (hSection) au lieu du pointeur de mémoire système (pSystemMem). ExistingSystemMem et ExistingSection ne peuvent pas être définis pour la même allocation. Si ExistingSection est défini, StandardAllocation doit également être défini. Pris en charge à partir de Windows 10 version 1709 (WDDM 2.3).

AllowNotZeroed

[in] Indique que l’allocation peut être créée sans zéro des pages. Pris en charge à partir de Windows 10, version 1903 (WDDM 2.6).

PhysicallyContiguous

[in] Indique que l’allocation doit être physiquement contiguë. Pris en charge à partir de Windows 10, version 2004 (WDDM 2.7).

NoKmdAccess

[in] Indique que le KMD n’est pas informé de l’allocation. Pris en charge à partir de Windows 10, version 2004 (WDDM 2.7).

SharedDisplayable

Indique que l’allocation est une ressource partagée et affichable. Pris en charge à partir de Windows 11 (WDDM 3.0).

NoImplicitSynchronization

Reserved

Pris en charge à partir de Windows 8.

Ce membre est réservé et doit être défini sur zéro.

Remarques

Les objets à partager à l’aide de la fonction D3DKMTShareObjects doivent d’abord être créés avec la valeur de l’indicateur NtSecuritySharing définie. Cette valeur d’indicateur est disponible dans les structures D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS et D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .

Les pilotes doivent suivre ces instructions sur les indicateurs de partage D3DKMT_CREATEALLOCATIONFLAGS :

  • Si l’allocation n’est pas partagée, définissez CreateShared et NtSecuritySharing sur 0.
  • Si l’allocation est partagée avec un type de données D3DKMT_HANDLE , définissez CreateShared = 1 et NtSecuritySharing = 0.
  • Si l’allocation est partagée avec un handle NT pour le processus (et sans un handle global D3DKMT_HANDLE en mode noyau sur la ressource), définissez CreateShared = 1 et NtSecuritySharing = 1.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
En-tête d3dkmthk.h (inclure D3dkmthk.h)

Voir aussi

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION