Función ZwNotifyChangeKey (ntifs.h)

La rutina ZwNotifyChangeKey permite a un controlador solicitar notificaciones cuando cambia una clave del Registro.

Sintaxis

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
);

Parámetros

[in] KeyHandle

Identificador de la clave para la que se va a registrar una rutina de notificación. Este identificador se crea mediante una llamada correcta a ZwCreateKey o ZwOpenKey. El autor de la llamada debe haber especificado KEY_NOTIFY acceso.

[in, optional] Event

Identificador opcional de un evento creado por el autor de la llamada que se establecerá en el estado Signaled cuando se complete la operación. Si no es NULL, el autor de la llamada se coloca en un estado de espera hasta que la operación se realiza correctamente, en cuyo momento el evento se establece en el estado Signaled.

[in, optional] ApcRoutine

Puntero a una rutina de APC proporcionada por el autor de la llamada para que se ejecute una vez completada la operación. Este parámetro es opcional y puede ser NULL.

[in, optional] ApcContext

Puntero que se pasa como argumento a la rutina de APC a la que apunta ApcRoutine . Este argumento es necesario si ApcRoutine no es NULL y debe convertirse al tipo PVOID. De lo contrario, si ApcRoutine es NULL, establezca este parámetro en NULL también.

El significado de este parámetro depende de si se llama a la rutina desde el modo kernel o desde el modo de usuario:

  • Para una llamada en modo kernel, establezca este parámetro en uno de los siguientes WORK_QUEUE_TYPE valores de enumeración:

    • CriticalWorkQueue
    • DelayedWorkQueue
  • Para una llamada en modo de usuario, este parámetro apunta a un contexto especificado por el autor de la llamada para la rutina de APC.

[out] IoStatusBlock

Puntero a una estructura de IO_STATUS_BLOCK que contiene el estado final e información sobre la operación. Para llamadas correctas que devuelven datos, el número de bytes escritos en Buffer se proporciona en IoStatusBlock-Information>.

[in] CompletionFilter

Máscara de bits de las operaciones que hacen que se notifique al controlador. Especifique una o varias de las marcas siguientes:

Valor Significado
REG_NOTIFY_CHANGE_NAME Notificar al autor de la llamada si se agrega o elimina una subclave.
REG_NOTIFY_CHANGE_ATTRIBUTES Notificar al autor de la llamada los cambios en los atributos de la clave, como la información del descriptor de seguridad.
REG_NOTIFY_CHANGE_LAST_SET Notificar al autor de la llamada los cambios en un valor de la clave. Esto puede incluir agregar o eliminar un valor, o cambiar un valor existente. (El autor de la llamada no recibe ninguna notificación si el nuevo valor escrito en la clave coincide con el valor anterior de la clave).
REG_NOTIFY_CHANGE_SECURITY Notificar al autor de la llamada los cambios en el descriptor de seguridad de la clave.

[in] WatchTree

Si es TRUE, se notifica al controlador los cambios en todas las subclaves de la clave especificada. Si es FALSE, el controlador solo se notifica si hay cambios en la clave especificada.

[out, optional] Buffer

Reservado. Especifique NULL.

[in] BufferSize

Reservado. Especifique cero.

[in] Asynchronous

Si es FALSE, la rutina no devuelve hasta que se produce el evento especificado. Si es TRUE, la rutina devuelve inmediatamente.

Valor devuelto

La rutina ZwNotifyChangeKey devuelve STATUS_SUCCESS si se ejecuta correctamente o el valor NTSTATUS adecuado de lo contrario. Si el autor de la llamada especifica TRUE para el parámetro Asincrónico y el evento aún no se ha producido, la rutina devuelve STATUS_PENDING.

Comentarios

Si la llamada a la función ZwNotifyChangeKey se produce en modo de usuario, debe usar el nombre "NtNotifyChangeKey" en lugar de "ZwNotifyChangeKey".

En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Windows Native System Services pueden comportarse de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte también

IO_STATUS_BLOCK

WORK_QUEUE_ITEM

WORK_QUEUE_TYPE

ZwCreateKey

ZwOpenKey