Fungsi CreateRemoteThreadEx (processthreadsapi.h)
Membuat utas yang berjalan di ruang alamat virtual proses lain dan secara opsional menentukan atribut yang diperluas seperti afinitas grup prosesor.
Sintaks
HANDLE CreateRemoteThreadEx(
[in] HANDLE hProcess,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] SIZE_T dwStackSize,
[in] LPTHREAD_START_ROUTINE lpStartAddress,
[in, optional] LPVOID lpParameter,
[in] DWORD dwCreationFlags,
[in, optional] LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
[out, optional] LPDWORD lpThreadId
);
Parameter
[in] hProcess
Handel ke proses di mana utas akan dibuat. Handel harus memiliki hak akses PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE, dan PROCESS_VM_READ. Dalam Windows 10, versi 1607, kode Anda harus mendapatkan hak akses ini untuk handel baru. Namun, mulai dari Windows 10, versi 1703, jika handel baru berhak atas hak akses ini, sistem mendapatkannya untuk Anda. Untuk informasi selengkapnya, lihat Keamanan Proses dan Hak Akses.
[in, optional] lpThreadAttributes
Penunjuk ke struktur SECURITY_ATTRIBUTES yang menentukan deskriptor keamanan untuk utas baru dan menentukan apakah proses anak dapat mewarisi handel yang dikembalikan. Jika lpThreadAttributes adalah NULL, utas mendapatkan deskriptor keamanan default dan handel tidak dapat diwariskan. Daftar kontrol akses (ACL) di deskriptor keamanan default untuk utas berasal dari token utama pembuat.
[in] dwStackSize
Ukuran awal tumpukan, dalam byte. Sistem membulatkan nilai ini ke halaman terdekat. Jika parameter ini adalah 0 (nol), utas baru menggunakan ukuran default untuk yang dapat dieksekusi. Untuk informasi selengkapnya, lihat Ukuran Tumpukan Utas.
[in] lpStartAddress
Penunjuk ke fungsi jenis yang ditentukan aplikasi LPTHREAD_START_ROUTINE untuk dijalankan oleh utas dan mewakili alamat awal utas dalam proses jarak jauh. Fungsi harus ada dalam proses jarak jauh. Untuk informasi selengkapnya, lihat ThreadProc.
[in, optional] lpParameter
Penunjuk ke variabel yang akan diteruskan ke fungsi utas yang ditunjukkan oleh lpStartAddress. Parameter ini bisa NULL.
[in] dwCreationFlags
Bendera yang mengontrol pembuatan utas.
Nilai | Makna |
---|---|
|
Utas berjalan segera setelah pembuatan. |
|
Utas dibuat dalam status ditangguhkan dan tidak berjalan hingga fungsi ResumeThread dipanggil. |
|
Parameter dwStackSize menentukan ukuran cadangan awal tumpukan. Jika bendera ini tidak ditentukan, dwStackSize menentukan ukuran penerapan. |
[in, optional] lpAttributeList
Daftar atribut yang berisi parameter tambahan untuk utas baru. Daftar ini dibuat oleh fungsi InitializeProcThreadAttributeList .
[out, optional] lpThreadId
Penunjuk ke variabel yang menerima pengidentifikasi utas.
Jika parameter ini NULL, pengidentifikasi utas tidak dikembalikan.
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan adalah handel ke utas baru.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Fungsi CreateRemoteThreadEx menyebabkan utas eksekusi baru dimulai di ruang alamat proses yang ditentukan. Utas memiliki akses ke semua objek yang dibuka prosesnya. Parameter lpAttribute dapat digunakan untuk menentukan atribut yang diperluas seperti afinitas grup prosesor untuk utas baru. Jika lpAttribute ADALAH NULL, perilaku fungsinya sama dengan CreateRemoteThread.
Sebelum Windows 8, Layanan Terminal mengisolasi setiap sesi terminal berdasarkan desain. Oleh karena itu, CreateRemoteThread gagal jika proses target berada dalam sesi yang berbeda dari proses panggilan.
Handel utas baru dibuat dengan akses penuh ke utas baru. Jika deskriptor keamanan tidak disediakan, handel dapat digunakan dalam fungsi apa pun yang memerlukan handel objek utas. Ketika deskriptor keamanan disediakan, pemeriksaan akses dilakukan pada semua penggunaan handel berikutnya sebelum akses diberikan. Jika pemeriksaan akses menolak akses, proses permintaan tidak dapat menggunakan handel untuk mendapatkan akses ke utas.
Jika utas dibuat dalam status dapat dijalankan (yaitu, jika bendera CREATE_SUSPENDED tidak digunakan), utas dapat mulai berjalan sebelum CreateThread kembali dan, khususnya, sebelum pemanggil menerima handel dan pengidentifikasi utas yang dibuat.
Utas dibuat dengan prioritas utas THREAD_PRIORITY_NORMAL. Untuk mendapatkan dan mengatur nilai prioritas utas, gunakan fungsi GetThreadPriority dan SetThreadPriority .
Ketika utas berakhir, objek utas mencapai status bersinyali, yang memenuhi utas yang menunggu objek.
Objek utas tetap berada dalam sistem sampai utas dihentikan dan semua handel ke dalamnya ditutup melalui panggilan ke CloseHandle.
Fungsi ExitProcess, ExitThread, CreateThread, CreateRemoteThread , dan proses yang dimulai (sebagai hasil dari panggilan CreateProcess ) diserialisasikan antara satu sama lain dalam proses. Hanya salah satu peristiwa ini yang terjadi di ruang alamat pada satu waktu. Ini berarti pembatasan berikut berlaku:
- Selama rutinitas startup proses dan inisialisasi DLL, utas baru dapat dibuat, tetapi tidak memulai eksekusi sampai inisialisasi DLL dilakukan untuk proses tersebut.
- Hanya satu utas dalam proses yang dapat berada dalam inisialisasi DLL atau melepaskan rutinitas pada satu waktu.
- ExitProcess kembali setelah semua utas menyelesaikan inisialisasi DLL atau melepaskan rutinitas.
- Ini mengonversi aplikasi utas tunggal menjadi aplikasi multithreaded.
- Ini mengubah waktu dan tata letak memori proses.
- Ini menghasilkan panggilan ke titik masuk setiap DLL dalam proses.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 7 [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 R2 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | processthreadsapi.h (termasuk Windows.h pada Windows Server 2008 Windows Server 2008 R2) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |
Lihat juga
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