Fungsi LogonUserA (winbase.h)
Fungsi LogonUser mencoba masuk pengguna ke komputer lokal. Komputer lokal adalah komputer tempat LogonUser dipanggil. Anda tidak dapat menggunakan LogonUser
Sintaksis
BOOL LogonUserA(
[in] LPCSTR lpszUsername,
[in, optional] LPCSTR lpszDomain,
[in, optional] LPCSTR lpszPassword,
[in] DWORD dwLogonType,
[in] DWORD dwLogonProvider,
[out] PHANDLE phToken
);
Parameter
[in] lpszUsername
Penunjuk ke string null-terminated yang menentukan nama pengguna. Ini adalah nama akun pengguna untuk masuk. Jika Anda menggunakan format nama utama pengguna
[in, optional] lpszDomain
Penunjuk ke string yang dihentikan null yang menentukan nama domain atau server yang database akunnya berisi akun
[in, optional] lpszPassword
Penunjuk ke string null-terminated yang menentukan kata sandi teks biasa untuk akun pengguna yang ditentukan oleh lpszUsername. Setelah Anda selesai menggunakan kata sandi, hapus kata sandi dari memori dengan memanggil fungsi
[in] dwLogonType
Jenis operasi masuk yang akan dilakukan. Parameter ini bisa menjadi salah satu nilai berikut, yang didefinisikan dalam Winbase.h.
Nilai | Arti |
---|---|
|
Jenis masuk ini ditujukan untuk server batch, di mana proses dapat dijalankan atas nama pengguna tanpa intervensi langsung mereka. Jenis ini juga untuk server performa yang lebih tinggi yang memproses banyak upaya autentikasi teks biasa sekaligus, seperti email atau server web. |
|
Jenis masuk ini ditujukan untuk pengguna yang akan secara interaktif menggunakan komputer, seperti pengguna yang masuk oleh terminal server, shell jarak jauh, atau proses serupa. Jenis masuk ini memiliki biaya tambahan untuk penembolokan informasi masuk untuk operasi yang terputus; oleh karena itu, tidak pantas untuk beberapa aplikasi klien/server, seperti server email. |
|
Jenis masuk ini ditujukan untuk server berkinerja tinggi untuk mengautentikasi kata sandi teks biasa. Fungsi |
|
Jenis masuk ini mempertahankan nama dan kata sandi dalam paket autentikasi , yang memungkinkan server membuat koneksi ke server jaringan lain sambil meniru klien. Server dapat menerima kredensial teks biasa dari klien, memanggil LogonUser, memverifikasi bahwa pengguna dapat mengakses sistem di seluruh jaringan, dan masih berkomunikasi dengan server lain. |
|
Jenis log masuk ini memungkinkan pemanggil untuk mengkloning tokennya saat ini dan menentukan kredensial baru untuk koneksi keluar. Sesi masuk baru memiliki pengidentifikasi lokal yang sama tetapi menggunakan kredensial yang berbeda untuk koneksi jaringan lainnya.
Jenis log masuk ini hanya didukung oleh penyedia log masuk LOGON32_PROVIDER_WINNT50. Catatan: Mulai Januari 2023, tidak dimungkinkan untuk menggunakan jenis masuk LOGON32_LOGON_NEW_CREDENTIALS dengan Akun Layanan Terkelola Grup (gMSA). |
|
Menunjukkan log masuk jenis layanan. Akun yang disediakan harus mengaktifkan hak istimewa layanan. |
|
GINA tidak lagi didukung.
Windows Server 2003 dan Windows XP: Jenis masuk ini untuk GINA DLL yang masuk pada pengguna yang akan secara interaktif menggunakan komputer. Jenis masuk ini dapat menghasilkan catatan audit unik yang menunjukkan kapan stasiun kerja tidak terkunci. |
[in] dwLogonProvider
Menentukan penyedia log masuk. Parameter ini bisa menjadi salah satu nilai berikut.
[out] phToken
Penunjuk ke variabel handle yang menerima handel ke token yang mewakili pengguna yang ditentukan.
Anda dapat menggunakan handel yang dikembalikan dalam panggilan ke fungsi
Dalam kebanyakan kasus, handel yang dikembalikan adalah token utama
Ketika Anda tidak lagi memerlukan handel ini, tutup dengan memanggil fungsi
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan nonzero.
Jika fungsi gagal, fungsi akan mengembalikan nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
Jenis masuk LOGON32_LOGON_NETWORK tercepat, tetapi memiliki batasan berikut:
- Fungsi mengembalikan token peniruan , bukan token utama. Anda tidak dapat menggunakan token ini secara langsung di fungsi
CreateProcessAsUser. Namun, Anda dapat memanggil fungsi DuplicateTokenEx untuk mengonversi token ke token utama, lalu menggunakannya di CreateProcessAsUser . - Jika Anda mengonversi token ke token utama dan menggunakannya di CreateProcessAsUser untuk memulai proses, proses baru tidak dapat mengakses sumber daya jaringan lain, seperti server atau printer jarak jauh, melalui pengalihan. Pengecualiannya adalah bahwa jika sumber daya jaringan tidak dikontrol, maka proses baru akan dapat mengaksesnya.
Hak istimewa SE_TCB_NAME tidak diperlukan untuk fungsi ini kecuali Anda masuk ke akun Paspor.
Akun yang ditentukan oleh lpszUsername, harus memiliki hak akun yang diperlukan. Misalnya, untuk masuk ke pengguna dengan bendera LOGON32_LOGON_INTERACTIVE, pengguna (atau grup tempat pengguna berada) harus memiliki hak akun SE_INTERACTIVE_LOGON_NAME. Untuk daftar hak akun yang memengaruhi berbagai operasi masuk, lihat Konstanta Hak Akun.
Pengguna dianggap masuk jika setidaknya ada satu token. Jika Anda memanggil CreateProcessAsUser lalu menutup token, sistem menganggap pengguna masih masuk hingga proses (dan semua proses anak) telah berakhir.
Jika panggilan LogonUser
Contoh
Anda dapat membuat token LocalService dengan menggunakan kode berikut.
LogonUser(L"LocalService", L"NT AUTHORITY", NULL, LOGON32_LOGON_SERVICE, LOGON32_PROVIDER_DEFAULT, &hToken)
Nota
Header winbase.h mendefinisikan LogonUser sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosedur UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
winbase.h (termasuk Windows.h) |
Pustaka |
Advapi32.lib |
DLL |
Advapi32.dll |
Lihat juga
Kontrol Akses Klien/Server
Fungsi Kontrol Akses Klien/Server