Compartilhar via


DXGKDDI_GETDISPLAYSTATEINTRUSIVE função de retorno de chamada (dispmprt.h)

O sistema operacional (SO) chama uma rotina DxgkDdiGetDisplayStateNonIntrusive de um driver de miniporta de exibição 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 .

Retornar valor

DxgkDdiGetDisplayStateIntrusive retornará STATUS_SUCCESS se for bem-sucedido. Caso contrário, ele retornará um código de erro como um dos seguintes.

Código do 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 obter acesso a ele.
STATUS_DEVICE_HARDWARE_ERROR Ocorreu um erro de HW genérico.
STATUS_DEVICE_POWERED_OFF O dispositivo está desligado.

Comentários

O sistema operacional chama DxgkDdiGetDisplayStateIntrusive para coletar informações de estado de exibição do driver quando o usuário já está em um estado inválido. Ao contrário de DxgkDdiGetDisplayStateNonIntrusive, a rotina 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 interromper temporariamente a verificação e monitorar a conectividade destrutiva marcar).

  • 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 primeiro chamará 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.

DXGKRNL chamará essa rotina com NumOfTargets definido como o número de destinos nos quais o sistema operacional relata 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.

Observação

Se o driver atingir uma falha em um determinado vidpntarget durante a coleta de informações, ele deverá usar ReturnSubStatus para definir o estado do erro e prosseguir para o próximo vidpntarget e não falhar na chamada geral, a menos que todos os caminhos atinjam falhas. O ideal é que os drivers registrem erros atingidos durante essa chamada em algum log de erros interno para que, quando o sistema operacional chamar DxgkDdiCollectDiagnosticInfo para coletar informações da caixa preta, esses erros sejam 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 que DxgkDdiGetDisplayStateIntrusive seja concluído, 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 travar nessa chamada, portanto, o miniporto deve tentar sempre concluir essa chamada dentro do período de tempo.

O nível de sincronização para essa DDI é a sincronização de nível zero.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 2004
Cabeçalho dispmprt.h

Confira também

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface