!irp
L'estensione !irp visualizza informazioni su un pacchetto di richiesta I/O (IRP).
!irp Address [Detail]
Parametri
Indirizzo
Specifica l'indirizzo esadecimale dell'IRP.
Dettaglio
Se questo parametro è incluso con qualsiasi valore, ad esempio 1, l'output include lo stato dell'IRP, l'indirizzo del relativo elenco dei descrittori di memoria (MDL), il thread proprietario e le informazioni sullo stack per tutti i relativi stack di I/O e informazioni su ogni posizione dello stack per l'IRP, incluse le versioni esadecimali del codice della funzione principale e il codice della funzione secondaria. Se questo parametro viene omesso, l'output include solo un riepilogo delle informazioni.
DLL
Kdexts.dll
Informazioni aggiuntive
Per le applicazioni di questo comando di estensione, vedere Debug e debug di interruzioni di debug. Per informazioni sui runtime di integrazione, vedere la documentazione di Windows Driver Kit (WDK) e microsoft Windows Internals di Mark Russinovich e David Solomon. Per altre informazioni sui codici di funzione principali e secondari, vedere la documentazione di Windows Driver Kit (WDK).
Questo argomento descrive la struttura IRP, IRP.
Per informazioni dettagliate sulla decodifica della struttura IRP, inclusi gli argomenti restituiti, vedere le risorse seguenti.
- Windows Internals di Mark E. Russinovich, David A. Solomon e Alex Ionribu
- Sviluppo di driver con Windows Driver Foundation Guy Smith e Penny Orwick
Osservazioni:
L'output indica anche in quali condizioni verrà chiamata la routine di completamento per ogni posizione dello stack dopo il completamento dell'IRP e l'elaborazione della posizione dello stack. Le possibilità sono tre:
Successo
Indica che la routine di completamento verrà chiamata quando l'IRP viene completato con un codice di operazione riuscita.
Errore
Indica che la routine di completamento verrà chiamata quando l'IRP viene completato con un codice di errore.
Annulla
Indica che la routine di completamento verrà chiamata se è stato effettuato un tentativo di annullare l'IRP.
Qualsiasi combinazione di questi tre può essere visualizzata e, se una delle condizioni visualizzate è soddisfatta, verrà chiamata la routine di completamento. I valori appropriati vengono elencati alla fine della prima riga di informazioni su ogni posizione dello stack, immediatamente dopo la voce Completion-Context .
Ecco un esempio dell'output di questa estensione per 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
A partire da Windows 10 viene visualizzato il testo del codice principale e secondario di IRP, ad esempio "IRP_MJ_FILE_SYSTEM_CONTROL" Il valore del codice viene visualizzato anche nell'esadecimale, in questo esempio "(d)".
Il terzo argomento visualizzato nell'output è il codice IOCTL. Usare il comando !ioctldecode per visualizzare informazioni su IOCTL.
Ecco un esempio dell'output di questa estensione da 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
Si noti che la routine di completamento accanto al nome del driver è impostata in tale posizione dello stack ed è stata impostata dal driver nella riga seguente. Nell'esempio precedente Ntfs!NtfsMasterIrpSyncCompletionRoutine è stato impostato da \FileSystem\Ntfs. La voce Completion-Context sopra Ntfs!NtfsMasterIrpSyncCompletionRoutine, 847eeed0-829e2ba8, indica l'indirizzo della routine di completamento, nonché il contesto che verrà passato a Ntfs!NtfsMasterIrpSyncCompletionRoutine. Da questo possiamo vedere che l'indirizzo di Ntfs!NtfsMasterIrpSyncCompletionRoutine è 847eeed0 e il contesto che verrà passato a questa routine quando viene chiamato è 829e2ba8.
Codici di funzione principali di IRP
Le informazioni seguenti sono incluse per interpretare l'output di questo comando di estensione.
I codici di funzione principali di IRP sono i seguenti:
Codice della funzione principale | Codice esadecimale |
---|---|
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 |
I codici di funzione secondaria Plug and Play sono i seguenti:
Codice funzione secondaria | Codice esadecimale |
---|---|
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 |
I codici di funzione secondaria WMI sono i seguenti:
Codice funzione secondaria | Codice esadecimale |
---|---|
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 |
I codici di funzione secondaria di risparmio energia sono i seguenti:
Codice funzione secondaria | Codice esadecimale |
---|---|
IRP_MN_WAIT_WAKE |
0x00 |
IRP_MN_POWER_SEQUENCE |
0x01 |
IRP_MN_SET_POWER |
0x02 |
IRP_MN_QUERY_POWER |
0x03 |
I codici di funzione secondaria SCSI sono i seguenti:
Codice funzione secondaria | Codice esadecimale |
---|---|
IRP_MN_SCSI_CLASS |
0x01 |