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) |