функция обратного вызова DRIVER_REINITIALIZE (ntddk.h)
Подпрограмма повторной инициализации продолжает инициализацию драйвера и устройства после возврата процедуры DriverEntry драйвера.
Синтаксис
DRIVER_REINITIALIZE DriverReinitialize;
void DriverReinitialize(
[in] _DRIVER_OBJECT *DriverObject,
[in, optional] PVOID Context,
[in] ULONG Count
)
{...}
Параметры
[in] DriverObject
Указатель на структуру DRIVER_OBJECT , предоставленный вызывающим. Это объект драйвера драйвера.
[in, optional] Context
Предоставленный вызывающим объектом указатель на контекстные сведения, указанные в предыдущем вызове IoRegisterDriverReinitialization или IoRegisterBootDriverReinitialization.
[in] Count
Указанное вызывающим объектом значение, представляющее количество вызовов подпрограммы повторной инициализации , включая текущий вызов.
Возвращаемое значение
None
Remarks
Чтобы поставить в очередь подпрограмму повторной инициализации для выполнения, подпрограмма DriverEntry драйвера должна вызвать ioRegisterDriverReinitialization или IoRegisterBootDriverReinitialization. Подпрограмма повторной инициализации также может вызывать саму функцию IoRegisterDriverReinitialization , что приводит к повторной постановке подпрограммы в очередь. Такая повторная постановка в очередь может выполняться несколько раз, а параметр count подпрограммы указывает количество вызовов. Первый вызов IoRegisterDriverReinitialization должен быть выполнен из DriverEntry, а DriverEntry должен возвращать STATUS_SUCCESS.
Дополнительные сведения о реализации подпрограммы повторной инициализации см. в статье Создание подпрограммы повторной инициализации.
Примеры
Чтобы определить подпрограмму повторного инициализации обратного вызова, необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму повторной инициализации обратного вызова с именем MyReinitialize
, используйте тип DRIVER_REINITIALIZE, как показано в следующем примере кода:
DRIVER_REINITIALIZE MyReinitialize;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyReinitialize(
struct _DRIVER_OBJECT *DriverObject,
PVOID Context,
ULONG Count
)
{
// Function body
}
Тип функции DRIVER_REINITIALIZE определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_
в определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, применяемые к типу функции DRIVER_REINITIALIZE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | ntddk.h (включая Ntddk.h, Ntifs.h) |
IRQL | Вызывается на PASSIVE_LEVEL. |