DXGKDDI_GETDISPLAYSTATEINTRUSIVE função de retorno de chamada (dispmprt.h)
O sistema operacional (SO) chama um driver de miniporto de exibição DxgkDdiGetDisplayStateNonIntrusive rotina para coletar informações de estado de exibição do driver.
Sintaxe
DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;
NTSTATUS DxgkddiGetdisplaystateintrusive(
[in] HANDLE Context,
[in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}
Parâmetros
[in] Context
Ponteiro para um contexto privado retornado por DxgkDdiQueryInterface .
[in/out] pArgs
Ponteiro para uma estrutura DXGKARG_GETDISPLAYSTATEINTRUSIVE.
Valor de retorno
DxgkDdiGetDisplayStateIntrusive retornará STATUS_SUCCESS se tiver êxito. Caso contrário, ele retornará um código de erro, como um dos seguintes.
Código de erro | Significado |
---|---|
STATUS_DRIVER_INTERNAL_ERROR | Ocorreu um erro de software genérico dentro do driver. |
STATUS_ACCESS_DENIED | O hardware está sendo usado atualmente por outros threads e essa DDI não pode ter acesso a ele. |
STATUS_DEVICE_HARDWARE_ERROR | Erro de HW genérico. |
STATUS_DEVICE_POWERED_OFF | O dispositivo está desligado. |
Observações
O sistema operacional chama DxgkDdiGetDisplayStateIntrusive para coletar informações de estado de exibição do driver quando o usuário já estiver em um estado inválido. Ao contrário DxgkDdiGetDisplayStateNonIntrusive, a rotina de DxgkDdiGetDisplayStateIntrusive do driver pode realizar operações mais intrusivas que têm efeitos colaterais visíveis para o usuário. Uma operação intrusiva é definida da seguinte maneira (operações não intrusivas não têm nenhuma dessas propriedades):
Isso causa efeitos colaterais (falhas) visíveis para o usuário (como parar temporariamente a verificação e a verificação de conectividade do monitor destrutivo).
Ele é lento e afeta o desempenho do sistema ou da exibição se chamado com frequência (várias vezes em um segundo).
Ele altera o estado do subsistema de exibição (ou qualquer outro subsistema) direta ou indiretamente.
O driver não deve alterar o estado do sistema intencionalmente ao coletar dados.
O sistema operacional chamará essa rotina com muito menos frequência em relação a chamadas para DxgkDdiGetDisplayStateNonIntrusive. Na maioria dos cenários de erro, o sistema operacional chamará primeiro DxgkDdiGetDisplayStateNonIntrusive e, em seguida, chamará DxgkDdiGetDisplayStateIntrusive para garantir que qualquer efeito não intencional da chamada intrusiva não esteja afetando a coleta de dados não intrusiva.
O DXGKRNL chamará essa rotina com NumOfTargets definido como o número de destinos nos quais o sistema operacional informa que há um monitor conectado com VidPnTargetId correspondente preenchido. Quando o driver acredita que não há nenhum monitor conectado em um determinado destino, ele deve definir o ReturnSubStatus para que esse destino seja DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED.
Nota
Se o driver atingir uma falha em um determinado vidpntarget durante a coleta de informações, ele deverá usar ReturnSubStatus para definir o estado de erro e prosseguir para o próximo vidpntarget e não falhar na chamada geral, a menos que todos os caminhos atinjam falhas. Os drivers devem, idealmente, registrar erros atingidos durante essa chamada em algum log de erros interno para que, quando o sistema operacional chama DxgkDdiCollectDiagnosticInfo para coletar informações da caixa preta, esses erros são capturados como parte de uma coleção de logs interna para ajudar os IHVs a depurar.
O sistema operacional terá um tempo limite suficiente (aproximadamente 5 segundos) para DxgkDdiGetDisplayStateIntrusive para concluir, dando ao driver mais tempo para coletar todo o estado relevante. Após um tempo limite, o sistema operacional poderá verificar o computador e coletar um despejo se o driver estiver travado nessa chamada, portanto, o miniporto deve tentar sempre concluir essa chamada dentro do período de tempo.
O nível de sincronização dessa DDI é de sincronização de nível zero.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 10, versão 2004 |
cabeçalho | dispmprt.h |
Consulte também
DXGKARG_GETDISPLAYSTATEINTRUSIVE