!irp
L’extension !irp affiche des informations sur un paquet de requêtes d’E/S (IRP).
!irp Address [Detail]
Paramètres
Adresse
Spécifie l’adresse hexadécimale de l'IRP.
Détail
Si ce paramètre est inclus avec n’importe quelle valeur, par exemple 1, la sortie inclut l’état de l’IRP, l’adresse de sa liste de descripteurs de mémoire (MDL), son thread propriétaire et les informations de pile pour toutes ses piles d’E/S. Elle inclut également des informations sur chaque emplacement de pile pour l’IRP, y compris les versions hexadécimales des codes de fonction principal et secondaire. Si ce paramètre est omis, la sortie inclut uniquement un résumé des informations.
DLL
Kdexts.dll
Informations supplémentaires
Consultez Débogage Plug-and-Play et Débogage d’un storm d’interruption pour les applications de cette commande d'extension. Pour plus d’informations sur les IRP, consultez la documentation du Windows Driver Kit (WDK) et Microsoft Windows Internals (Au cœur de Windows), de Mark Russinovich et David Solomon. Pour plus d’informations sur les codes de fonction principaux et secondaires, consultez la documentation du Kit de pilotes Windows (WDK).
Cette rubrique décrit la structure IRP, IRP.
Pour plus d’informations sur le décodage de la structure IRP, y compris les arguments renvoyés, consultez les ressources suivantes.
- Windows Internals, de Mark E. Russinovich, David A. Solomon et Alex Ionescu
- Developing Drivers with the Windows Driver Foundation, de Guy Smith et Penny Orwick
Notes
La sortie indique également dans quelles conditions la routine d’achèvement de chaque emplacement de pile sera appelée une fois le protocole IRP terminé et l’emplacement de la pile traité. Il existe trois possibilités :
Succès
Indique que la routine d’achèvement sera appelée lorsque l’IRP est terminé avec un code de réussite.
Erreur
Indique que la routine d’achèvement sera appelée lorsque l’IRP est terminé avec un code d'erreur.
Annuler
Indique que la routine d’achèvement sera appelée si une tentative a été effectuée pour annuler l’IRP.
Toute combinaison de ces trois éléments peut apparaître. Si l’une des conditions indiquées est satisfaite, la routine d’achèvement sera appelée. Les valeurs appropriées sont listées à la fin de la première ligne d’informations sur chaque emplacement de pile, immédiatement après l’entrée Completion-Context.
Voici un exemple de sortie de cette extension pour Windows 10 :
0: kd> !irp ac598dc8
Irp is active with 2 stacks 1 is current (= 0xac598e38)
No Mdl: No System Buffer: Thread 8d1c7bc0: Irp stack trace.
cmd flg cl Device File Completion-Context
>[IRP_MJ_FILE_SYSTEM_CONTROL(d), N/A(0)]
1 e1 8a6434d8 ac598d40 853220cb-a89682d8 Success Error Cancel pending
\FileSystem\Npfs fltmgr!FltpPassThroughCompletion
Args: 00000000 00000000 00110008 00000000
[IRP_MJ_FILE_SYSTEM_CONTROL(d), N/A(0)]
1 0 8a799710 ac598d40 00000000-00000000
\FileSystem\FltMgr
Args: 00000000 00000000 0x00110008 00000000
À partir de Windows 10, le texte du code principal et secondaire IRP est affiché (par exemple, « IRP_MJ_FILE_SYSTEM_CONTROL ») La valeur du code est également affichée en hexadécimal (ici, « (d) »).
Le troisième argument affiché dans la sortie est le code IOCTL. Utilisez la commande !ioctldecode pour afficher des informations concernant l'IOTCL.
Voici un exemple de sortie de cette extension à partir de Windows Vista.
0: kd> !irp 0x831f4a00
Irp is active with 8 stacks 5 is current (= 0x831f4b00)
Mdl = 82b020d8 Thread 8c622118: Irp stack trace.
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[ 3,34] 40 e1 828517a8 00000000 842511e0-00000000 Success Error Cancel pending
\Driver\disk partmgr!PmReadWriteCompletion
Args: 00007000 00000000 fe084e00 00000004
[ 3, 0] 40 e0 82851450 00000000 842414d4-82956350 Success Error Cancel
\Driver\PartMgr volmgr!VmpReadWriteCompletionRoutine
Args: 129131bb 000000de fe084e00 00000004
[ 3, 0] 0 e0 82956298 00000000 847eeed0-829e2ba8 Success Error Cancel
\Driver\volmgr Ntfs!NtfsMasterIrpSyncCompletionRoutine
Args: 00007000 00000000 1bdae400 00000000
[ 3, 0] 0 0 82ac2020 8e879410 00000000-00000000
\FileSystem\Ntfs
Args: 00007000 00000000 00018400 00000000
Notez que la routine d’achèvement à côté du nom du pilote est définie sur cet emplacement de pile, et qu’elle a été définie par le pilote dans la ligne ci-dessous. Dans l’exemple précédent, Ntfs!NtfsMasterIrpSyncCompletionRoutine a été défini par \FileSystem\Ntfs. L'entrée Completion-Context au dessus de Ntfs!NtfsMasterIrpSyncCompletionRoutine, 847eeed0-829e2ba8, indique l'adresse de la routine d'achèvement, ainsi que le contexte qui sera transmis à Ntfs!NtfsMasterIrpSyncCompletionRoutine. Ainsi, on constate que l’adresse de Ntfs!NtfsMasterIrpSyncCompletionRoutine est 847eeed0, et le contexte qui sera transmis à cette routine quand il est appelé est 829e2ba8.
Codes de fonction principaux IRP
Les informations suivantes sont incluses pour vous aider à interpréter la sortie de cette commande d’extension.
Les codes de fonction principaux IRP sont les suivants :
Codes de fonction principaux | Code hexadécimal |
---|---|
IRP_MJ_CREATE |
0x00 |
IRP_MJ_CREATE_NAMED_PIPE |
0x01 |
IRP_MJ_CLOSE |
0x02 |
IRP_MJ_READ |
0x03 |
IRP_MJ_WRITE |
0x04 |
IRP_MJ_QUERY_INFORMATION |
0x05 |
IRP_MJ_SET_INFORMATION |
0x06 |
IRP_MJ_QUERY_EA |
0x07 |
IRP_MJ_SET_EA |
0x08 |
IRP_MJ_FLUSH_BUFFERS |
0x09 |
IRP_MJ_QUERY_VOLUME_INFORMATION |
0x0A |
IRP_MJ_SET_VOLUME_INFORMATION |
0x0B |
IRP_MJ_DIRECTORY_CONTROL |
0x0C |
IRP_MJ_FILE_SYSTEM_CONTROL |
0x0D |
IRP_MJ_DEVICE_CONTROL |
0x0E |
IRP_MJ_INTERNAL_DEVICE_CONTROL IRP_MJ_SCSI | 0x0F |
IRP_MJ_SHUTDOWN |
0x10 |
IRP_MJ_LOCK_CONTROL |
0x11 |
IRP_MJ_CLEANUP |
0x12 |
IRP_MJ_CREATE_MAILSLOT |
0x13 |
IRP_MJ_QUERY_SECURITY |
0x14 |
IRP_MJ_SET_SECURITY |
0x15 |
IRP_MJ_POWER |
0x16 |
IRP_MJ_SYSTEM_CONTROL |
0x17 |
IRP_MJ_DEVICE_CHANGE |
0x18 |
IRP_MJ_QUERY_QUOTA |
0x19 |
IRP_MJ_SET_QUOTA |
0x1A |
IRP_MJ_PNP IRP_MJ_MAXIMUM_FUNCTION | 0x1B |
Les codes de fonction secondaire Plug-and-Play sont les suivants :
Code de fonction secondaire | Code hexadécimal |
---|---|
IRP_MN_START_DEVICE |
0x00 |
IRP_MN_QUERY_REMOVE_DEVICE |
0x01 |
IRP_MN_REMOVE_DEVICE |
0x02 |
IRP_MN_CANCEL_REMOVE_DEVICE |
0x03 |
IRP_MN_STOP_DEVICE |
0x04 |
IRP_MN_QUERY_STOP_DEVICE |
0x05 |
IRP_MN_CANCEL_STOP_DEVICE |
0x06 |
IRP_MN_QUERY_DEVICE_RELATIONS |
0x07 |
IRP_MN_QUERY_INTERFACE |
0x08 |
IRP_MN_QUERY_CAPABILITIES |
0x09 |
IRP_MN_QUERY_RESOURCES |
0x0A |
IRP_MN_QUERY_RESOURCE_REQUIREMENTS |
0x0B |
IRP_MN_QUERY_DEVICE_TEXT |
0x0C |
IRP_MN_FILTER_RESOURCE_REQUIREMENTS |
0x0D |
IRP_MN_READ_CONFIG |
0x0F |
IRP_MN_WRITE_CONFIG |
0x10 |
IRP_MN_EJECT |
0x11 |
IRP_MN_SET_LOCK |
0x12 |
IRP_MN_QUERY_ID |
0x13 |
IRP_MN_QUERY_PNP_DEVICE_STATE |
0x14 |
IRP_MN_QUERY_BUS_INFORMATION |
0x15 |
IRP_MN_DEVICE_USAGE_NOTIFICATION |
0x16 |
IRP_MN_SURPRISE_REMOVAL |
0x17 |
IRP_MN_QUERY_LEGACY_BUS_INFORMATION |
0x18 |
Les codes de fonction secondaire WMI sont les suivants :
Code de fonction secondaire | Code hexadécimal |
---|---|
IRP_MN_QUERY_ALL_DATA |
0x00 |
IRP_MN_QUERY_SINGLE_INSTANCE |
0x01 |
IRP_MN_CHANGE_SINGLE_INSTANCE |
0x02 |
IRP_MN_CHANGE_SINGLE_ITEM |
0x03 |
IRP_MN_ENABLE_EVENTS |
0x04 |
IRP_MN_DISABLE_EVENTS |
0x05 |
IRP_MN_ENABLE_COLLECTION |
0x06 |
IRP_MN_DISABLE_COLLECTION |
0x07 |
IRP_MN_REGINFO |
0x08 |
IRP_MN_EXECUTE_METHOD |
0x09 |
Les codes de fonction secondaire de gestion de l’alimentation sont les suivants :
Code de fonction secondaire | Code hexadécimal |
---|---|
IRP_MN_WAIT_WAKE |
0x00 |
IRP_MN_POWER_SEQUENCE |
0x01 |
IRP_MN_SET_POWER |
0x02 |
IRP_MN_QUERY_POWER |
0x03 |
Les codes de fonction secondaire SCSI sont les suivants :
Code de fonction secondaire | Code hexadécimal |
---|---|
IRP_MN_SCSI_CLASS |
0x01 |