Función WdfControlDeviceInitAllocate (wdfcontrol.h)
[Solo se aplica a KMDF]
El método WdfControlDeviceInitAllocate asigna una estructura WDFDEVICE_INIT que usa un controlador al crear un nuevo objeto de dispositivo de control.
Sintaxis
PWDFDEVICE_INIT WdfControlDeviceInitAllocate(
[in] WDFDRIVER Driver,
[in] const UNICODE_STRING *SDDLString
);
Parámetros
[in] Driver
Identificador de un objeto de controlador de marco.
[in] SDDLString
Puntero a una estructura UNICODE_STRING que describe una cadena Unicode. Esta cadena es una representación del lenguaje de definición de descriptores de seguridad (SDDL) de un descriptor de seguridad. Para obtener más información, vea la siguiente sección Comentarios.
Valor devuelto
WdfControlDeviceInitAllocate devuelve un puntero a una estructura de WDFDEVICE_INIT asignada por el marco, si la operación se realiza correctamente. De lo contrario, el método devuelve NULL.
Observaciones
Si desea que el controlador cree un objeto de dispositivo de control, el controlador debe llamar a WdfControlDeviceInitAllocate para obtener una estructura de WDFDEVICE_INIT que puede pasar a WdfDeviceCreate.
El controlador puede especificar una configuración de seguridad mediante un subconjunto de SDDL. El archivo Wdmsec.h define un conjunto de SDDL_DEVOBJ_Xxxconstantes con formato que puede usar. Para obtener más información sobre los descriptores de seguridad y SDDL, consulte Proteger objetos de dispositivo.
El método WdfDeviceInitAssignSDDLString sobrescribe la configuración de seguridad, si existe, que WdfControlDeviceInitAllocate especifica.
Para obtener más información sobre cómo llamar a WdfControlDeviceInitAllocate, vea Using Control Device Objects.
Ejemplos
En el ejemplo de código siguiente se asigna una estructura de DEVICE_INIT, se asigna un nombre de objeto de dispositivo, se registra una función de devolución de llamada de notificación de apagado y se crea un objeto de dispositivo de control. Para obtener un ejemplo más complejo que usa WdfControlDeviceInitAllocate, vea el controlador de ejemplo NONPNP o el controlador de ejemplo NDISProt.
PWDFDEVICE_INIT deviceInit = NULL;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES objectAttribs;
deviceInit = WdfControlDeviceInitAllocate(
hDriver,
&SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R
);
if (deviceInit == NULL) {
status = STATUS_INSUFFICIENT_RESOURCES;
goto Error;
}
status = WdfDeviceInitAssignName(
deviceInit,
&ntDeviceName
);
if (!NT_SUCCESS(status)) {
WdfDeviceInitFree(deviceInit);
deviceInit = NULL;
goto Error;
}
WdfControlDeviceInitSetShutdownNotification(
deviceInit,
EvtShutdownNotification,
WdfDeviceShutdown
);
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
status = WdfDeviceCreate(
&deviceInit,
&objectAttribs,
&controlDevice
);
if (!NT_SUCCESS(status)) {
WdfDeviceInitFree(deviceInit);
deviceInit = NULL;
goto Error;
}
WdfControlFinishInitializing(controlDevice);
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.0 |
encabezado de | wdfcontrol.h (incluya Wdf.h) |
biblioteca de | Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos). |
irQL | PASSIVE_LEVEL |
reglas de cumplimiento de DDI | ControlDeviceInitAPI(kmdf), CtlDeviceFinishInitDeviceAdd(kmdf), CtlDeviceFinishInitDrEnt, DoubleDeviceInitFree(kmdf), DriverCreate(kmdf), InitFreeDeviceCallback(kmdf) ), InitFreeDeviceCreate(kmdf), InitFreeDeviceCreateType2(kmdf), InitFreeDeviceCreateType, KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |