다음을 통해 공유


RTL_RUN_ONCE_INIT_FN 콜백 함수(ntddk.h)

RunOnceInitialization 루틴은 일회성 초기화 작업을 수행합니다.

통사론

ULONG /* LOGICAL */
NTAPI
RTL_RUN_ONCE_INIT_FN (
    _Inout_ PRTL_RUN_ONCE RunOnce,
    _Inout_opt_ PVOID Parameter,
    _Inout_opt_ PVOID *Context
  );

typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;

매개 변수

[in, out] RunOnce

드라이버가 이전에 이 RunOnceInitialization 루틴을 호출한 RtlRunOnceExecuteOnce 루틴에 매개 변수로 전달한 RTL_RUN_ONCE 일회성 초기화 구조에 대한 포인터입니다.

[in, out] Parameter

매개 변수는 드라이버가 이 RunOnceInitialization 루틴을 호출한 RtlRunOnceExecuteOnce 루틴에 전달한 값을.

[out] Context

루틴이 초기화 데이터를 쓰는 PVOID 변수에 대한 포인터입니다.

반환 값

RunOnceInitialization 루틴은 성공을 나타내기 위해 0이 아닌 값을 반환하고 실패를 나타내기 위해 0을 반환합니다.

발언

드라이버 구현 RunOnceInitialization 루틴은 드라이버별 초기화를 수행한 다음 Context 매개 변수가 가리키는 메모리 위치에 초기화 데이터를 씁니다. 드라이버는 RtlRunOnceExecuteOnce 루틴을 사용하여 RunOnceInitialization 루틴을 일회성으로 호출합니다. 운영 체제는 RunOnceInitialization 루틴이 RunOnce 매개 변수의 동일한 값에 대해 두 번 호출되지 않도록 보장합니다.

Context 매개 변수가 가리키는 위치에서 적은 수의 하위 비트가 운영 체제에서 사용하도록 예약되어 있습니다. 드라이버의 RunOnceInitialization 루틴은 이러한 예약된 비트를 *Context쓰는 출력 값에서 0으로 설정해야 합니다. Ntddk.h에 정의된 RTL_RUN_ONCE_CTX_RESERVED_BITS 상수는 예약된 하위 비트 수를 지정합니다. 현재 RTL_RUN_ONCE_CTX_RESERVED_BITS 2로 정의됩니다. 즉, 드라이버가 Context 가리키는 PVOID 값의 최소 비트 2개를 0으로 설정해야 합니다.

예제

RunOnceInitialization 콜백 루틴을 정의하려면 먼저 정의하는 콜백 루틴의 유형을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버 , SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 코드 분석을데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 MyRunOnceInitialization명명된 RunOnceInitialization 콜백 루틴을 정의하려면 다음 코드 예제와 같이 RTL_RUN_ONCE_INIT_FN 형식을 사용합니다.

RTL_RUN_ONCE_INIT_FN MyRunOnceInitialization;

그런 다음 다음과 같이 콜백 루틴을 구현합니다.

_Use_decl_annotations_
ULONG 
  MyRunOnceInitialization(
    PRTL_RUN_ONCE  RunOnce,
    PVOID  Parameter,
    PVOID  *Context
    )
  {
      // Function body
  }

RTL_RUN_ONCE_INIT_FN 함수 형식은 Wdm.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 _Use_decl_annotations_ 주석을 추가해야 합니다. _Use_decl_annotations_ 주석은 헤더 파일의 RTL_RUN_ONCE_INIT_FN 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언 요구 사항에 대한 자세한 내용은 WDM 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요. _Use_decl_annotations_대한 자세한 내용은 함수 동작 주석참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 드라이버는 Windows Vista 이상 버전의 Windows에서만 RunOnceInitialization 루틴을 구현할 수 있습니다.
대상 플랫폼 바탕 화면
헤더 ntddk.h(Ntddk.h, Ntifs.h 포함)
IRQL IRQL <= APC_LEVEL 호출합니다.

참고 항목

RTL_RUN_ONCE

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

rtlRunOnceInitialize