Поделиться через


функция обратного вызова 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.