.process (Atur Konteks Proses)

Perintah .process menentukan proses mana yang digunakan untuk konteks proses.

.process [/i] [/p [/r]] [/P] [Process]

Parameter

/i
Penelusuran kesalahan langsung saja; tidak selama debugging kernel lokal) Menentukan bahwa Proses akan di-debug secara invasif. Penelusuran kesalahan semacam ini berarti bahwa sistem operasi komputer target benar-benar membuat proses yang ditentukan aktif. (Tanpa opsi ini, perintah .process mengubah output debugger tetapi tidak memengaruhi komputer target itu sendiri.) Jika Anda menggunakan /i, Anda harus menggunakan perintah g (Go) untuk menjalankan target. Setelah beberapa detik, target kembali masuk ke debugger, dan Proses yang ditentukan aktif dan digunakan untuk konteks proses.

/p
Menerjemahkan semua entri tabel halaman transisi (PTEs) untuk proses ini ke alamat fisik sebelum akses, jika Anda menggunakan /p dan Proses bukan nol. Terjemahan ini dapat menyebabkan perlambatan, karena debugger harus menemukan alamat fisik untuk semua memori yang digunakan proses ini. Selain itu, debugger mungkin harus mentransfer sejumlah besar data di seluruh kabel debug. (Perilaku ini sama dengan . cache forcedecodeuser.)

Jika Anda menyertakan opsi /p dan Proses adalah nol atau Anda menghilangkannya, terjemahan dinonaktifkan. (Perilaku ini sama dengan . cache noforcedecodeptes.)

/R
Memuat ulang simbol mode pengguna setelah konteks proses diatur, jika Anda menggunakan opsi /r dan /p . (Perilaku ini sama dengan . muat ulang /user.)

/P
(Penelusuran kesalahan langsung dan cadangan memori lengkap saja) Menerjemahkan semua entri tabel halaman transisi (PTEs) ke alamat fisik sebelum akses, jika Anda menggunakan /P dan Proses bukan nol. Tidak seperti opsi /p, opsi /P menerjemahkan PTEs untuk semua proses mode pengguna dan mode kernel, tidak hanya proses yang ditentukan. Terjemahan ini dapat menyebabkan perlambatan, karena debugger harus menemukan alamat fisik untuk semua memori yang digunakan. Selain itu, debugger mungkin harus mentransfer banyak data di seluruh kabel debug. (Perilaku ini sama dengan . cache forcedecodeptes.)

Proses
Menentukan alamat proses yang Anda inginkan. (Lebih tepatnya, parameter ini menentukan alamat blok EPROCESS untuk proses ini). Konteks proses diatur ke proses ini. Jika Anda menghilangkan Proses atau menentukan nol, konteks proses diatur ulang ke proses default untuk status sistem saat ini. (Jika Anda menggunakan opsi /i untuk mengatur konteks proses, Anda harus menggunakan opsi /i untuk mengatur ulang konteks proses.)

Lingkungan

Item Deskripsi
Mode mode kernel saja
Target live, crash dump
Platform all

Informasi Tambahan

Untuk informasi selengkapnya tentang konteks proses dan pengaturan konteks lainnya, lihat Mengubah Konteks.

Keterangan

Biasanya, ketika Anda melakukan penelusuran kesalahan kernel, satu-satunya ruang alamat mode pengguna yang terlihat adalah ruang yang terkait dengan proses saat ini.

Perintah .process menginstruksikan debugger kernel untuk menggunakan proses mode pengguna tertentu sebagai konteks proses. Penggunaan ini memiliki beberapa efek, tetapi yang paling penting adalah debugger memiliki akses ke ruang alamat virtual proses ini. Debugger menggunakan tabel halaman untuk proses ini untuk menginterpretasikan semua alamat memori mode pengguna, sehingga Anda dapat membaca dan menulis ke memori ini.

Perintah .context (Atur Konteks Alamat Mode Pengguna) memiliki efek yang sama. Namun, perintah .context mengatur konteks alamat mode pengguna ke direktori halaman tertentu, sementara perintah .process mengatur konteks proses ke proses tertentu. Pada prosesor berbasis x86, .context dan .process memiliki efek yang hampir sama. Namun, pada prosesor berbasis Itanium, satu proses mungkin memiliki lebih dari satu direktori halaman. Dalam situasi ini, perintah .process lebih kuat, karena memungkinkan akses ke semua direktori halaman yang terkait dengan proses. Untuk informasi selengkapnya tentang konteks proses, lihat Konteks Proses.

Catatan Jika Anda melakukan penelusuran kesalahan langsung, Anda harus menggunakan parameter /i atau /p . Tanpa salah satu parameter ini, Anda tidak dapat menampilkan mode pengguna atau memori sesi dengan benar.

Parameter /i mengaktifkan proses target. Saat Anda menggunakan opsi ini, Anda harus menjalankan target sekali agar perintah ini berlaku. Jika Anda menjalankan lagi, konteks proses akan hilang.

Parameter /p memungkinkan pengaturan forcedecodeuser . (Anda tidak perlu menggunakan /p jika opsi forcedecodeuser sudah aktif.) Konteks proses dan status forcedecodeuser hanya tersisa sampai target dijalankan lagi.

Jika Anda melakukan debugging crash dump, opsi /i dan /p tidak tersedia. Namun, Anda tidak dapat mengakses bagian mana pun dari ruang alamat virtual proses mode pengguna yang di-paged ke disk saat crash terjadi.

Jika Anda ingin menggunakan debugger kernel untuk mengatur titik henti di ruang pengguna, gunakan opsi /i untuk mengalihkan target ke konteks proses yang benar.

Contoh berikut menunjukkan cara menggunakan ekstensi !process untuk menemukan alamat blok EPROCESS untuk proses yang diinginkan.

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

Sekarang contoh menggunakan perintah .process dengan alamat proses ini.

kd> .process fe3c0d60
Implicit process is now fe3c0d60

Perhatikan bahwa perintah ini membuat perintah .context tidak perlu. Konteks alamat mode pengguna sudah memiliki nilai yang diinginkan.

kd> .context 
User-mode page directory base is 11f000

Nilai ini memungkinkan Anda memeriksa ruang alamat dengan berbagai cara. Misalnya, contoh berikut menunjukkan output ekstensi !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