Partager via


Codes de fonction principale IRP série

Cette rubrique documente les codes de fonction principale IRP série.

En-tête : Wdm.h (inclure Wdm.h ou Ntddk.h)

IRP_MJ_CREATE

La demande IRP_MJ_CREATE ouvre un appareil série.

Moment de l’envoi

Un client doit ouvrir un appareil série avant de pouvoir accéder au port ou à un appareil connecté au port.

Paramètres d’entrée

Aucun.

Paramètres de sortie

Aucun.

Bloc status d’E/S

Le champ Informations est défini sur zéro.

Le champ État est défini sur l’une des valeurs suivantes :

Valeur d’état Description
STATUS_SUCCESS L’appareil série a été correctement ouvert.
STATUS_ACCESS_DENIED L’appareil est déjà ouvert.
STATUS_DELETE_PENDING La série est en cours de suppression de l’appareil.
STATUS_INSUFFICIENT_RESOURCES L’appareil n’est pas dans un état Plug-and-Play Démarré, ou le pilote n’a pas pu allouer une structure de données interne.
STATUS_NOT_A_DIRECTORY Un appareil série ne peut pas être ouvert en tant que répertoire.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.
STATUS_SHARED_IRQ_BUSY L’interruption affectée à l’appareil est en cours d’utilisation par un autre appareil ouvert.

Opération

Un appareil série doit être ouvert avant de pouvoir être utilisé. Un appareil série est un appareil exclusif ; Un seul fichier peut être ouvert sur un port à un moment donné.

IRP_MJ_DEVICE_CONTROL

La requête IRP_MJ_DEVICE_CONTROL utilise un port série.

Moment de l’envoi

Un client utilise les demandes de contrôle d’appareil pour :

  • Obtenir des informations sur le port
  • Obtenir et définir des registres
  • Obtenir et définir les modes de fonctionnement

Pour obtenir une description des demandes de contrôle d’appareil prises en charge par Serial, consultez l’en-tête ntddser.h .

Paramètres d'entrée

Demande spécifique

Paramètres de sortie

Demande spécifique

Bloc status d’E/S

Demande spécifique

Opération

Demande spécifique

IRP_MJ_FLUSH_BUFFERS

La requête IRP_MJ_FLUSH_BUFFER vide la mémoire tampon d’écriture interne d’un appareil série.

Moment de l’envoi

Un client utilise une demande de vidage pour déterminer quand Serial a effectué toutes les demandes d’écriture envoyées par le client avant la demande de vidage.

Paramètres d'entrée

Aucun.

Paramètres de sortie

Aucun.

Bloc status d’E/S

Le membre Information est défini sur zéro.

Le membre Status est défini sur l’une des valeurs status suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_CANCELLED Un client a annulé la demande. La série annule également une demande si une erreur d’appareil se produit et La série est configurée pour annuler une demande en cas d’erreur d’appareil.
STATUS_DELETE_PENDING Le pilote est en cours de suppression de l’appareil.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.

Opération

La série met en file d’attente et démarre le traitement des demandes d’écriture et de vidage dans l’ordre dans lequel les demandes sont reçues. Serial termine une demande de vidage après avoir appelé IoCompleteRequest pour toutes les demandes d’écriture reçues avant une demande de vidage. Toutefois, l’achèvement de la demande de vidage n’indique pas que toutes les demandes d’écriture démarrées précédemment sont effectuées par d’autres pilotes dans la pile de périphériques. Par exemple, un pilote de filtre peut toujours traiter une demande d’écriture. Un client doit case activée qu’une demande d’écriture est effectuée par tous les pilotes de la pile de périphériques avant que le client tente de libérer ou de réutiliser l’IRP d’une demande d’écriture.

IRP_MJ_INTERNAL_DEVICE_CONTROL

La demande IRP_MJ_INTERNAL_DEVICE_CONTROL définit les modes de fonctionnement internes sur un appareil série.

Moment de l’envoi

Un client utilise les demandes de contrôle d’appareil internes pour :

  • Obtenir et réinitialiser les paramètres de base
  • Contrôler l’opération d’attente/de veille

Pour obtenir une description des demandes de contrôle d’appareil interne, consultez l’en-tête ntddser.h .

Paramètres d'entrée

Demande spécifique

Paramètres de sortie

Demande spécifique

Bloc status d’E/S

Demande spécifique

Opération

Demande spécifique

IRP_MJ_PNP

La demande IRP_MJ_PNP prend en charge Plug-and-Play.

Moment de l’envoi

Le Gestionnaire PnP envoie IRP_MJ_PNP requêtes aux appareils d’interrogation et de démarrage, d’arrêt et de suppression d’appareils.

Paramètres d'entrée

Demande spécifique

Paramètres de sortie

Demande spécifique

Bloc d’E/S status

Demande spécifique

Opération

Serial prend en charge les requêtes Plug-and-Play suivantes :

Serial envoie toutes les autres requêtes Plug-and-Play dans la pile de l’appareil sans traitement supplémentaire.

Serial effectue le traitement série suivant pour les demandes Plug-and-Play :

IRP_MN_QUERY_ID (type BusQueryHardwardIDs)

Si un périphérique série se trouve sur un carte ISA multiport, Serial ajoute la chaîne de caractères large « *PNP0502 » à la chaîne d’ID matériels.

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Les appareils série sur un ISA multiport carte partagent la même interruption status inscrire et la même interruption.

Pour obtenir une description de l’opération générique des requêtes Plug-and-Play, consultez Plug-and-Play LES IRP mineurs.

IRP_MJ_POWER

La demande IRP_MJ_POWER contrôle la gestion de l’alimentation.

Moment de l’envoi

Le gestionnaire d’alimentation utilise les demandes d’alimentation pour interroger et définir les états d’alimentation.

Paramètres d'entrée

Demande spécifique

Paramètres de sortie

Demande spécifique

Bloc d’E/S status

Demande spécifique

Opération

Serial prend en charge les demandes d’alimentation suivantes :

Serial envoie toutes les autres demandes d’alimentation dans la pile des appareils pour être complétées par un pilote de niveau inférieur.

Série est le propriétaire de la stratégie d’alimentation par défaut pour une pile de périphériques série qui utilise série comme pilote de fonction ou un pilote de filtre de niveau inférieur.

Pour plus d’informations sur le fonctionnement générique de ces requêtes, consultez Règles de gestion des irps d’alimentation.

IRP_MJ_QUERY_INFORMATION

La requête IRP_MJ_QUERY_INFORMATION interroge les informations de fin de fichier pour un appareil série.

Moment de l’envoi

Un client utilise une demande d’informations de requête pour obtenir des informations standard et positionner des informations sur un fichier ouvert sur un appareil série.

Paramètres d'entrée

Parameters.QueryFile.FileInformationClass est défini sur FileStandardInformation ou FilePositionInformation.

Paramètres de sortie

Paramètre Description
FileStandardInformation Le membre AssociatedIrp.SystemBuffer pointe vers une structure de FILE_STANDARD_INFORMATION allouée par le client que Serial utilise pour générer des informations standard.
FilePositionInformation Le membre AssociatedIrp.SystemBuffer pointe vers une structure de FILE_POSITION_INFORMATION allouée par le client que Serial utilise pour générer des informations de position.

Bloc d’E/S status

Si la demande réussit, le membre Information est défini sur zéro.

Le membre Status est défini sur l’une des valeurs status suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_CANCELLED Un client a annulé la demande. Série annule également une demande si une erreur d’appareil se produit et série est configuré pour annuler une demande en cas d’erreur d’appareil.
STATUS_DELETE_PENDING La série est en cours de suppression de l’appareil.
STATUS_INVALID_PARAMETER Les informations demandées ne sont pas prises en charge.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.

Opération

Serial prend en charge les requêtes de type FileStandardInformation et FilePositionInformation.

Les informations de fichier standard sont toujours définies sur zéro ou FALSE, le cas échéant. Les informations de position sont toujours définies sur zéro.

IRP_MJ_READ

Une demande de IRP_MJ_READ transfère des données d’un appareil série à un client.

Moment de l’envoi

Un client utilise une demande de lecture chaque fois qu’il lit des données sur un appareil série.

Paramètres d'entrée

Le membre Parameters.Read.Length est défini sur le nombre d’octets à transférer vers la mémoire tampon de lecture du client.

Paramètres de sortie

Le membre AssociatedIrp.SystemBuffer pointe vers une mémoire tampon de lecture allouée au client vers laquelle les données série copient les données lues sur l’appareil série.

Bloc d’E/S status

Le membre Information est défini sur le nombre d’octets transférés vers la mémoire tampon de lecture du client.

Le membre Status est défini sur l’une des valeurs suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_CANCELLED Un client a annulé la demande. Série annule également une demande si une erreur d’appareil se produit et série est configuré pour annuler une demande en cas d’erreur d’appareil.
STATUS_DELETE_PENDING La série est en cours de suppression de l’appareil.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.
STATUS_TIMEOUT Le délai d’exécution de la demande a dépassé la valeur de délai d’attente total ou la valeur du délai d’attente d’intervalle.

Opération

Un client peut utiliser des événements de délai d’attente pour mettre fin à une demande de lecture. Notez toutefois que lorsqu’un appareil série est ouvert, les paramètres de délai d’attente de l’appareil ne sont pas définis. Un client en mode noyau peut utiliser une IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS pour définir les paramètres de délai d’attente sur zéro (aucun événement de délai d’attente n’est utilisé). Les clients en mode utilisateur et en mode noyau peuvent utiliser une demande de IOCTL_SERIAL_SET_TIMEOUTS pour définir des paramètres de délai d’expiration.

Pour plus d’informations sur les délais de lecture et d’écriture, consultez Définition des délais d’expiration de lecture et d’écriture pour un appareil série.

IRP_MJ_SET_INFORMATION

La requête IRP_MJ_SET_INFORMATION définit les informations de fin de fichier sur un appareil série.

Moment de l’envoi

Un client utilise une demande d’informations de jeu pour modifier la position de fin de fichier actuelle d’un fichier ouvert sur un appareil série.

Paramètres d'entrée

Le membre Parameters.SetFile.FileInformationClass est défini sur FileEndOfFileInformation ou FileAllocationInformation.

Paramètres de sortie

Aucun.

Bloc d’E/S status

Si la demande réussit, le membre Information est défini sur zéro.

Le membre Status est défini sur l’une des valeurs status suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_CANCELLED Un client a annulé la demande. Série annule également une demande si une erreur d’appareil se produit et série est configuré pour annuler une demande en cas d’erreur d’appareil.
STATUS_DELETE_PENDING La série est en cours de suppression de l’appareil.
STATUS_INVALID_PARAMETER Les informations de fin de fichier spécifiées ne sont pas prises en charge.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.

Opération

Serial prend en charge les requêtes de type FileEndOfFileInformation et FileAllocationInformation. Toutefois, serial ne définit pas réellement les informations de fichier. La position de fin de fichier est toujours définie sur zéro.

IRP_MJ_SYSTEM_CONTROL

La requête IRP_MJ_SYSTEM_CONTROL prend en charge les requêtes WMI.

Moment de l’envoi

Un composant en mode noyau WMI peut envoyer une demande de IRP_MJ_SYSTEM_CONTROL à tout moment après l’inscription série en tant que fournisseur WMI pour un appareil série. Les IIP WMI sont généralement envoyés lorsqu’un consommateur de données en mode utilisateur a demandé des données WMI.

Paramètres d'entrée

Demande spécifique

Paramètres de sortie

Demande spécifique

Bloc d’E/S status

