다음을 통해 공유


ZwNotifyChangeKey 함수(ntifs.h)

ZwNotifyChangeKey 루틴을 사용하면 레지스트리 키가 변경될 때 드라이버가 알림을 요청할 수 있습니다.

구문

NTSYSAPI NTSTATUS ZwNotifyChangeKey(
  [in]            HANDLE           KeyHandle,
  [in, optional]  HANDLE           Event,
  [in, optional]  PIO_APC_ROUTINE  ApcRoutine,
  [in, optional]  PVOID            ApcContext,
  [out]           PIO_STATUS_BLOCK IoStatusBlock,
  [in]            ULONG            CompletionFilter,
  [in]            BOOLEAN          WatchTree,
  [out, optional] PVOID            Buffer,
  [in]            ULONG            BufferSize,
  [in]            BOOLEAN          Asynchronous
);

매개 변수

[in] KeyHandle

알림 루틴을 등록할 키에 대한 핸들입니다. 이 핸들은 ZwCreateKey 또는 ZwOpenKey성공적으로 호출하여 만듭니다. 호출자가 KEY_NOTIFY 액세스를 지정해야 합니다.

[in, optional] Event

작업이 완료될 때 Signaled 상태로 설정될 호출자가 만든 이벤트에 대한 선택적 핸들입니다. NULL이 아닌 경우 호출자는 작업이 성공할 때까지 대기 상태로 전환되며, 이때 이벤트가 Signaled 상태로 설정됩니다.

[in, optional] ApcRoutine

작업이 완료된 후 실행할 호출자 제공 APC 루틴에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

[in, optional] ApcContext

ApcRoutine이 가리키는 APC 루틴에 인수로 전달하는 포인터입니다. ApcRoutine이 NULL이 아닌 경우 이 인수가 필요하며 PVOID 형식으로 캐스팅되어야 합니다. 그렇지 않으면 ApcRoutine 이 NULL인 경우 이 매개 변수도 NULL로 설정합니다.

이 매개 변수의 의미는 루틴이 커널 모드에서 호출되는지 아니면 사용자 모드에서 호출되는지에 따라 달라집니다.

  • 커널 모드 호출의 경우 이 매개 변수를 다음 WORK_QUEUE_TYPE 열거형 값 중 하나로 설정합니다.

    • CriticalWorkQueue
    • DelayedWorkQueue
  • 사용자 모드 호출의 경우 이 매개 변수는 APC 루틴에 대해 호출자가 지정한 컨텍스트를 가리킵니다.

[out] IoStatusBlock

작업에 대한 최종 상태 정보가 포함된 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 데이터를 반환하는 성공적인 호출의 경우 Buffer에 기록된 바이트 수가 IoStatusBlock-Information>에 제공됩니다.

[in] CompletionFilter

드라이버에 알림을 표시하는 작업의 비트 마스크입니다. 다음 플래그 중 하나 이상 지정 합니다.

의미
REG_NOTIFY_CHANGE_NAME 하위 키가 추가되거나 삭제되면 호출자에게 알립니다.
REG_NOTIFY_CHANGE_ATTRIBUTES 보안 설명자 정보와 같은 키 특성에 대한 변경 내용을 호출자에게 알립니다.
REG_NOTIFY_CHANGE_LAST_SET 호출자에게 키 값에 대한 변경 내용을 알립니다. 여기에는 값 추가 또는 삭제 또는 기존 값 변경이 포함될 수 있습니다. (키에 기록된 새 값이 키의 이전 값과 일치하는 경우 호출자는 알림을 받지 않습니다.)
REG_NOTIFY_CHANGE_SECURITY 키의 보안 설명자에 대한 변경 내용을 호출자에게 알립니다.

[in] WatchTree

TRUE이면 지정된 키의 모든 하위 키에 대한 변경 내용에 대한 알림이 드라이버에 표시됩니다. FALSE이면 지정된 키에 대한 변경 내용에 대해서만 드라이버에 알림이 표시됩니다.

[out, optional] Buffer

예약되어 있습니다. NULL을 지정합니다.

[in] BufferSize

예약되어 있습니다. 0을 지정합니다.

[in] Asynchronous

FALSE이면 지정된 이벤트가 발생할 때까지 루틴이 반환되지 않습니다. TRUE이면 루틴이 즉시 반환됩니다.

반환 값

ZwNotifyChangeKey 루틴은 성공에 대한 STATUS_SUCCESS 반환하거나, 그렇지 않으면 적절한 NTSTATUS 값을 반환합니다. 호출자가 비동기 매개 변수에 대해 TRUE를 지정하고 이벤트가 아직 발생하지 않은 경우 루틴은 STATUS_PENDING 반환합니다.

설명

ZwNotifyChangeKey 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwNotifyChangeKey" 대신 "NtNotifyChangeKey" 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

추가 정보

IO_STATUS_BLOCK

WORK_QUEUE_ITEM

WORK_QUEUE_TYPE

ZwCreateKey

ZwOpenKey