Partager via


AVCSTRM_CLOSE

Le code de fonction AVCSTRM_CLOSE ferme le flux spécifié et libère toutes les ressources allouées dans AVCSTRM_OPEN.

Bloc d’état E/S

En cas de réussite, avcstrm.sys définit Irp-IoStatus.Status> sur STATUS_SUCCESS.

Les valeurs de retour d’erreur possibles sont les suivantes :

État de l’erreur Description
STATUS_DEVICE_REMOVED L’appareil correspondant à l’opération AVCSTRM_READ n’existe plus.
STATUS_CANCELLED La demande n’a pas pu être effectuée.
STATUS_INVALID_PARAMETER Un paramètre spécifié dans l’IRP est incorrect,
STATUS_INSUFFICIENT_RESOURCES Il n’y avait pas suffisamment de ressources système pour effectuer la demande.
STATUS_PENDING La demande a été reçue, mais nécessite un traitement supplémentaire. La routine d’achèvement des E/S gère la réponse finale.

entrée AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, version et fonction
Utilisez la macro INIT_AVCSTRM_HEADER pour initialiser ces membres. Passez AVCSTRM_CLOSE dans l’argument Request de la macro.

AVCStreamContext
Spécifie le contexte de flux (handle) du flux à fermer. Si AVCSTRM_CLOSE retourne correctement, cette valeur n’est plus valide.

Voici un exemple de spécification du flux à fermer :

    pAVCStrmReq = &pStrmExt->AVCStrmReq;
    RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
    INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);

    pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;

    Status = 
        AVCStrmReqSubmitIrpSynch ( 
            pDevExt->pBusDeviceObject,
            pStrmExt->pIrpReq,
            pAVCStrmReq
            );

Un pilote de sous-unité doit d’abord allouer un IRP et une structure de AVC_STREAM_REQUEST_BLOCK .

Ensuite, il doit utiliser la macro INIT_AVCSTRM_HEADER pour initialiser la structure AVC_STREAM_REQUEST_BLOCK, en passant AVCSTRM_CLOSE comme argument Request à la macro.

Ensuite, le pilote de sous-unité définit le membre AVCStreamContext sur le flux à fermer.

Pour envoyer cette demande, une sous-unité envoie un IRP IRP_MJ_INTERNAL_DEVICE_CONTROL avec le membre IoControlCode de l’IRP défini sur IOCTL_AVCSTRM_CLASS et le membre Argument1 de l’IRP défini à la structure AVC_STREAM_REQUEST_BLOCK qui décrit l’opération de fermeture à effectuer.

Un pilote de sous-unité peut s’attendre à ce que cette commande se termine de manière synchrone. Le résultat retourne immédiatement sans opération en attente dans avcstrm.sys.

Ce code de fonction doit être appelé dans IRQL = PASSIVE_LEVEL.

Commentaires

Cette fonction utilise le membre AVCStreamContext de l’union CommandData dans la structure AVC_STREAM_REQUEST_BLOCK comme indiqué ci-dessous.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

Spécifications

En-têtes: Déclaré dans avcstrm.h. Incluez avcstrm.h.

Voir aussi

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION