Função IoRaiseHardError (ntddk.h)

A rotina 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âmetros de volume), se houver, para o objeto de arquivo montado. Esse parâmetro será NULL se nenhum VPB estiver associado 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.

Retornar valor

Nenhum

Comentários

Os drivers de nível mais alto, particularmente os 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 reabilita 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 reabilita 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 pelo 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
Plataforma de Destino Universal
Cabeçalho ntddk.h (inclua Ntddk.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm)

Confira também

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode