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