Bagikan melalui


Fungsi ImpersonateLoggedOnUser (securitybaseapi.h)

Fungsi ImpersonateLoggedOnUser memungkinkan utas panggilan meniru konteks keamanan pengguna yang masuk. Pengguna diwakili oleh handel token.

Syntax

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

Parameter-parameternya

[in] hToken

Handel ke token akses utama atau peniruan yang mewakili pengguna yang masuk. Ini bisa menjadi handel token yang dikembalikan oleh panggilan ke fungsi LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, atau OpenThreadToken . Jika hToken adalah handel ke token utama, token harus memiliki akses TOKEN_QUERY dan TOKEN_DUPLICATE . Jika hToken adalah handel token peniruan, token harus memiliki akses TOKEN_QUERY dan TOKEN_IMPERSONATE .

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.

Komentar

Peniruan berlangsung hingga utas keluar atau sampai memanggil RevertToSelf.

Utas panggilan tidak perlu memiliki hak istimewa tertentu untuk memanggil ImpersonateLoggedOnUser.

Jika panggilan ke ImpersonateLoggedOnUser gagal, koneksi klien tidak ditiru dan permintaan klien dibuat dalam konteks keamanan proses. Jika proses berjalan sebagai akun yang sangat istimewa, seperti LocalSystem, atau sebagai anggota grup administratif, pengguna mungkin dapat melakukan tindakan yang jika tidak diizinkan. Oleh karena itu, penting untuk selalu memeriksa nilai pengembalian panggilan, dan jika gagal, munculkan kesalahan; jangan melanjutkan eksekusi permintaan klien.

Semua fungsi peniruan, termasuk ImpersonateLoggedOnUser memungkinkan peniruan yang diminta jika salah satu hal berikut ini benar:

  • Pemanggil memiliki hak istimewa SeImpersonatePrivilege .
  • Proses (atau proses lain dalam sesi masuk pemanggil) membuat token menggunakan kredensial eksplisit melalui fungsi LogonUser atau LsaLogonUser .
  • Identitas terautentikasi sama dengan pemanggil.

Penting

Token harus memiliki tingkat peniruan SecurityImpersonation atau yang lebih tinggi agar peniruan berhasil. Token dengan tingkat SecurityIdentification atau SecurityAnonymous tidak dapat digunakan untuk peniruan, bahkan jika pemanggil memiliki SeImpersonatePrivilege. Token SecurityIdentification memungkinkan verifikasi identitas dan pemeriksaan ACL tetapi tidak mengizinkan peniruan identitas.

Persyaratan Tingkat Peniruan

Perilaku bervariasi berdasarkan tingkat peniruan token:

  • SecurityAnonymous: Server tidak dapat memperoleh informasi identitas klien dan tidak dapat meniru klien.
  • SecurityIdentification: Server dapat memperoleh identitas klien dan melakukan validasi akses, tetapi tidak dapat meniru klien. Ini adalah tingkat default untuk banyak skenario.
  • SecurityImpersonation: Server dapat meniru konteks keamanan klien pada sistem lokal. Ini adalah tingkat minimum yang diperlukan agar ImpersonateLoggedOnUser berhasil.
  • SecurityDelegation: Server dapat meniru klien pada sistem jarak jauh serta secara lokal.

Windows XP dengan SP1 dan yang lebih lama: Hak istimewa SeImpersonatePrivilege tidak didukung.

Untuk informasi selengkapnya tentang peniruan identitas, lihat Peniruan Identitas Klien.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Platform Target Windows
Header securitybaseapi.h (termasuk Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

Lihat juga

Fungsi Kontrol Akses Klien/Server

Gambaran Umum Kontrol Akses Klien/Server

CreateProcessAsUser

CreateRestrictedToken

DuplikatToken

DuplikatTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

Kembalikan KeSelf