Pour les requêtes WMI, Serial définit le champ État sur l’une des valeurs suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_BUFFER_TOO_SMALL La taille, en octets, de la mémoire tampon de sortie est inférieure à la taille requise des informations demandées.
STATUS_INSUFFICIENT_RESOURCES Les ressources système étaient insuffisantes pour enregistrer le nom du port série.
STATUS_INVALID_DEVICE_REQUEST La demande n’est pas valide.
STATUS_WMI_GUID_NOT_FOUND Le GUID WMI n’est pas pris en charge.

Opération

La série utilise WmiSystemControl pour gérer les demandes de contrôle système WMI. Série enregistre les types suivants de routines de rappel de bibliothèque WMI, que WmiSystemControl appelle pour gérer les requêtes WMI envoyées à un appareil :

Série ne prend pas en charge d’autres demandes de contrôle système. Pour les requêtes non WMI, Serial ignore l’emplacement de la pile actuelle et envoie la requête vers le bas de la pile de l’appareil.

Serial enregistre les GUID WMI décrits dans le tableau suivant.

GUID WMI série , structure de données associée

SERIAL_PORT_WMI_NAME_GUID USHORT suivi d’un WCSTR
SERIAL_PORT_WMI_COMM_GUID SERIAL_WMI_COMM_DATA
SERIAL_PORT_WMI_HW_GUID SERIAL_WMI_HW_DATA
SERIAL_PORT_WMI_PERF_GUID SERIAL_WMI_PERF_DATA
SERIAL_PORT_WMI_PROPERTIES_GUID WMI_SERIAL_PORT_PROPERTIES

Le nom WMI d’un appareil série est la valeur de la valeur d’entrée PortName sous la clé de Registre Plug-and-Play de l’appareil.

IRP_MJ_WRITE

Une demande de IRP_MJ_WRITE transfère des données d’un client vers un appareil série.

Moment de l’envoi

Un client utilise une demande d’écriture chaque fois qu’il écrit des données sur un appareil série.

Paramètres d'entrée

Le membre Parameters.Write.Length est défini sur le nombre d’octets à copier à partir d’une mémoire tampon d’écriture allouée par le client vers un appareil série.

Le membre AssociatedIrp.SystemBuffer pointe vers une mémoire tampon d’écriture allouée par le client à partir de laquelle Serial copie les données vers l’appareil série.

Paramètres de sortie

Aucun.

Bloc d’E/S status

Le membre Information est défini sur le nombre d’octets réellement copiés à partir de la mémoire tampon d’écriture du client vers l’appareil série.

Le membre Status est défini sur l’une des valeurs suivantes :

Valeur d’état Description
STATUS_SUCCESS La demande s’est terminée avec succès.
STATUS_CANCELLED Un client a annulé la demande. La série annule également une demande si une erreur d’appareil se produit et La série est configurée pour annuler une demande en cas d’erreur d’appareil.
STATUS_DELETE_PENDING La série est en cours de suppression de l’appareil.
STATUS_PENDING Serial a mis en file d’attente la demande pour un traitement ultérieur.
STATUS_TIMEOUT Le temps total autorisé pour la demande d’écriture a été dépassé.

Opération

Un client peut utiliser des événements de délai d’attente pour mettre fin à une demande d’écriture. Notez toutefois que lorsqu’un appareil série est ouvert, les événements de délai d’attente définis sur un appareil ne sont pas définis. Un client en mode noyau peut utiliser un IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS pour définir les paramètres de délai d’attente sur zéro (aucun événement de délai d’attente n’est utilisé) et une demande de IOCTL_SERIAL_SET_TIMEOUTS pour définir des paramètres de délai d’attente. Pour plus d’informations sur les délais d’attente de lecture et d’écriture, consultez Définition des délais d’expiration de lecture et d’écriture pour un appareil série.

Plug-and-Play les IRP secondaires

Règles de gestion des runtimes d’intégration de l’alimentation

Guide de conception du pilote de contrôleur série