다음을 통해 공유


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 루틴은 드라이버별 초기화를 수행한 다음, 컨텍스트 매개 변수가 가리키는 메모리 위치에 초기화 데이터를 씁니다. 드라이버는 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 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 라는 MyRunOnceInitializationRunOnceInitialization 콜백 루틴을 정의하려면 다음 코드 예제와 같이 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