Compartilhar via


Função PcRegisterIoTimeout (portcls.h)

A função PcRegisterIoTimeout registra uma rotina de retorno de chamada de E/S fornecida pelo driver para um objeto de dispositivo especificado.

Depois de registrado, o driver de classe de porta chama o retorno de chamada do temporizador aproximadamente uma vez por segundo, desde que o dispositivo permaneça ativo.

Nota Essa função foi preterida para Windows 8 e versões posteriores do Windows. Para sistemas Windows no Arm, essa função é comentada no driver de classe PortCls e é inacessível.
 

Sintaxe

PORTCLASSAPI NTSTATUS PcRegisterIoTimeout(
  [in] PDEVICE_OBJECT    pDeviceObject,
  [in] PIO_TIMER_ROUTINE pTimerRoutine,
  [in] PVOID             pContext
);

Parâmetros

[in] pDeviceObject

Ponteiro para um objeto de dispositivo que representa um dispositivo no qual as operações de E/S podem atingir o tempo limite. Esse parâmetro deve apontar para uma estrutura do sistema do tipo DEVICE_OBJECT. Ao chamar a rotina de retorno de chamada do temporizador de E/S, o driver de classe de porta passa esse ponteiro como o primeiro de dois parâmetros de chamada. Para obter mais informações, consulte a seção Comentários a seguir.

[in] pTimerRoutine

Ponteiro para a rotina de retorno de chamada de E/S fornecida pelo driver. Para obter mais informações, consulte a seção Comentários a seguir.

[in] pContext

Ponteiro para o contexto específico do driver. Ao chamar a rotina de retorno de chamada do temporizador de E/S, o driver de classe de porta passa esse ponteiro como o segundo de dois parâmetros de chamada. Para obter mais informações, consulte a seção Comentários a seguir.

Retornar valor

PcRegisterIoTimeout retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, ele retornará um código de erro apropriado. A tabela a seguir mostra alguns dos códigos de erro possíveis.

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES
Possivelmente indica que uma alocação de memória falhou dentro do driver de classe de porta.
STATUS_UNSUCCESSFUL
Possivelmente indica que um retorno de chamada de temporizador com a mesma combinação de objeto de dispositivo, rotina de retorno de chamada de E/S e contexto já está registrado.

Comentários

Um driver de adaptador chama a função PcRegisterIoTimeout para habilitar um temporizador de watchdog de baixa resolução. Os drivers usam essa função principalmente para monitorar dispositivos que não têm meios de gerar um evento por conta própria se não concluirem uma operação de E/S iniciada anteriormente em algum intervalo de tempo máximo.

Depois que o driver chama PcRegisterIoTimeout, o driver de classe de porta chama a rotina de retorno de chamada de E/S do driver aproximadamente uma vez por segundo, desde que o dispositivo permaneça ativo. (O dispositivo é ativado por uma solicitação de IRP_MN_START_DEVICE e desativado por uma solicitação de IRP_MN_STOP_DEVICE.)

O driver pode desabilitar o temporizador chamando PcUnregisterIoTimeout.

Somente um retorno de chamada de temporizador com uma combinação específica de objeto de dispositivo, rotina de retorno de chamada de E/S e contexto pode ser registrado por vez.

O significado do parâmetro pContext é determinado pelo driver do adaptador, mas o driver normalmente define esse parâmetro para apontar para um objeto como o miniporto, o miniporto ou o objeto do adaptador.

O parâmetro pTimerRoutine é do tipo PIO_TIMER_ROUTINE, que é definido em ntddk.h para ser

  VOID
    (*PIO_TIMER_ROUTINE)(
      IN PDEVICE_OBJECT  DeviceObject,
      IN PVOID  Context
      );

Os parâmetros DeviceObject e Context são os mesmos valores que o driver do adaptador passou anteriormente como parâmetros de chamada para PcRegisterIoTimeout. O driver de classe de porta chama a rotina do temporizador no IRQL DISPATCH_LEVEL. A rotina do temporizador não deve conter código paginável.

Requisitos

Requisito Valor
Cliente mínimo com suporte O driver do sistema PortCls implementa a função PcRegisterIoTimeout no Microsoft Windows 98/Me e nos sistemas operacionais Windows 2000 e posteriores.
Plataforma de Destino Universal
Cabeçalho portcls.h (inclua Portcls.h)
Biblioteca Portcls.lib
IRQL PASSIVE_LEVEL

Confira também

DEVICE_OBJECT

PcUnregisterIoTimeout