다음을 통해 공유


DRIVER_PROXY_REGISTER_CALLBACK 콜백 함수(wdm.h)

DRIVER_PROXY_REGISTER_CALLBACK 콜백은 DriverProxy 엔드포인트 등록 및 핫 스왑 작업 중에 다른 단계에서 호출되는 루틴을 정의합니다.

Syntax

DRIVER_PROXY_REGISTER_CALLBACK DriverProxyRegisterCallback;

NTSTATUS DriverProxyRegisterCallback(
  DRIVER_PROXY_REGISTER_CALLBACK_PHASE Phase,
  PVOID Context
)
{...}

매개 변수

Phase

[in] 현재 실행 중인 등록 프로세스의 단계를 나타내는 DRIVER_PROXY_REGISTER_CALLBACK_PHASE 값입니다.

Context

[in, optional] IoRegisterDriverProxyEndpoints에 전달된 드라이버 정의 컨텍스트 정보에 대한 포인터입니다. 컨텍스트가 제공되지 않은 경우 이 매개 변수는 NULL일 수 있습니다.

반환 값

DRIVER_PROXY_REGISTER_CALLBACK 다음 NTSTATUS 값 중 하나를 반환합니다.

반환 코드 Description
STATUS_SUCCESS 콜백이 성공적으로 완료되었습니다. 엔드포인트 등록 프로세스는 다음 단계로 계속 진행됩니다.
기타 NTSTATUS 값 콜백에 오류가 발생했습니다. 전체 엔드포인트 등록 작업이 실패하고 부분 변경 내용이 롤백됩니다.

비고

이 콜백을 사용하면 드라이버가 엔드포인트 등록 프로세스 중에 특정 지점에서 사용자 지정 작업을 수행할 수 있으므로 핫 스왑 메커니즘을 조정할 수 있습니다.

이 콜백은 엔드포인트 등록 및 핫 스왑 작업 중에 IoRegisterDriverProxyEndpoints 에서 호출됩니다. 콜백은 PASSIVE_LEVEL 실행되며 드라이버가 핫 스왑 프로세스의 중요한 단계에서 DriverProxy 시스템과 조정할 수 있는 기회를 제공합니다.

콜백은 엔드포인트 등록 중에 특정 순서로 호출됩니다.

  1. 사전 처리 단계: 엔드포인트 함수 전환이 시작되기 전에 호출됩니다. 드라이버는 이 단계를 사용하여 다음과 같은 향후 변경에 대비할 수 있습니다.

    • 드라이버별 잠금 획득
    • 현재 상태 저장
    • 다른 드라이버 구성 요소에 알림
    • 스위치 중에 필요한 리소스 준비
  2. 프록시 중단 단계: 등록된 엔드포인트에 대한 모든 호출이 차단되는 동안 호출됩니다. 이 단계에서 DriverProxy 시스템은 런다운 잠금을 보유하며 엔드포인트 함수에 대한 새 호출은 진행되지 않습니다. 다음과 같이 엔드포인트 함수에서 액세스할 수 있는 리소스에 단독으로 액세스해야 하는 작업을 수행하는 가장 안전한 시간입니다.

    • 공유 데이터 구조 업데이트
    • 하드웨어 다시 구성
    • 전역 드라이버 상태 수정
  3. 후처리 단계: 엔드포인트 함수 전환이 완료되고 정상 작업이 다시 시작된 후 호출됩니다. 드라이버는 다음과 같은 정리 작업에 이 단계를 사용할 수 있습니다.

    • 드라이버별 잠금 해제
    • 내부 상태 업데이트
    • 다른 구성 요소에 완료 알림
    • 로깅 또는 성능 추적

콜백은 등록을 계속하려면 STATUS_SUCCESS 반환해야 합니다. 오류가 발생하면 전체 작업이 실패하고 롤백됩니다.

DriverProxyRegisterCallbackProxyStalled 단계 중에는 모든 엔드포인트 호출이 차단되므로 콜백은 시스템 중단을 최소화하기 위해 작업을 신속하게 수행해야 합니다.

콜백은 교착 상태를 일으킬 수 있으므로 동일한 DriverProxy 확장으로 다시 호출할 수 있는 작업을 수행해서는 안 됩니다.

콜백은 선택 사항이며 엔드포인트 등록 중에 드라이버별 조정이 필요하지 않은 경우 NULL일 수 있습니다.

요구 사항

요구 사항 가치
대상 플랫폼 보편적
Header wdm.h
IRQL PASSIVE_LEVEL

참고하십시오

IoRegisterDriverProxyEndpoints

DRIVER_PROXY_REGISTER_CALLBACK_PHASE

DRIVER_PROXY_ENDPOINT_INFORMATION

IoCreateDriverProxyExtension