Функция RtlRunOnceBeginInitialize (ntddk.h)

Подпрограмма RtlRunOnceBeginInitialize начинает однократную инициализацию.

Синтаксис

NTSYSAPI NTSTATUS RtlRunOnceBeginInitialize(
  [in, out] PRTL_RUN_ONCE RunOnce,
  [in]      ULONG         Flags,
  [out]     PVOID         *Context
);

Параметры

[in, out] RunOnce

Указатель на RTL_RUN_ONCE структуру одноразовой инициализации.

[in] Flags

При необходимости драйверы могут указывать один или несколько следующих флагов:

RTL_RUN_ONCE_ASYNC

Выполнение асинхронной инициализации. Драйвер может выполнять несколько попыток завершения параллельно. Если этот флаг используется, последующие вызовы этой подпрограммы завершатся ошибкой, если этот флаг также не указан.

RTL_RUN_ONCE_CHECK_ONLY

Не начинайте инициализацию, но проверка, чтобы определить, произошла ли инициализация. Если RtlRunOnceBeginInitialize возвращает STATUS_SUCCESS, инициализация выполнена успешно, а *Context содержит инициализированные данные.

[out] Context

Указывает указатель на переменную PVOID, которая получает инициализированные данные. Значение *Context допустимо только в том случае, если подпрограмма возвращает STATUS_SUCCESS.

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

RtlRunOnceBeginInitialize возвращает одно из следующих значений NTSTATUS:

Код возврата Описание
STATUS_SUCCESS
Одноразовая инициализация уже завершена. Инициализированные данные хранятся в расположении памяти, на которое указывает Контекст .
STATUS_PENDING
Вызывающий объект успешно начал однократную инициализацию. Вызывающий объект теперь выполняет шаги инициализации для конкретного драйвера, а затем вызывает RtlRunOnceComplete для завершения инициализации.

Комментарии

Драйверы также могут выполнять однократную инициализацию, вызывая RtlRunOnceExecuteOnce и предоставляя подпрограмму RunOnceInitialization .

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

RTL_RUN_ONCE

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization