Función WdfWorkItemCreate (wdfworkitem.h)
[Se aplica a KMDF y UMDF]
El método WdfWorkItemCreate crea un objeto de elemento de trabajo de marco, que posteriormente se puede agregar a la cola de elementos de trabajo del sistema.
Sintaxis
NTSTATUS WdfWorkItemCreate(
[in] PWDF_WORKITEM_CONFIG Config,
[in] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFWORKITEM *WorkItem
);
Parámetros
[in] Config
Puntero a una estructura de WDF_WORKITEM_CONFIG asignada por el autor de la llamada que el controlador debe haber inicializado llamando a WDF_WORKITEM_CONFIG_INIT.
[in] Attributes
Puntero a una estructura de WDF_OBJECT_ATTRIBUTES asignada por el autor de la llamada que especifica atributos para el objeto de elemento de trabajo.
[out] WorkItem
Puntero a una variable que recibe un identificador para el nuevo objeto de elemento de trabajo.
Valor devuelto
WdfWorkItemCreate devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
Se proporcionó un parámetro no válido. |
|
El elemento primario del objeto de elemento de trabajo no es un objeto de dispositivo ni el antecesor de un objeto de dispositivo. |
|
No había recursos del sistema suficientes para crear un objeto de elemento de trabajo. |
|
El miembro AutomaticSerialization de la estructura WDF_WORKITEM_CONFIG a la que apunta el parámetro Config es TRUE, pero el nivel de ejecución del objeto primario no es WdfExecutionLevelPassive. |
|
El parámetro Attributes era NULL o el miembro ParentObject de la estructura WDF_OBJECT_ATTRIBUTES que Attributes especifica era NULL. |
Comentarios
Una vez que un controlador llama a WdfWorkItemCreate para crear un elemento de trabajo, normalmente almacena información específica del elemento en la memoria contextual del objeto de elemento de trabajo. La función de devolución de llamada EvtWorkItem del controlador, que realiza las tareas del elemento de trabajo, puede acceder a esta información para determinar las tareas que debe realizar. (Para obtener más información sobre cómo almacenar información en la memoria de contexto, vea Espacio de contexto de objetos de marco).
Después de almacenar la información del elemento de trabajo, el controlador debe llamar a WdfWorkItemEnqueue para agregar el elemento de trabajo a la cola del elemento de trabajo del sistema. Cuando un subproceso de trabajo del sistema está disponible, el subproceso quita el elemento de trabajo de la cola y llama a la función de devolución de llamada EvtWorkItem .
Cuando el controlador crea un objeto de elemento de trabajo, debe especificar un objeto primario para el objeto de elemento de trabajo en el miembro ParentObject de la estructura WDF_OBJECT_ATTRIBUTES . El objeto primario debe ser un objeto de dispositivo de marco o cualquier objeto cuya cadena de elementos primarios conduce a un objeto de dispositivo de marco. El marco eliminará el objeto de elemento de trabajo cuando elimine el objeto de dispositivo.
Para eliminar el objeto de elemento de trabajo anteriormente, el controlador puede llamar a WdfObjectDelete, como se describe en Uso de elementos de trabajo de Framework.
El controlador puede recuperar el objeto primario de un elemento de trabajo llamando a WdfWorkItemGetParentObject.
Si el controlador proporciona funciones de devolución de llamada EvtCleanupCallback o EvtDestroyCallback para el objeto de elemento de trabajo, tenga en cuenta que el marco llama a estas funciones de devolución de llamada en IRQL = PASSIVE_LEVEL.
Para obtener más información sobre los elementos de trabajo, vea Uso de elementos de trabajo de framework.
Ejemplos
En el ejemplo de código siguiente se inicializa una estructura de WDF_OBJECT_ATTRIBUTES , se inicializa una estructura de WDF_WORKITEM_CONFIG y se llama a WdfWorkItemCreate.
NTSTATUS status = STATUS_SUCCESS;
PWORKER_ITEM_CONTEXT context;
WDF_OBJECT_ATTRIBUTES attributes;
WDF_WORKITEM_CONFIG workitemConfig;
WDFWORKITEM hWorkItem;
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(
&attributes,
WORKER_ITEM_CONTEXT
);
attributes.ParentObject = FdoData->WdfDevice;
WDF_WORKITEM_CONFIG_INIT(
&workitemConfig,
CallbackFunction
);
status = WdfWorkItemCreate(
&workitemConfig,
&attributes,
&hWorkItem
);
if (!NT_SUCCESS(status)) {
return status;
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfworkitem.h (incluya Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |