System-Defined 콜백 개체 사용

시스템은 드라이버 사용을 위한 세 가지 콜백 개체를 정의합니다.

\Callback\SetSystemTime

\Callback\PowerState

\Callback\Processor추가

시스템 시간(예: 파일 시스템 드라이버)을 사용하는 드라이버는 \Callback\SetSystemTime 콜백 개체에 등록할 수 있습니다. 이 콜백은 시스템 시간이 변경되면 알림을 제공합니다.

\Callback\PowerState 콜백 개체는 다음 중 하나가 발생할 때 알림을 제공합니다.

  • 시스템은 AC에서 DC 전원으로 전환하거나 그 반대로 전환합니다.

  • 시스템 전원 정책은 사용자 또는 애플리케이션 요청의 결과로 변경됩니다.

  • 시스템 절전 모드 또는 종료 상태로의 전환이 임박했습니다. 드라이버는 종료를 예상하여 코드를 메모리에 잠글 수 있도록 알림을 요청할 수 있습니다. 전원 관리자가 시스템 설정 전원 IRP를 보내기 전에 콜백 루틴에 알림이 전송됩니다.

\Callback\ProcessorAdd 콜백은 시스템에 새 프로세서가 추가되면 알림을 제공합니다.

시스템 정의 콜백을 사용하려면 드라이버가 콜백 이름으로 InitializeObjectAttributes 를 호출하여 특성 블록을 초기화한 다음 드라이버 정의 콜백과 마찬가지로 콜백 개체(ExCreateCallback)를 엽니다. 드라이버는 콜백 개체를 만들 것을 요청해서는 안 됩니다.

ExCreateCallback에서 반환된 핸들을 사용하여 드라이버는 ExRegisterCallback을 호출하여 알림 루틴을 등록하고 임의의 컨텍스트에 대한 포인터와 해당 루틴에 대한 포인터를 전달합니다. 드라이버는 언제든지 콜백 루틴을 등록할 수 있습니다. 지정된 조건이 발생하면 시스템은 IRQL<=DISPATCH_LEVEL 등록된 콜백 루틴을 호출합니다.

드라이버에 알림이 더 이상 필요하지 않은 경우 ExUnregisterCallback 을 호출하여 등록된 콜백 목록에서 콜백 루틴을 삭제하고 콜백 개체에 대한 참조를 제거해야 합니다.