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