PFNKSHANDLER-Rückruffunktion (ks.h)

Die vom Minidriver bereitgestellte Routine wird aufgerufen, wenn Kernel Streaming eine IOCTL_KS_METHOD-, get/set-Eigenschaftsanforderung empfängt. Stellen Sie einen Zeiger auf diesen Handler in der relevanten KSMETHOD_ITEMKSPROPERTY_ITEM Struktur bereit.

Syntax

PFNKSHANDLER Pfnkshandler;

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

Parameter

[in] Irp

Gibt den IRP an, der die -Methode oder -Eigenschaftsanforderung enthält.

[in] Request

Gibt eine ausgerichtete Kopie des Methodenparameters an. Dies ist in der Regel ein Zeiger auf eine KSMETHOD - oder KSPROPERTY-Struktur .

[in, out] Data

Gibt eine ausgerichtete Kopie des Methodendatenparameters oder der Systemadresse des ursprünglichen Datenparameters an, abhängig vom Flag, das in der KSMETHOD_ITEM-Struktur für die -Methode angegeben wurde.

Rückgabewert

Geben Sie STATUS_SUCCESS zurück, wenn die Methode behandelt wird und der Datenpuffer nach dem flag gefüllt wurde, das in KSMETHOD_ITEM angegeben wurde. Wenn Daten zurückgegeben werden, sollte Ihr Treiber das Feld Irp-IoStatus.Information> festlegen, aber nicht das Feld Irp-IoStatus.Status> festlegen und auch nicht das IRP abschließen. Markieren Sie die ausstehende IRP, wenn sie asynchron abgeschlossen werden soll.

Alternativ können Sie STATUS_SOME_NOT_MAPPED zurückgeben, wenn die Methode verarbeitet wurde, die jeweilige Anforderung jedoch nicht abgeschlossen wurde und durch die aufrufende Hilfsfunktion abgeschlossen werden muss. Gibt eine andere Fehlermeldung zurück, um anzugeben, dass die Methode nicht unterstützt wird oder ein Parameterfehler aufgetreten ist.

Hinweise

Der Minidriver gibt die Adresse dieser Routine im MethodHandler-Member der KSMETHOD_ITEM-Struktur an.

Die für KStrMethodHandler und KStrSupportHandler verwendete Handlerdeklaration wird auch für Handler von Eigenschaften- und Ereignissätzen mit denselben Parametern und Rückgabewerten verwendet.

Wenn eine Hilfsfunktion wie KsMethodHandler einen Methodenhandler aufruft, dessen Datenpuffer als Schreib- oder Änderungspuffer definiert ist, muss der Methodenhandler das Element Information der IO_STATUS_BLOCK-Struktur für das IoStatus-Element innerhalb des IRP -Parameters (Irp-Parameter ) auf die Größe dieses Datenpuffers festlegen. Der Minidriver legt den Flags-Member der KSMETHOD_ITEM-Struktur für die -Methode auf KSMETHOD_TYPE_WRITE oder KSMETHOD_TYPE_MODIFY fest, um den Datenpuffer des Methodenhandlers als Schreib- oder Änderungsvorgang zu definieren.

Der folgende Codeausschnitt zeigt ein Beispiel für eine Implementierung eines Methodenhandlers, der die Größe des zurückgebenden Datenpuffers im IRP festlegt:

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

Der Minidriver gibt die Adresse dieser Routine im GetPropertyHandler-Member der KSPROPERTY_ITEM-Struktur an.

Der Minidriver gibt die Adresse dieser Routine im SetPropertyHandler-Member der KSPROPERTY_ITEM-Struktur an.

Der Minidriver gibt die Adresse dieser Routine im SupportHandler-Member der KSMETHOD_ITEM-Struktur an.

Die für KStrMethodHandler und KStrSupportHandler verwendete Handlerdeklaration wird auch für Handler von Eigenschaften- und Ereignissätzen mit denselben Parametern und Rückgabewerten verwendet.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile ks.h (einschließlich Ks.h)

Weitere Informationen

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler