Condividi tramite


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)

Vedi anche

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION