Fungsi ZwQueryInformationProcess

[ZwQueryInformationProcess mungkin diubah atau tidak tersedia di versi Windows yang akan datang. Aplikasi harus menggunakan fungsi alternatif yang tercantum dalam topik ini.]

Mengambil informasi tentang proses yang ditentukan.

Sintaks

NTSTATUS WINAPI ZwQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

Parameter

ProcessHandle [in]

Handel ke proses yang informasinya akan diambil.

ProcessInformationClass [in]

Jenis informasi proses yang akan diambil. Parameter ini dapat menjadi salah satu nilai berikut dari enumerasi PROCESSINFOCLASS .

Nilai Makna
ProcessBasicInformation
0
Mengambil pointer ke struktur PEB yang dapat digunakan untuk menentukan apakah proses yang ditentukan sedang di-debug, dan nilai unik yang digunakan oleh sistem untuk mengidentifikasi proses yang ditentukan.
Yang terbaik adalah menggunakan fungsi CheckRemoteDebuggerPresent dan GetProcessId untuk mendapatkan informasi ini.
ProcessDebugPort
7
Mengambil nilai DWORD_PTR yang merupakan nomor port debugger untuk proses tersebut. Nilai bukan nol menunjukkan bahwa proses sedang dijalankan di bawah kontrol debugger cincin 3.
Yang terbaik adalah menggunakan fungsi CheckRemoteDebuggerPresent atau IsDebuggerPresent .
ProcessWow64Information
26
Menentukan apakah proses berjalan di lingkungan WOW64 (WOW64 adalah emulator x86 yang memungkinkan aplikasi berbasis Win32 berjalan pada Windows 64-bit).
Yang terbaik adalah menggunakan fungsi IsWow64Process untuk mendapatkan informasi ini.
ProcessImageFileName
27
Mengambil nilai UNICODE_STRING yang berisi nama file gambar untuk proses tersebut.
ProcessBreakOnTermination
29
Mengambil nilai ULONG yang menunjukkan apakah prosesnya dianggap penting.
Catatan: Nilai ini dapat digunakan mulai dari Windows XP dengan SP3. Mulai windows 8.1, IsProcessCritical harus digunakan sebagai gantinya.
ProcessProtectionInformation
61
Mengambil nilai BYTE yang menunjukkan jenis proses yang dilindungi dan penanda tangan proses yang dilindungi.

 

ProcessInformation [out]

Penunjuk ke buffer yang disediakan oleh aplikasi panggilan tempat fungsi menulis informasi yang diminta. Ukuran informasi yang ditulis bervariasi tergantung pada nilai parameter ProcessInformationClass :

PROCESS_BASIC_INFORMATION

Ketika parameter ProcessInformationClass adalah ProcessBasicInformation, buffer yang ditunjukkan oleh parameter ProcessInformation harus cukup besar untuk menahan struktur PROCESS_BASIC_INFORMATION tunggal yang memiliki tata letak berikut:

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Bidang Makna
ExitStatus Berisi nilai yang sama dengan yang akan dikembalikan GetExitCodeProcess . Namun penggunaan GetExitCodeProcess lebih disukai untuk kejelasan dan keamanan.
PebBaseAddress Menunjuk ke struktur PEB .
AffinityMask Dapat ditransmisikan ke DWORD dan berisi nilai yang sama dengan yang akan dikembalikan GetProcessAffinityMask untuk lpProcessAffinityMask parameter .
BasePriority Berisi prioritas proses seperti yang dijelaskan dalam Prioritas Penjadwalan.
UniqueProcessId Dapat ditransmisikan ke DWORD dan berisi pengidentifikasi unik untuk proses ini. Yang terbaik adalah menggunakan fungsi GetProcessId untuk mengambil informasi ini.
InheritedFromUniqueProcessId Dapat ditransmisikan ke DWORD dan berisi pengidentifikasi unik untuk proses induk.

ULONG_PTR

Ketika parameter ProcessInformationClass adalah ProcessWow64Information, buffer yang diarahkan oleh parameter ProcessInformation harus cukup besar untuk menahan ULONG_PTR. Jika nilai ini bukan nol, prosesnya berjalan di lingkungan WOW64; jika tidak, jika nilainya sama dengan nol, prosesnya tidak berjalan di lingkungan WOW64.

Yang terbaik adalah menggunakan fungsi IsWow64Process untuk menentukan apakah proses berjalan di lingkungan WOW64.

UNICODE_STRING

Ketika parameter ProcessInformationClass adalah ProcessImageFileName, buffer yang diarahkan oleh parameter ProcessInformation harus cukup besar untuk menahan struktur UNICODE_STRING serta string itu sendiri. String yang disimpan dalam anggota Buffer adalah nama file gambar.

Jika buffer terlalu kecil, fungsi gagal dengan kode kesalahan STATUS_INFO_LENGTH_MISMATCH dan parameter ReturnLength diatur ke ukuran buffer yang diperlukan.

PS_PROTECTION

Ketika parameter ProcessInformationClass adalah ProcessProtectionInformation, buffer yang ditunjukkan oleh parameter ProcessInformation harus cukup besar untuk menahan struktur PS_PROTECTION tunggal yang memiliki tata letak berikut:

typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type   : 3;
            UCHAR Audit  : 1;                  // Reserved
            UCHAR Signer : 4;
        };
    };
} PS_PROTECTION, *PPS_PROTECTION;

3 bit pertama berisi jenis proses yang dilindungi:

typedef enum _PS_PROTECTED_TYPE {
    PsProtectedTypeNone = 0,
    PsProtectedTypeProtectedLight = 1,
    PsProtectedTypeProtected = 2
} PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;

4 bit teratas berisi penanda tangan proses yang dilindungi:

typedef enum _PS_PROTECTED_SIGNER {
    PsProtectedSignerNone = 0,
    PsProtectedSignerAuthenticode,
    PsProtectedSignerCodeGen,
    PsProtectedSignerAntimalware,
    PsProtectedSignerLsa,
    PsProtectedSignerWindows,
    PsProtectedSignerWinTcb,
    PsProtectedSignerWinSystem,
    PsProtectedSignerApp,
    PsProtectedSignerMax
} PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;

ProcessInformationLength [in]

Ukuran buffer yang diacu oleh parameter ProcessInformation , dalam byte.

ReturnLength [keluar, opsional]

Penunjuk ke variabel di mana fungsi mengembalikan ukuran informasi yang diminta. Jika fungsi berhasil, ini adalah ukuran informasi yang ditulis ke buffer yang diacu oleh parameter ProcessInformation , tetapi jika buffer terlalu kecil, ini adalah ukuran minimum buffer yang diperlukan untuk menerima informasi dengan sukses.

Menampilkan nilai

Mengembalikan keberhasilan NTSTATUS atau kode kesalahan.

Formulir dan signifikansi kode kesalahan NTSTATUS tercantum dalam file header Ntstatus.h yang tersedia di DDK, dan dijelaskan dalam dokumentasi DDK di bawah Kernel-Mode Arsitektur Driver / Panduan Desain / Teknik Pemrograman Driver / Kesalahan Pengelogan.

Keterangan

Fungsi ZwQueryInformationProcess dan struktur yang dikembalikannya bersifat internal untuk sistem operasi dan dapat berubah dari satu rilis Windows ke rilis lainnya. Untuk mempertahankan kompatibilitas aplikasi Anda, lebih baik menggunakan fungsi publik yang disebutkan dalam deskripsi parameter ProcessInformationClass sebagai gantinya.

Jika Anda menggunakan ZwQueryInformationProcess, akses fungsi melalui penautan dinamis run-time. Ini memberi kode Anda kesempatan untuk merespons dengan baik jika fungsi telah diubah atau dihapus dari sistem operasi. Namun, perubahan tanda tangan mungkin tidak dapat dideteksi.

Fungsi ini tidak memiliki pustaka impor terkait. Anda harus menggunakan fungsi LoadLibrary dan GetProcAddress untuk menautkan secara dinamis ke Ntdll.dll.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows XP [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2003 [hanya aplikasi desktop]
DLL
Ntdll.dll

Lihat juga

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process