Freigeben über


PFNKSHANDLER-Rückruffunktion (ks.h)

Die 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_ITEM, KSPROPERTY_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 von dem Flag, das in der KSMETHOD_ITEM Struktur für die Methode angegeben wurde.

Rückgabewert

Gibt STATUS_SUCCESS zurück, wenn die Methode behandelt wird und der Datenpuffer pro 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 feld festlegen oder das IRP abschließen. Markieren Sie das ausstehende IRP, wenn es asynchron abgeschlossen werden soll.

Geben Sie alternativ STATUS_SOME_NOT_MAPPED zurück, wenn die Methode verarbeitet wurde, die bestimmte Anforderung jedoch nicht abgeschlossen wurde und von der aufrufenden Hilfsfunktion abgeschlossen werden muss. Gibt eine andere Fehlermeldung zurück, um anzugeben, dass die Methode nicht unterstützt wird oder ein Parameterfehler aufgetreten ist.

Bemerkungen

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

Die Handlerdeklaration, die für KStrMethodHandler und KStrSupportHandler- verwendet wird, wird auch für Handler von Eigenschafts- 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 Information Member der IO_STATUS_BLOCK-Struktur für das IoStatus-element innerhalb des IRP (Irp Parameter) auf die Größe dieses Datenpuffers festlegen. Der Minidriver legt das Flags Member der KSMETHOD_ITEM Struktur für die Methode so fest, dass KSMETHOD_TYPE_WRITE oder KSMETHOD_TYPE_MODIFY, 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ückgegebenen 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 Handlerdeklaration, die für KStrMethodHandler und KStrSupportHandler- verwendet wird, wird auch für Handler von Eigenschafts- und Ereignissätzen mit denselben Parametern und Rückgabewerten verwendet.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- ks.h (enthalten Ks.h)

Siehe auch

KSMETHOD-

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler-