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 get/set IOCTL_KS_METHOD. Proporcione un puntero a este controlador en el KSMETHOD_ITEM pertinente, KSPROPERTY_ITEM estructura.

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. Suele ser un puntero a una estructura 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, según 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-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 concreta no se ha completado y debe completarse mediante la función auxiliar que realiza la 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.

Comentarios

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

La declaración de controlador utilizada para KStrMethodHandler y KStrSupportHandler también se usa para los 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 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 defina 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étodos que establece el tamaño del búfer de datos devuelto en 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 KSPROPERTY_ITEM .

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

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

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

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado ks.h (incluye Ks.h)

Consulte también

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler