Partager via


Fonction de rappel PFNKSHANDLER (ks.h)

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

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 KSPROPERTY .

[in, out] Data

Spécifie une copie alignée du paramètre de données de la 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 pour la méthode.

Valeur retournée

Retournez STATUS_SUCCESS si la méthode est gérée et que la mémoire tampon de données a été remplie selon l’indicateur spécifié dans KSMETHOD_ITEM. Si vous retournez des données, votre pilote doit définir le champ Irp-IoStatus.Information>, mais il ne doit pas définir le champ Irp-IoStatus.Status> et ne doit pas terminer l’IRP. Marquez l’IRP en attente s’il doit être terminé de manière 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é effectuée et doit être effectuée par la fonction d’assistance appelante. Retourne tout 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 membre MethodHandler 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éthode 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éthode doit définir le membre Information de la structure IO_STATUS_BLOCK pour le membre IoStatus au sein du paramètre Irp (Irp ) sur la taille de cette mémoire tampon de données. Le minidriver définit le membre Flags de la structure de 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éthode en tant qu’écriture ou modification respectivement.

L’extrait de code suivant montre un exemple d’implémentation d’un gestionnaire de méthode qui définit la taille de la mémoire tampon de données de retour 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.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête ks.h (inclure Ks.h)

Voir aussi

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler