функция обратного вызова DRIVER_REINITIALIZE (ntddk.h)
Подпрограмма повторно инициализации продолжает инициализацию драйверов и устройств после возврата подпрограммы driverEntry 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
Указанное вызывающим значение, представляющее количество вызовов повторной инициализации подпрограммы, включая текущий вызов.
Возвращаемое значение
Никакой
Замечания
Чтобы очередь подпрограммы повторно инициализации для выполнения, подпрограмма driverEntry DriverEntry должна вызывать IoRegisterDriverReinitialization или IoRegisterBootDriverReinitialization. Подпрограмма повторной инициализации также может вызывать IoRegisterDriverReinitialization, что приводит к повторному запросу подпрограммы. Это повторение может происходить несколько раз, и параметр счетчика подпрограммы указывает количество вызовов. Первый вызов 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 (include Ntddk.h, Ntifs.h) |
IRQL | Звонил в PASSIVE_LEVEL. |