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