Compartir a través de


Rutinas de biblioteca en tiempo de ejecución del Registro

Para manipular las entradas del Registro, los controladores pueden llamar a las rutinas RtlXxxRegistryXxx , que proporcionan una interfaz más sencilla que las rutinas ZwXxxKey . Al hacerlo, no es necesario que el controlador abra y cierre los identificadores; en su lugar, el controlador hace referencia a las claves por nombre.

Se pasan los parámetros RelativeTo y Path a cada rutina RtlXxxRegistryXxx . Si RelativeTo es RTL_REGISTRY_ABSOLUTE, Path especifica la ruta de acceso completa de la clave, empezando por la raíz \Registry . Si RelativeTo es RTL_REGISTRY_HANDLE, Path es realmente un identificador abierto. Valores adicionales de RTL_REGISTRY_XXX para RelativeTo determinan las rutas comunes de raíces para la clave; en estos casos, Path indica la ruta relativa a esa raíz. Por ejemplo, RTL_REGISTRY_USER requiere que Path sea relativa a la configuración del Registro del usuario actual. (Este valor es equivalente a especificar HKEY_CURRENT_USER en una aplicación en modo de usuario). Para obtener una descripción de todos los valores RTL_REGISTRY_XXX , vea RtlCheckRegistryKey.

En la tabla siguiente se enumeran las operaciones que pueden realizar los controladores llamando a las rutinas RtlXxxRegistryXxx .

Operación Rutina RtlXxxRegistryXxx a la que llamar

Creación de una clave del Registro

RtlCreateRegistryKey

Comprobar si existe una clave del Registro

RtlCheckRegistryKey

Examen de uno o varios valores de clave del Registro

RtlQueryRegistryValues

Escritura de un valor de clave del Registro

RtlWriteRegistryValue

Eliminación de un valor de clave del Registro

RtlDeleteRegistryValue

En el ejemplo de código siguiente se muestra cómo establecer ValueName para \Registry\Machine\System\KeyName en un valor ULONG de 0xFF. Compare este ejemplo con el correspondiente en la sección Rutinas de objetos de clave del Registro .

NTSTATUS status;
ULONG data = 0xFF;

status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
                               (PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
                               (PWCSTR)L"ValueName",
                               REG_DWORD,
                               &data,
                               sizeof(ULONG));

Aunque se escriben menos líneas de código al usar las rutinas RtlXxxRegistryXxx en lugar de las rutinas ZwXxxKey , estas últimas son necesarias para realizar determinadas operaciones. Por ejemplo, no existe ninguna rutina RtlXxxRegistryXxx que corresponda a ZwEnumerateKey.

Si realiza varias operaciones en la misma clave, las rutinas ZwXxxKey son más eficaces, puede usar el mismo identificador abierto para cada operación. Por el contrario, las rutinas RtlXxxRegistryXxx abren y cierran un nuevo identificador para cada operación.