Método IPort::NewRegistryKey (portcls.h)

El método NewRegistryKey abre una clave del Registro existente o crea una nueva clave en el Registro. El método crea un objeto de clave del Registro para representar la clave y genera una referencia a este objeto al autor de la llamada. A continuación, el autor de la llamada accede a la clave a través de la interfaz IRegistryKey del objeto.

Sintaxis

NTSTATUS NewRegistryKey(
  PREGISTRYKEY       *OutRegistryKey,
  PUNKNOWN           OuterUnknown,
  ULONG              RegistryKeyType,
  ACCESS_MASK        DesiredAccess,
  POBJECT_ATTRIBUTES ObjectAttributes,
  ULONG              CreateOptions,
  PULONG             Disposition
);

Parámetros

OutRegistryKey

Puntero a una variable de puntero asignada por el autor de la llamada en la que el método escribe la referencia al objeto IRegistryKey. Este objeto representa la clave del Registro que se está abriendo o creando. El llamador debe especificar un valor de puntero válido que no sea NULL para este parámetro.

OuterUnknown

Puntero a la interfaz IUnknown de un objeto que necesita agregar el objeto de clave del Registro. Este parámetro es opcional. Si no se requiere la agregación, especifique este parámetro como NULL.

RegistryKeyType

Especifica el tipo de clave del Registro a la que el autor de la llamada solicita acceso. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

DesiredAccess

Máscara de control de acceso que especifica el tipo de acceso que el autor de la llamada requiere para la clave. Este parámetro es de tipo ACCESS_MASK. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

ObjectAttributes

Puntero a los atributos de objeto de la clave que se va a crear o abrir. Si RegistryKeyType tiene el valor GeneralRegistryKey, este parámetro debe apuntar a una estructura del sistema válida inicializada de tipo OBJECT_ATTRIBUTES con una cadena ObjectName válida para la clave; de lo contrario, el método no usa este parámetro. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

CreateOptions

Marcas que indican las opciones de creación. Puede ser cero si no se desea ninguno. Este parámetro es necesario si RegistryKeyType tiene el valor GeneralRegistryKey; de lo contrario, el método no usa este parámetro. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Disposition

Puntero a una variable ULONG asignada por el autor de la llamada en la que el método escribe un valor de estado que indica si se creó una nueva clave o se abrió una clave existente. Este parámetro es opcional y se puede especificar como NULL si el autor de la llamada no necesita el valor de estado. El método usa este parámetro solo si RegistryKeyType tiene el valor GeneralRegistryKey. El método no usa el parámetro para ninguno de los otros tipos de clave. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

Este método devuelve NTSTATUS que contiene STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de error adecuado.

Comentarios

Los parámetros DesiredAccess, ObjectAttributes y Disposition toman los valores definidos para los parámetros con los mismos nombres en la llamada ZwCreateKey.

Si el parámetro RegistryKeyType tiene el valor GeneralRegistryKey, el método NewRegistryKey abre una clave del Registro existente o crea una clave nueva en el Registro, como se indica en el valor que el método genera a través del parámetro Disposition. Si el tipo de clave es cualquier valor distinto de GeneralRegistryKey, el método abre una clave ya existente que se creó anteriormente durante Plug and Play enumeración del dispositivo.

El llamador debe establecer el parámetro RegistryKeyType en uno de los valores de enumeración que se muestran en la tabla siguiente.

Valor registryKeyType Significado
GeneralRegistryKey Proporcione acceso genérico a cualquier tipo de clave. Abre la clave si existe o crea la clave si no lo hace.
DeviceRegistryKey Abra una clave existente que contenga información específica del dispositivo.
DriverRegistryKey Abra una clave existente que contenga información específica del controlador.
HwProfileRegistryKey Abra una clave existente relativa al perfil de hardware actual para la información del dispositivo o del controlador. Esto permite al controlador acceder a la información de configuración específica del perfil de hardware.
DeviceInterfaceRegistryKey Abra una clave del Registro existente que contenga información sobre una instancia de interfaz de dispositivo determinada.

Para un valor RegistryKeyType de GeneralRegistryKey, el autor de la llamada debe proporcionar un valor de parámetro ObjectAttributes válido y los parámetros CreateOptions y Disposition son opcionales. Para cualquier otro valor RegistryKeyType, el autor de la llamada debe proporcionar un valor de parámetro DeviceObject válido y no se usan los parámetros CreateOptions y Disposition.

El parámetro ObjectAttributes apunta a una estructura opaca de tipo OBJECT_ATTRIBUTES que contiene atributos de objeto, como el nombre de clave y el descriptor de seguridad. Use la macro InitializeObjectAttributes para inicializar la estructura. En el parámetro Attributes de esta macro, establezca la marca OBJ_KERNEL_HANDLE a menos que tenga previsto permitir que las aplicaciones en modo de usuario no seguras tengan acceso de lectura y escritura a la clave del Registro.

El parámetro DesiredAccess es una máscara de control de acceso. Especifica el tipo de control de acceso que el autor de la llamada debe tener en la nueva clave del Registro al acceder a él a través del objeto OutRegistryKey. Esta máscara no debe confundirse con la ACL (lista de control de acceso) que controla el acceso de los usuarios a la clave del Registro. Al llamar a NewRegistryKey para crear una clave del Registro de tipo GeneralRegistryKey, el parámetro ObjectAttributes especifica los atributos de la clave, incluido un descriptor de seguridad que contiene la ACL. Sin embargo, si el tipo de clave es GeneralRegistryKey y el puntero del descriptor de seguridad de la estructura ObjectAttributes es NULL o el puntero ACL del descriptor de seguridad es NULL, la nueva clave creada por la llamada heredará la ACL de la clave primaria de forma predeterminada.

Si la clave no es de tipo GeneralRegistryKey, la clave conserva la ACL que Plug and Play asignó a la clave cuando se creó durante la enumeración del dispositivo.

El método NewRegistryKey es similar a la función PcNewRegistryKey, salvo que el objeto de dispositivo y el objeto de puerto deben especificarse explícitamente en una llamada PcNewRegistryKey, pero simplemente están implícitos en una llamada a NewRegistryKey. Los controladores del adaptador suelen llamar a PcNewRegistryKey. Los controladores de minipuerto suelen llamar a NewRegistryKey en su lugar.

Una vez creada o abierta una clave del Registro mediante una llamada a NewRegistryKey o PcNewRegistryKey, el método IRegistryKey::NewSubKey se puede usar para crear subclaves en esa clave.

Los parámetros OutRegistryKey y OuterUnknown siguen las convenciones de recuento de referencias para objetos COM.

Requisitos

Requisito Valor
Header portcls.h
IRQL PASSIVE_LEVEL

Consulte también

IPort