Compartilhar via


estrutura D3DKMT_CREATEALLOCATIONFLAGS (d3dkmthk.h)

D3DKMT_CREATEALLOCATIONFLAGS é uma estrutura de campos de bits que especificam como criar uma alocação em uma chamada para a função D3DKMTCreateAllocation .

Sintaxe

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;

Membros

CreateResource

Especifica se um recurso específico do dispositivo deve ser criado. Se você definir CreateShared, também deverá definir CreateResource.

CreateShared

Especifica se é necessário criar um recurso compartilhado em todos os dispositivos. Se você definir CreateShared, também deverá definir CreateResource. Para obter mais informações sobre como usar CreateShared, consulte a seção Comentários.

NonSecure

Especifica se uma alocação pode ser aberta por qualquer processo. Se NonSecure estiver definido, processos seguros e não seguros poderão abrir a alocação.

CreateProtected

Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 7.

RestrictSharedAccess

Especifica se é necessário criar um recurso compartilhado em todos os dispositivos, mas com algumas restrições. Com suporte a partir do Windows 7.

ExistingSysMem

Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 7. As limitações de ExistingSysMem seguem:

  • ExistingSystemMem e ExistingSection não podem ser definidos para a mesma alocação. ExistingSysMem está definido, StandardAllocation também deve ser definido.

  • ExistingSysMem deve estar alinhado corretamente. O buffer de memória do sistema existente que o runtime D3D dá ao kernel deve ser alinhado à página e um múltiplo de tamanho de página, caso contrário, o kernel falhará na chamada para D3DKMTCreateAllocation.

  • Quando o kernel cria um tipo D3DKMDT_STANDARDALLOCATION_GDISURFACE de alocação padrão:

    • O runtime fornece o tamanho do buffer do sistema existente. Usando esse tamanho, o kernel cria uma alocação padrão do tipo GDISURFACE com os seguintes parâmetros que os KMDs entendem corretamente:

      D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer
      D3DKMDT_GDISURFACEDATA::Height = 1
      D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN
      D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
      
  • Proteger contra o ponteiro ExistingSysMem apontando para um DXGALLOCATION que é MemRotated

    O kernel deve proteger contra o cenário em que o modo de usuário bloqueia um DXGALLOCATION existente e usa o ponteiro de CPU resultante para criar uma alocação padrão ExistingSysMem. Esse caso é inválido se o DXGALLOCATION VAD for MEM_ROTATE, ou seja, se a alocação puder estar em VRAM. O kernel executa as seguintes etapas na chamada criar alocação padrão com ExistingSysMem:

    • MemSecure o ponteiro ExistingSysMem.
    • VirtualQuery a memória. Se os atributos contiverem MEM_ROTATE, a chamada falhará.
    • O MemSecure só é liberado quando essa alocação é liberada para impedir que a memória seja alterada pelas costas do kernel.

NtSecuritySharing

Especifica se a alocação é compartilhada com um identificador NT, o que significa que ela não tem um identificador global D3DKMT_HANDLE modo kernel para o recurso.

Se NtSecuritySharing estiver definido como 1 (TRUE):

  • A alocação é compartilhada usando a função D3DKMTShareObjects , mas não tem um identificador de D3DKMT_HANDLE global para o recurso.
  • CreateShared deve ser definido como 1.

Para obter mais informações sobre como usar o NtSecuritySharing, consulte a seção Comentários. Com suporte a partir do Windows 8.

ReadOnly

Especifica se a alocação só pode ser lida. Com suporte a partir do Windows 8.

CreateWriteCombined

Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

CreateCached

Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

SwapChainBackBuffer

Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

CrossAdapter

Se definido, indica que o recurso é um recurso de adaptador cruzado compartilhado.

OpenCrossAdapter

Se definido, indica que o recurso é criado abrindo um recurso de adaptador cruzado. Não é possível usar quando a alocação é criada no modo de usuário. Com suporte a partir do Windows 8.1 (WDDM 1.3).

PartialSharedCreation

Especifica se a alocação é criada como uma alocação compartilhada parcial. Com suporte a partir do Windows 8.1 (WDDM 1.3).

Zeroed

[out] Defina quando a alocação foi atendida com páginas zero. Com suporte a partir do Windows 8 (WDDM 1.3).

WriteWatch

[in] Indica se a alocação deve ser criada com o write-watch habilitado. Com suporte a partir do Windows 8.1 (WDDM 1.3).

StandardAllocation

[in] Quando definido, instrui Dxgkrnl a criar uma alocação padrão usando pStandardAllocation em vez de pPrivateDriverData. ExistingSysMem ou ExistingSection (mas não ambos) também devem ser definidos se StandardAllocation estiver definido. Além disso, ao criar uma StandardAllocation, os sinalizadores CreateShared e CrossAdapter também devem ser definidos. Com suporte a partir do Windows 10 versão 1709 (WDDM 2.3).

ExistingSection

[in] Quando definido, instrui Dxgkrnl a usar o identificador de seção (hSection) em vez do ponteiro de memória do sistema (pSystemMem). ExistingSystemMem e ExistingSection não podem ser definidos para a mesma alocação. Se ExistingSection estiver definido, StandardAllocation também deverá ser definido. Com suporte a partir do Windows 10 versão 1709 (WDDM 2.3).

AllowNotZeroed

[in] Indica que a alocação pode ser criada sem zerar as páginas. Com suporte a partir do Windows 10, versão 1903 (WDDM 2.6).

PhysicallyContiguous

[in] Indica que a alocação deve ser fisicamente contígua. Com suporte a partir do Windows 10, versão 2004 (WDDM 2.7).

NoKmdAccess

[in] Indica que o KMD não é notificado sobre a alocação. Com suporte a partir do Windows 10, versão 2004 (WDDM 2.7).

SharedDisplayable

Indica que a alocação é um recurso compartilhado e exibivel. Com suporte a partir do Windows 11 (WDDM 3.0).

NoImplicitSynchronization

Reserved

Com suporte a partir do Windows 8.

Esse membro é reservado e deve ser definido como zero.

Comentários

Os objetos a serem compartilhados usando a função D3DKMTShareObjects devem primeiro ser criados com o valor do sinalizador NtSecuritySharing definido. Esse valor de sinalizador está disponível nas estruturas D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS e D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .

Os drivers devem seguir estas diretrizes sobre D3DKMT_CREATEALLOCATIONFLAGS sinalizadores de compartilhamento:

  • Se a alocação não for compartilhada, defina CreateShared e NtSecuritySharing como 0.
  • Se a alocação for compartilhada com um tipo de dados D3DKMT_HANDLE , defina CreateShared = 1 e NtSecuritySharing = 0.
  • Se a alocação for compartilhada com um identificador NT para o processo (e sem um identificador global D3DKMT_HANDLE modo kernel para o recurso), defina CreateShared = 1 e NtSecuritySharing = 1.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Cabeçalho d3dkmthk.h (inclua D3dkmthk.h)

Confira também

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION