Partager via


Fonction de rappel PFNKSHANDLER (ks.h)

La routine fournie par minidriver est appelée lorsque Kernel Streaming reçoit un IOCTL_KS_METHOD, get/set, demande de propriété. Fournissez un pointeur vers ce gestionnaire dans la structure KSMETHOD_ITEMappropriée, KSPROPERTY_ITEM.

Syntaxe

PFNKSHANDLER Pfnkshandler;

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

Paramètres

[in] Irp

Spécifie l’IRP qui contient la méthode ou la demande de propriété.

[in] Request

Spécifie une copie alignée du paramètre de méthode. Il s’agit généralement d’un pointeur vers une structure KSMETHOD ou structure KSPROPERTY.

[in, out] Data

Spécifie une copie alignée du paramètre de données de méthode ou de l’adresse système du paramètre de données d’origine, en fonction de l’indicateur spécifié dans la structure KSMETHOD_ITEM de la méthode.

Valeur de retour

Retourne STATUS_SUCCESS si la méthode est gérée et que la mémoire tampon de données a été remplie conformément à l’indicateur spécifié dans KSMETHOD_ITEM. Si vous retournez des données, votre pilote doit définir le champ Irp->IoStatus.Information, mais ne doit pas définir le champ Irp->IoStatus.Status ni terminer l’IRP. Marquez l’IRP en attente s’il doit être terminé de façon asynchrone.

Vous pouvez également retourner STATUS_SOME_NOT_MAPPED si la méthode a été gérée, mais que la demande particulière n’a pas été terminée et doit être terminée par la fonction d’assistance appelante. Retourne un autre message d’erreur pour indiquer que la méthode n’est pas prise en charge ou qu’une erreur de paramètre s’est produite.

Remarques

Le minidriver spécifie l’adresse de cette routine dans le MethodHandler membre de la structure KSMETHOD_ITEM.

La déclaration de gestionnaire utilisée pour KStrMethodHandler et KStrSupportHandler est également utilisée pour les gestionnaires de jeux de propriétés et d’événements, avec les mêmes paramètres et valeurs de retour.

Lorsqu’une fonction d’assistance telle que KsMethodHandler appelle un gestionnaire de méthodes dont la mémoire tampon de données est définie comme une mémoire tampon d’écriture ou de modification, le gestionnaire de méthodes doit définir le membre Information de la structure IO_STATUS_BLOCK pour le membre IoStatus dans le paramètre IRP (paramètre Irp) sur la taille de cette mémoire tampon de données. Le minidriver définit les indicateurs de membre de la structure KSMETHOD_ITEM pour que la méthode KSMETHOD_TYPE_WRITE ou KSMETHOD_TYPE_MODIFY pour définir la mémoire tampon de données du gestionnaire de méthodes en tant qu’écriture ou modification respectivement.

L’extrait de code suivant montre un exemple d’implémentation d’un gestionnaire de méthodes qui définit la taille de la mémoire tampon de données retournée dans l’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);
}

Le minidriver spécifie l’adresse de cette routine dans le membre GetPropertyHandler de la structure KSPROPERTY_ITEM.

Le minidriver spécifie l’adresse de cette routine dans le membre SetPropertyHandler de la structure KSPROPERTY_ITEM.

Le minidriver spécifie l’adresse de cette routine dans le membre SupportHandler de la structure KSMETHOD_ITEM.

La déclaration de gestionnaire utilisée pour KStrMethodHandler et KStrSupportHandler est également utilisée pour les gestionnaires de jeux de propriétés et d’événements, avec les mêmes paramètres et valeurs de retour.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête ks.h (include Ks.h)

Voir aussi

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler