Compartilhar via


Função IoRaiseHardError (ntddk.h)

A rotina de IoRaiseHardError faz com que uma caixa de diálogo apareça que avisa o usuário de que ocorreu um erro de E/S do dispositivo, o que pode indicar que um dispositivo físico está falhando.

Sintaxe

void IoRaiseHardError(
  [in]           PIRP           Irp,
  [in, optional] PVPB           Vpb,
  [in]           PDEVICE_OBJECT RealDeviceObject
);

Parâmetros

[in] Irp

Ponteiro para o IRP que falhou devido a um erro de E/S do dispositivo.

[in, optional] Vpb

Ponteiro para o VPB (bloco de parâmetro de volume), se houver, para o objeto de arquivo montado. Esse parâmetro será NULL se nenhuma VPB estiver associada ao objeto do dispositivo.

[in] RealDeviceObject

Ponteiro para o objeto do dispositivo que representa o dispositivo físico no qual a operação de E/S falhou.

Valor de retorno

Nenhum

Observações

Drivers de nível mais alto, particularmente drivers do sistema de arquivos, chamam IoRaiseHardError .

Aviso

Como IoRaiseHardError usa um APC de kernel normal para criar uma caixa de diálogo do usuário, um deadlock pode ocorrer se apCs de kernel normais estiverem desabilitadas quando ocorrer um erro de dispositivo. Por exemplo:

  1. Um driver de filtro de nível superior chama KeEnterCriticalRegion (que desabilita APCs de kernel normais) e envia uma solicitação de E/S para um driver do sistema de arquivos. O driver de filtro aguarda a conclusão da solicitação pelo driver do sistema de arquivos antes que o driver de filtro chame KeLeaveCriticalRegion (que reenables apCs de kernel normais).

  2. Ocorre um erro no sistema de arquivos e o driver do sistema de arquivos chama IoRaiseHardError para relatar o erro ao usuário. O driver do sistema de arquivos aguarda na caixa de diálogo.

  3. Deadlock agora existe: o APC do kernel normal criado por IoRaiseHardError para criar a caixa de diálogo aguarda que as APCs de kernel normais sejam habilitadas. O sistema de arquivos aguarda na caixa de diálogo antes de concluir a solicitação de E/S. O driver de filtro aguarda a conclusão da solicitação de E/S antes de chamar KeLeaveCriticalRegion (que reenables apCs de kernel normais).

O comportamento dessa rotina depende do estado atual de erros rígidos para o thread em execução. Se erros difíceis tiverem sido desabilitados chamando IoSetThreadHardErrorMode, essa rotina concluirá o IRP especificado por irp sem transferir dados para buffers de usuário. Além disso, nenhuma mensagem é enviada para notificar o usuário sobre essa falha.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho ntddk.h (inclua Ntddk.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm)

Consulte também

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode