Функция PcRegisterIoTimeout (portcls.h)

Функция PcRegisterIoTimeout регистрирует подпрограмму обратного вызова ввода-вывода драйвера для указанного объекта устройства.

После регистрации драйвер класса портов вызывает обратный вызов таймера примерно один раз в секунду, пока устройство остается активным.

Примечание Эта функция не рекомендуется использовать для Windows 8 и более поздних версий Windows. Для систем Windows в Arm эта функция закомментирована в драйвере класса PortCls и недоступна.
 

Синтаксис

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

Параметры

[in] pDeviceObject

Указатель на объект устройства, представляющий устройство, на котором операции ввода-вывода могут истекать. Этот параметр должен указывать на системную структуру типа DEVICE_OBJECT. При вызове подпрограммы обратного вызова таймера ввода-вывода драйвер класса портов передает этот указатель в качестве первого из двух параметров вызова. Дополнительные сведения см. в следующем разделе "Примечания".

[in] pTimerRoutine

Указатель на подпрограмму обратного вызова ввода-вывода, предоставленного драйвером. Дополнительные сведения см. в следующем разделе "Примечания".

[in] pContext

Указатель на контекст для конкретного драйвера. При вызове подпрограммы обратного вызова ввода-вывода драйвер класса портов передает этот указатель во второй из двух параметров вызова. Дополнительные сведения см. в следующем разделе "Примечания".

Возвращаемое значение

PcRegisterIoTimeout возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки. В следующей таблице показаны некоторые возможные коды ошибок.

Возвращаемый код Описание
STATUS_INSUFFICIENT_RESOURCES
Возможно, это означает, что сбой выделения памяти в драйвере класса порта.
STATUS_UNSUCCESSFUL
Возможно, указывает, что обратный вызов таймера с тем же сочетанием объекта устройства, подпрограммы обратного вызова ввода-вывода и контекст уже зарегистрирован.

Замечания

Драйвер адаптера вызывает функцию PcRegisterIoTimeout для включения таймера с низким разрешением. Драйверы используют эту функцию в первую очередь для мониторинга устройств, которые не имеют средств для создания события, если они не завершают операцию ввода-вывода, инициированную ранее, в течение некоторого максимального интервала времени.

После вызова драйвера PcRegisterIoTimeoutдрайвер класса портов вызывает подпрограмму обратного вызова ввода-вывода драйвера примерно один раз в секунду, пока устройство остается активным. (Устройство активируется запросом IRP_MN_START_DEVICE и деактивировано запросом IRP_MN_STOP_DEVICE.)

Драйвер может отключить таймер, вызвав PcUnregisterIoTimeout.

Одновременно можно зарегистрировать только один обратный вызов таймера с определенным сочетанием объекта устройства, подпрограммы обратного вызова ввода-вывода и контекста.

Значение параметра pContext определяется драйвером адаптера, но драйвер обычно задает этот параметр для указания на объект, например минипорт, минипорт-поток или объект адаптера.

Параметр pTimerRoutine имеет тип PIO_TIMER_ROUTINE, который определяется в ntddk.h.

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

Параметры DeviceObject и Context являются теми же значениями, что и драйвер адаптера, переданный ранее в качестве параметров вызова для PcRegisterIoTimeout. Драйвер класса портов вызывает подпрограмму таймера в irQL DISPATCH_LEVEL. Подпрограмма таймера не должна содержать код, доступный для страниц.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Системный драйвер PortCls реализует функцию PcRegisterIoTimeout в Microsoft Windows 98/Me и в операционных системах Windows 2000 и более поздних версий.
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)
библиотеки Portcls.lib
IRQL PASSIVE_LEVEL

См. также

DEVICE_OBJECT

PcUnregisterIoTimeout