Compartir a través de


Función de devolución de llamada PFNKSHANDLER (ks.h)

Se llama a la rutina proporcionada por el minidriver cuando kernel Streaming recibe una solicitud de propiedad IOCTL_KS_METHOD, get/set. Proporcione un puntero a este controlador en la estructura KSMETHOD_ITEMpertinente KSPROPERTY_ITEM.

Sintaxis

PFNKSHANDLER Pfnkshandler;

NTSTATUS Pfnkshandler(
  [in]      PIRP Irp,
  [in]      PKSIDENTIFIER Request,
  [in, out] PVOID Data
)
{...}

Parámetros

[in] Irp

Especifica el IRP que contiene el método o la solicitud de propiedad.

[in] Request

Especifica una copia alineada del parámetro de método. Normalmente, se trata de un puntero a una estructura de KSMETHOD o KSPROPERTY.

[in, out] Data

Especifica una copia alineada del parámetro de datos del método o la dirección del sistema del parámetro de datos original, en función de la marca especificada en la estructura de KSMETHOD_ITEM para el método.

Valor devuelto

Devuelve STATUS_SUCCESS si se controla el método y el búfer de datos se ha rellenado según la marca especificada en KSMETHOD_ITEM. Si devuelve datos, el controlador debe establecer el campo Irp->IoStatus.Information, pero no debe establecer el campo irp- Irp->IoStatus.Status ni debe completar el IRP. Marque el IRP pendiente si se va a completar de forma asincrónica.

Como alternativa, devuelva STATUS_SOME_NOT_MAPPED si el método se ha controlado, pero la solicitud determinada no se ha completado y debe completarse mediante la función auxiliar de llamada. Devuelve cualquier otro mensaje de error para indicar que no se admite el método o se ha producido un error de parámetro.

Observaciones

El minidriver especifica la dirección de esta rutina en el MethodHandler miembro de la estructura KSMETHOD_ITEM.

La declaración de controlador usada para KStrMethodHandler y KStrSupportHandler también se usa para controladores de conjuntos de eventos y propiedades, con los mismos parámetros y valores devueltos.

Cuando una función auxiliar, como KsMethodHandler llama a un controlador de métodos cuyo búfer de datos se define como un búfer de escritura o modificación, el controlador de métodos debe establecer el miembro Information de la estructura de IO_STATUS_BLOCK para el miembro IoStatus dentro del IRP (parámetro irp) en el tamaño de ese búfer de datos. El minidriver establece el miembro Flags de la estructura de KSMETHOD_ITEM para que el método KSMETHOD_TYPE_WRITE o KSMETHOD_TYPE_MODIFY para definir el búfer de datos del controlador de métodos como escritura o modificación, respectivamente.

En el fragmento de código siguiente se muestra un ejemplo de una implementación de un controlador de método que establece el tamaño del búfer de datos devuelto en el IRP:

NTSTATUS
  MethodHandler(PIRP pIrp, PKSIDENTIFIER Request, PVOID Data) {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
    // Pointer to hold the position on the Irp stack
    PIO_STACK_LOCATION  pIrpStack  = NULL;
    ASSERT(pIrp);
    if(Data) {
        // Modify data here
    }
    // Find the current Irp stack.
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
    if(pIrpStack) {
        // Set the size of the returning Irp data.
        pIrp->IoStatus.Information =
          pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
        Status = STATUS_SUCCESS;
    }
    return(Status);
}

El minidriver especifica la dirección de esta rutina en el miembro GetPropertyHandler de la estructura de KSPROPERTY_ITEM.

El minidriver especifica la dirección de esta rutina en el miembro SetPropertyHandler de la estructura de KSPROPERTY_ITEM.

El minidriver especifica la dirección de esta rutina en el miembro SupportHandler de la estructura de KSMETHOD_ITEM.

La declaración de controlador usada para KStrMethodHandler y KStrSupportHandler también se usa para controladores de conjuntos de eventos y propiedades, con los mismos parámetros y valores devueltos.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de ks.h (incluya Ks.h)

Consulte también

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler