영어로 읽기

다음을 통해 공유


알림 처리

RegistryCallback 루틴은 발생 중인 레지스트리 작업에 대한 정보를 포함하는 REG_XXX_KEY_INFORMATION 구조체에 대한 포인터를 받습니다.

RegistryCallback 루틴은 레지스트리 작업을 모니터링, 차단 또는 수정할 수 있습니다.

레지스트리 호출 모니터링

레지스트리 필터링 드라이버가 레지스트리 작업을 모니터링하는 경우 RegistryCallback 루틴은 카운터를 업데이트하거나 다른 부기 작업을 수행한 다음 STATUS_SUCCESS 반환할 수 있습니다. RegistryCallback 루틴이 STATUS_SUCCESS 반환할 때마다 구성 관리자는 레지스트리 작업을 계속 수행합니다.

레지스트리 호출 모니터링은 Windows XP 이상 버전의 Windows에서 지원됩니다.

레지스트리 호출 차단

레지스트리 필터링 드라이버는 RegistryCallback 루틴이 상태 값을 반환할 때 NT_SUCCESS(status)가 FALSE인 경우(즉, NTSTATUS 값이 성공이 아닐 경우) 레지스트리 작업을 차단할 수 있습니다. 구성 관리자가 성공하지 못한 반환 값을 받으면 드라이버가 지정한 상태 값을 사용하여 호출 스레드로 즉시 반환됩니다. 따라서 레지스트리 필터링 드라이버는 사전 알림을 사용하여 레지스트리 작업이 처리되지 않도록 할 수 있습니다.

RegistryCallback 루틴이 사전 알림에 대해 NT_SUCCESS(status)가 FALSE상태 값을 반환하는 경우 작업의 사후 알림 콜백이 발생하지 않습니다.

레지스트리 호출 차단은 Windows XP 이상 버전의 Windows에서 지원됩니다. Windows Vista 이상에서는 드라이버가 레지스트리 작업이 호출 스레드로 반환하는 값을 수정할 수 있습니다. 이러한 값은 Windows Vista 이상에 대한 REG_XXX_KEY_INFORMATION 구조체에 포함됩니다.

레지스트리 호출 수정

레지스트리 필터링 드라이버는 레지스트리 작업의 출력 매개 변수 또는 반환 값을 수정할 수 있습니다. 또한 드라이버는 레지스트리가 작업을 처리하도록 허용하는 대신 레지스트리 작업을 완전히 처리할 수 있습니다.

레지스트리 필터링 드라이버의 RegistryCallback 루틴이 사후 알림을 받으면 다음을 수행할 수 있습니다.

  • 해당 REG_XXX_KEY_INFORMATION 구조체에 포함된 출력 매개 변수를 수정한 다음 STATUS_SUCCESS 반환합니다. 구성 관리자는 수정된 출력 매개 변수를 호출 스레드에 반환합니다.

    출력 매개 변수 수정은 Windows Vista 이상에서 지원됩니다.

  • REG_POST_OPERATION_INFORMATION 구조체의 ReturnStatus 멤버에 대한 상태 값을 제공한 다음 STATUS_CALLBACK_BYPASS 반환하여 레지스트리 작업의 반환 값을 수정합니다. 구성 관리자는 지정된 반환 값을 호출 스레드에 반환합니다.

    메모 드라이버가 상태 코드를 성공에서 실패로 변경하는 경우 구성 관리자가 할당한 개체의 할당을 취소해야 할 수 있습니다. 또는 드라이버가 실패에서 성공으로 상태 코드를 변경하는 경우 적절한 출력 매개 변수를 제공해야 할 수 있습니다.

반환 값 수정은 Windows Vista 이상에서 지원됩니다.

레지스트리 필터링 드라이버의 RegistryCallback 루틴이 사전 알림을 받으면 루틴은 레지스트리 작업 자체를 처리한 다음 STATUS_CALLBACK_BYPASS 반환할 수 있습니다. 레지스트리는 드라이버에서 STATUS_CALLBACK_BYPASS 받으면 호출 스레드에 STATUS_SUCCESS 반환하고 작업을 처리하지 않습니다. 드라이버는 레지스트리 작업을 선점하고 완전히 처리해야 하며 드라이버는 REG_XXX_KEY_INFORMATION 구조에서 유효한 출력 값을 반환하도록 주의해야 합니다.

드라이버는 Windows Vista 이상에서 레지스트리 작업을 선점할 수 있습니다.

RegistryCallback 루틴이 사전 알림에 대한 STATUS_CALLBACK_BYPASS 반환하는 경우 작업의 사후 알림 콜백이 발생하지 않습니다.

메모 몇 가지 레지스트리 시스템 호출은 거의 사용되지 않으므로 문서화되지 않으며, 사용되는 경우 일반적으로 레지스트리에서 몇 가지 틀에 얽매이지 않는 결과를 달성하는 것입니다. 이러한 호출에 의해 수행되는 작업을 수정하는 것은 어렵고 오류가 발생하기 쉽습니다. 드라이버 개발자는 다음 레지스트리 시스템 호출을 수정하지 않는 것이 좋습니다.

  • NtRestoreKey
  • NtSaveKey
  • NtSaveKeyEx
  • NtLoadKeyEx
  • NtUnloadKey2
  • NtUnloadKeyEx
  • NtReplaceKey
  • NtRenameKey
  • NtSetInformationKey