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 :
- IRP_MN_CANCEL_REMOVE_DEVICE
- IRP_MN_CANCEL_STOP_DEVICE
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_RELATIONS
- IRP_MN_QUERY_ID
- IRP_MN_QUERY_PNP_DEVICE_STATE
- IRP_MN_QUERY_REMOVE_DEVICE
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_STOP_DEVICE
- IRP_MN_REMOVE_DEVICE
- IRP_MN_START_DEVICE
- IRP_MN_STOP_DEVICE
- IRP_MN_SURPRISE_REMOVAL
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.
Rubriques connexes
Plug-and-Play les IRP secondaires
Règles de gestion des runtimes d’intégration de l’alimentation