Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция PcRegisterIoTimeout регистрирует подпрограмму обратного вызова ввода-вывода драйвера для указанного объекта устройства.
После регистрации драйвер класса портов вызывает обратный вызов таймера примерно один раз в секунду, пока устройство остается активным.
Синтаксис
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, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки. В следующей таблице показаны некоторые возможные коды ошибок.
| Возвращаемый код | Описание |
|---|---|
|
Возможно, это означает, что сбой выделения памяти в драйвере класса порта. |
|
Возможно, указывает, что обратный вызов таймера с тем же сочетанием объекта устройства, подпрограммы обратного вызова ввода-вывода и контекст уже зарегистрирован. |
Замечания
Драйвер адаптера вызывает функцию 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 |