Partager via


SRB_OPEN_STREAM

Le pilote de classe envoie cette demande pour ouvrir un flux.

Valeur de retour

Le minidriver doit définir l’un des éléments suivants comme status dans le SRB :

STATUS_SUCCESS
Indique la réussite de la commande.

STATUS_NOT_IMPLEMENTED
Indique que la fonction n’est pas prise en charge par le minidriver.

STATUS_TOO_MANY_NODES
Indique qu’il n’y a pas suffisamment de ressources pour ouvrir ce flux.

STATUS_IO_DEVICE_ERROR
Indique qu’une défaillance matérielle s’est produite.

Commentaires

Le pilote de classe fournit une mémoire tampon HW_STREAM_OBJECT dans pSrb-StreamObject>, avec pSrb-StreamObject-StreamNumber>> défini sur le numéro du flux à ouvrir. Le pointeur pSrb pointe vers une structure HW_STREAM_REQUEST_BLOCK . StreamNumber correspond au décalage du flux au sein de la structure HW_STREAM_DESCRIPTOR fourni par le minidriver en réponse à une demande de SRB_GET_STREAM_INFO . Le pilote de classe spécifie le format de données que le flux ouvert doit fournir dans pSrb-CommandData-OpenFormat.>>

Lorsque le minidriver reçoit cette demande, il doit déterminer si le flux spécifié peut être ouvert à ce stade. Le minidriver doit également vérifier le format KSDATAFORMAT transmis. champ OpenFormat du SRB. Si le flux peut être ouvert, le minidriver met à jour la structure HW_STREAM_OBJECT et retourne STATUS_SUCCESS. Si le nombre maximal d’instances de flux est déjà ouvert ou si les ressources matérielles nécessaires pour ouvrir ce flux ne sont pas disponibles, le minidriver retourne une erreur appropriée status.

Lorsque la commande SRB_OPEN_STREAM est reçue par le minidriver, le minidriver doit :

  1. Vérifiez que le nombre maximal d’instances de flux n’a pas été dépassé et que la valeur de l’index de flux est valide.

  2. Vérifiez que le format de données demandé est valide pour ce flux.

  3. Définissez le format du flux.

  4. Gérez un tableau de toutes les structures d’extension de flux dans l’extension de l’appareil afin que les IRPs puissent être annulés à partir de n’importe quel flux.

  5. Spécifiez des pointeurs, dans l’objet stream, vers les gestionnaires de données de flux et les gestionnaires de contrôle.

  6. Définissez l’indicateur DMA dans l’objet stream si l’appareil effectue DMA directement sur les adresses de mémoire tampon de données passées dans les routines ReceiveDataPacket . Si le pilote accède aux mémoires tampons de données transmises à l’aide de l’adressage logique, définissez également l’indicateur PIO dans l’objet stream.

  7. Si la prise en charge de l’horloge est disponible sur le flux, indiquez cela par le biais du membre HwClockObject dans l’objet stream.