Fungsi PsCreateSystemThread (wdm.h)

Rutinitas PsCreateSystemThread membuat utas sistem yang dijalankan dalam mode kernel dan mengembalikan handel untuk utas.

Sintaks

NTSTATUS PsCreateSystemThread(
  [out]           PHANDLE            ThreadHandle,
  [in]            ULONG              DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  HANDLE             ProcessHandle,
  [out, optional] PCLIENT_ID         ClientId,
  [in]            PKSTART_ROUTINE    StartRoutine,
  [in, optional]  PVOID              StartContext
);

Parameter

[out] ThreadHandle

Menunjuk ke variabel yang akan menerima handel. Driver harus menutup handel dengan ZwClose setelah handel tidak lagi digunakan. Handel ini adalah handel kernel untuk Windows Vista dan versi Windows yang lebih baru. Di versi Windows sebelumnya, handel mungkin bukan handel kernel.

[in] DesiredAccess

Menentukan nilai ACCESS_MASK yang mewakili jenis akses yang diminta ke utas yang dibuat.

[in, optional] ObjectAttributes

Menunjuk ke struktur yang menentukan atribut objek. OBJ_PERMANENT, OBJ_EXCLUSIVE, dan OBJ_OPENIF bukan atribut yang valid untuk objek utas. Pada Windows XP dan versi Windows yang lebih baru, jika pemanggil tidak berjalan dalam konteks proses sistem, pemanggil harus mengatur atribut OBJ_KERNEL_HANDLE untuk ObjectAttributes. Driver untuk Microsoft Windows 2000 dan Windows 98/Me hanya boleh memanggil PsCreateSystemThread dari konteks proses sistem. Untuk Windows Vista dan versi Windows yang lebih baru, handel akan menjadi handel kernel.

[in, optional] ProcessHandle

Menentukan handel terbuka untuk proses di ruang alamat yang utasnya akan dijalankan. Utas pemanggil harus memiliki akses PROCESS_CREATE_THREAD ke proses ini. Jika parameter ini tidak disediakan, utas akan dibuat dalam proses sistem awal. Nilai ini harus NULL untuk utas yang dibuat driver. Gunakan makro NtCurrentProcess, yang ditentukan dalam Ntddk.h, untuk menentukan proses saat ini.

[out, optional] ClientId

Menunjuk ke struktur yang menerima pengidentifikasi klien dari utas baru. Nilai ini harus NULL untuk utas yang dibuat driver.

[in] StartRoutine

Titik masuk untuk utas sistem yang baru dibuat. Parameter ini adalah penunjuk fungsi ke rutinitas ThreadStart yang menerima satu argumen, yang merupakan nilai parameter StartContext yang disediakan oleh pemanggil.

[in, optional] StartContext

Menyediakan argumen tunggal yang diteruskan ke utas saat memulai eksekusi.

Mengembalikan nilai

PsCreateSystemThread mengembalikan STATUS_SUCCESS jika utas dibuat.

Keterangan

Driver yang membuat utas khusus perangkat memanggil rutinitas ini, baik ketika mereka menginisialisasi atau ketika permintaan I/O mulai masuk ke rutinitas Pengiriman driver seperti itu. Misalnya, driver mungkin membuat utas seperti itu saat menerima permintaan kontrol perangkat asinkron.

PsCreateSystemThread membuat utas mode kernel yang memulai utas eksekusi terpisah dalam sistem. Utas sistem semacam itu tidak memiliki konteks TEB atau mode pengguna dan hanya berjalan dalam mode kernel.

Jika input ProcessHandle adalah NULL, utas yang dibuat dikaitkan dengan proses sistem. Utas seperti itu terus berjalan sampai sistem dimatikan atau utas berakhir dengan memanggil PsTerminateSystemThread.

Dimulai dengan Windows XP, rutinitas driver yang berjalan dalam konteks proses selain proses sistem harus mengatur atribut OBJ_KERNEL_HANDLE untuk parameter ObjectAttributes dari PsCreateSystemThread. Ini membatasi penggunaan handel yang dikembalikan oleh PsCreateSystemThread untuk memproses yang berjalan dalam mode kernel. Jika tidak, handel utas dapat diakses oleh proses yang konteksnya driver berjalan. Driver dapat mengatur atribut OBJ_KERNEL_HANDLE sebagai berikut.

InitializeObjectAttributes(&ObjectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);

Driver untuk Windows 2000 dan Windows 98/Me harus memanggil PsCreateSystemThread hanya dari konteks proses sistem.

Untuk informasi selengkapnya tentang parameter StartContext , lihat ThreadStart.

Utas sistem yang baru dibuat berjalan pada PASSIVE_LEVEL di dalam wilayah kritis dengan APC kernel normal dinonaktifkan.

Persyaratan

   
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), IrqlPsPassive(wdm)

Lihat juga

InitializeObjectAttributes

KeSetBasePriorityThread

KeSetPriorityThread

PsTerminateSystemThread

ThreadStart

ZwSetInformationThread