.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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk