Partilhar via


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

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface