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