Condividi tramite


Funzione di callback PFNKSHANDLER (ks.h)

La routine fornita dal minidriver viene chiamata quando Lo streaming del kernel riceve una richiesta di IOCTL_KS_METHOD, get/set. Specificare un puntatore a questo gestore nella struttura di KSMETHOD_ITEM pertinente, KSPROPERTY_ITEM .

Sintassi

PFNKSHANDLER Pfnkshandler;

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

Parametri

[in] Irp

Specifica l'IRP che contiene la richiesta di metodo o proprietà.

[in] Request

Specifica una copia allineata del parametro del metodo. Questo è in genere un puntatore a una struttura KSMETHOD o KSPROPERTY .

[in, out] Data

Specifica una copia allineata del parametro dati del metodo o l'indirizzo di sistema del parametro dati originale, a seconda del flag specificato nella struttura KSMETHOD_ITEM per il metodo.

Valore restituito

Restituisce STATUS_SUCCESS se il metodo viene gestito e il buffer di dati è stato riempito per ogni flag specificato in KSMETHOD_ITEM. Se restituisce dati, il driver deve impostare il campo Irp-IoStatus.Information, ma non deve impostare il campo Irp-IoStatus.Status>>né completare l'IRP. Contrassegnare l'IRP in sospeso se deve essere completato in modo asincrono.

In alternativa, restituire STATUS_SOME_NOT_MAPPED se il metodo è stato gestito, ma la richiesta specifica non è stata completata e deve essere completata dalla funzione helper chiamante. Restituisce qualsiasi altro messaggio di errore per indicare che il metodo non è supportato o si è verificato un errore di parametro.

Commenti

Il minidriver specifica l'indirizzo di questa routine nel membro MethodHandler della struttura KSMETHOD_ITEM .

La dichiarazione del gestore usata per KStrMethodHandler e KStrSupportHandler viene usata anche per i gestori di set di proprietà ed eventi, con gli stessi parametri e valori restituiti.

Quando una funzione helper, ad esempio KsMethodHandler , chiama un gestore di metodi il cui buffer di dati è definito come buffer di scrittura o modifica, il gestore del metodo deve impostare il membro Informationdella struttura IO_STATUS_BLOCK per il membro IoStatus all'interno del parametro IRP (IRP ) alle dimensioni del buffer di dati. Il minidriver imposta il membro Flag della struttura KSMETHOD_ITEM per il metodo per KSMETHOD_TYPE_WRITE o KSMETHOD_TYPE_MODIFY per definire rispettivamente il buffer di dati del gestore del metodo come scrittura o modifica.

Il frammento di codice seguente mostra un esempio di implementazione di un gestore di metodi che imposta le dimensioni del buffer di dati restituito nell'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);
}

Il minidriver specifica l'indirizzo di questa routine nel membro GetPropertyHandler della struttura KSPROPERTY_ITEM .

Il minidriver specifica l'indirizzo di questa routine nel membro SetPropertyHandler della struttura KSPROPERTY_ITEM .

Il minidriver specifica l'indirizzo di questa routine nel membro SupportHandler della struttura KSMETHOD_ITEM .

La dichiarazione del gestore usata per KStrMethodHandler e KStrSupportHandler viene usata anche per i gestori di set di proprietà ed eventi, con gli stessi parametri e valori restituiti.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione ks.h (include Ks.h)

Vedi anche

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler