.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