.process (Imposta contesto processo)
Il comando .process specifica il processo usato per il contesto del processo.
.process [/i] [/p [/r]] [/P] [Process]
Parametri
/io
Solo debug in tempo reale; non durante il debug del kernel locale) Specifica che il processo deve essere sottoposto a debug in modo invasivo. Questo tipo di debug significa che il sistema operativo del computer di destinazione rende effettivamente attivo il processo specificato. Senza questa opzione, il comando .process modifica l'output del debugger, ma non influisce sul computer di destinazione stesso. Se si usa /i, è necessario usare il comando g (Go) per eseguire la destinazione. Dopo alcuni secondi, la destinazione torna al debugger e il processo specificato è attivo e usato per il contesto del processo.
/p
Converte tutte le voci della tabella di pagina di transizione (PTEs) per questo processo in indirizzi fisici prima dell'accesso, se si usa /p e Process è diverso da zero. Questa conversione potrebbe causare rallentamenti, perché il debugger deve trovare gli indirizzi fisici per tutta la memoria usata da questo processo. Inoltre, il debugger potrebbe dover trasferire una quantità significativa di dati attraverso il cavo di debug. Questo comportamento è uguale a . cache forcedecodeuser.
Se si include l'opzione /p e Process è zero o si omette, la traduzione è disabilitata. Questo comportamento è uguale a . cache noforcedecodeptes.
/r
Ricarica i simboli in modalità utente dopo l'impostazione del contesto del processo, se si usano le opzioni /r e /p . Questo comportamento è uguale a . ricaricare /user.)
/P
(Solo debug in tempo reale e dump di memoria completi) Converte tutte le voci della tabella di pagina di transizione (PTEs) in indirizzi fisici prima dell'accesso, se si usa /P e Process è diverso da zero. A differenza dell'opzione /p , l'opzione /P converte i ptes per tutti i processi in modalità utente e in modalità kernel, non solo per il processo specificato. Questa conversione potrebbe causare rallentamenti, perché il debugger deve trovare gli indirizzi fisici per tutta la memoria in uso. Inoltre, il debugger potrebbe dover trasferire molti dati attraverso il cavo di debug. Questo comportamento è uguale a . cache forcedecodeptes.
Processo
Specifica l'indirizzo del processo desiderato. (Più precisamente, questo parametro specifica l'indirizzo del blocco EPROCESS per questo processo). Il contesto del processo è impostato su questo processo. Se si omette Processo o si specifica zero, il contesto del processo viene reimpostato sul processo predefinito per lo stato del sistema corrente. Se è stata usata l'opzione /i per impostare il contesto di processo, è necessario usare l'opzione /i per reimpostare il contesto del processo.
Ambiente
Articolo | Descrizione |
---|---|
Modalità | Solo modalità kernel |
Target | live, dump di arresto anomalo |
Piattaforme | tutto |
Informazioni aggiuntive
Per altre informazioni sul contesto del processo e altre impostazioni di contesto, vedere Modifica dei contesti.
Osservazioni:
In genere, quando si esegue il debug del kernel, l'unico spazio indirizzi in modalità utente visibile è quello associato al processo corrente.
Il comando .process indica al debugger del kernel di usare un processo specifico in modalità utente come contesto del processo. Questo utilizzo ha diversi effetti, ma l'aspetto più importante è che il debugger ha accesso allo spazio di indirizzi virtuale di questo processo. Il debugger usa le tabelle di pagina per questo processo per interpretare tutti gli indirizzi di memoria in modalità utente, in modo da poter leggere e scrivere in questa memoria.
Il comando .context (Set User-Mode Address Context) ha un effetto simile. Tuttavia, il comando .context imposta il contesto dell'indirizzo in modalità utente su una directory di pagina specifica, mentre il comando .process imposta il contesto del processo su un processo specifico. In un processore basato su x86, .context e .process hanno quasi lo stesso effetto. Tuttavia, in un processore basato su Itanium, un singolo processo potrebbe avere più di una directory di pagine. In questo caso, il comando .process è più potente, perché consente l'accesso a tutte le directory di pagina associate a un processo. Per altre informazioni sul contesto del processo, vedere Contesto del processo.
Nota Se si esegue il debug in tempo reale, è consigliabile usare il /i o il parametro /p . Senza uno di questi parametri, non è possibile visualizzare correttamente la memoria della sessione o la modalità utente.
Il parametro /i attiva il processo di destinazione. Quando si usa questa opzione, è necessario eseguire la destinazione una volta per rendere effettivo questo comando. Se si esegue di nuovo, il contesto del processo viene perso.
Il parametro /p abilita l'impostazione forcedecodeuser . Non è necessario usare /p se l'opzione forcedecodeuser è già attiva. Il contesto del processo e lo stato forcedecodeuser rimangono solo finché la destinazione non viene eseguita di nuovo.
Se si esegue il debug di dump di arresto anomalo del sistema, le opzioni /i e /p non sono disponibili. Tuttavia, non è possibile accedere ad alcuna parte dello spazio indirizzi virtuale del processo in modalità utente che è stato sottoposto a paging su disco quando si è verificato l'arresto anomalo.
Se si vuole usare il debugger del kernel per impostare i punti di interruzione nello spazio utente, usare l'opzione /i per passare alla destinazione al contesto di processo corretto.
Nell'esempio seguente viene illustrato come usare l'estensione !process per trovare l'indirizzo del blocco EPROCESS per il processo desiderato.
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0 SessionId: 0 Cid: 0008 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: fe529b68 TableSize: 50.
Image: System
.....
PROCESS fe3c0d60 SessionId: 0 Cid: 0208 Peb: 7ffdf000 ParentCid: 00d4
DirBase: 0011f000 ObjectTable: fe3d0f48 TableSize: 30.
Image: regsvc.exe
L'esempio usa ora il comando .process con questo indirizzo del processo .
kd> .process fe3c0d60
Implicit process is now fe3c0d60
Si noti che questo comando rende il comando .context non necessario. Il contesto dell'indirizzo in modalità utente ha già il valore desiderato.
kd> .context
User-mode page directory base is 11f000
Questo valore consente di esaminare lo spazio indirizzi in vari modi. Ad esempio, l'esempio seguente mostra l'output dell'estensione !peb .
kd> !peb
PEB at 7FFDF000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 01000000
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 71f40 . 77f68
Ldr.InLoadOrderModuleList: 71ec0 . 77f58
Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
01000000 C:\WINNT\system32\regsvc.exe
77F80000 C:\WINNT\System32\ntdll.dll
77DB0000 C:\WINNT\system32\ADVAPI32.dll
77E80000 C:\WINNT\system32\KERNEL32.DLL
77D40000 C:\WINNT\system32\RPCRT4.DLL
77BE0000 C:\WINNT\system32\secur32.dll
SubSystemData: 0
ProcessHeap: 70000
ProcessParameters: 20000
WindowTitle: "'C:\WINNT\system32\regsvc.exe'"
ImageFile: 'C:\WINNT\system32\regsvc.exe'
CommandLine: 'C:\WINNT\system32\regsvc.exe'
DllPath: 'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
Environment: 0x10000