Fungsi LogonUserExW

Fungsi LogonUserExExW mencoba masuk pengguna ke komputer lokal. Komputer lokal adalah komputer tempat LogonUserExW dipanggil. Anda tidak dapat menggunakan LogonUserExExW untuk masuk ke komputer jarak jauh. Tentukan pengguna dengan menggunakan nama pengguna dan domain dan autentikasi pengguna dengan menggunakan kata sandi teks biasa. Jika fungsi berhasil, fungsi menerima handel ke token yang mewakili pengguna yang masuk. Anda kemudian dapat menggunakan handel token ini untuk meniru pengguna yang ditentukan atau, dalam kebanyakan kasus, untuk membuat proses yang berjalan dalam konteks pengguna yang ditentukan.

Fungsi ini mirip dengan fungsi LogonUserEx , kecuali bahwa dibutuhkan parameter tambahan, pTokenGroups, yang merupakan sekumpulan satu atau beberapa pengidentifikasi keamanan (SID) yang ditambahkan ke token yang dikembalikan ke pemanggil ketika masuk berhasil.

Fungsi ini tidak dideklarasikan dalam header publik dan tidak memiliki pustaka impor terkait. Anda harus menggunakan fungsi LoadLibrary dan GetProcAddress untuk menautkan secara dinamis ke Advapi32.dll.

Sintaks

BOOL WINAPI LogonUserExExW(
  _In_      LPTSTR        lpszUsername,
  _In_opt_  LPTSTR        lpszDomain,
  _In_opt_  LPTSTR        lpszPassword,
  _In_      DWORD         dwLogonType,
  _In_      DWORD         dwLogonProvider,
  _In_opt_  PTOKEN_GROUPS pTokenGroups,
  _Out_opt_ PHANDLE       phToken,
  _Out_opt_ PSID          *ppLogonSid,
  _Out_opt_ PVOID         *ppProfileBuffer,
  _Out_opt_ LPDWORD       pdwProfileLength,
  _Out_opt_ PQUOTA_LIMITS pQuotaLimits
);

Parameter

lpszUsername [in]

Penunjuk ke string yang dihentikan null yang menentukan nama pengguna. Ini adalah nama akun pengguna yang akan masuk. Jika Anda menggunakan format nama prinsipal pengguna (UPN), parameter lpszDomain harus NULL.

lpszDomain [in, opsional]

Penunjuk ke string yang dihentikan null yang menentukan nama domain atau server yang database akunnya berisi akun lpszUsername . Jika parameter ini NULL, nama pengguna harus ditentukan dalam format UPN. Jika parameter ini adalah ".", fungsi memvalidasi akun hanya dengan menggunakan database akun lokal.

lpszPassword [in, opsional]

Penunjuk ke string yang dihentikan null 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 SecureZeroMemory . Untuk informasi selengkapnya tentang melindungi kata sandi, lihat Menangani Kata Sandi.

dwLogonType [in]

Jenis operasi masuk yang akan dilakukan. Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
LOGON32_LOGON_INTERACTIVE
2
Jenis masuk ini ditujukan untuk pengguna yang akan secara interaktif menggunakan komputer, seperti pengguna yang masuk oleh server terminal , shell jarak jauh, atau proses serupa. Jenis log masuk ini memiliki biaya tambahan untuk penembolokan informasi masuk untuk operasi yang terputus; oleh karena itu, itu tidak pantas untuk beberapa aplikasi klien/server, seperti server email.
LOGON32_LOGON_NETWORK
3
Jenis masuk ini ditujukan untuk server performa tinggi untuk mengautentikasi kata sandi teks biasa. Fungsi LogonUserExW tidak menyimpan kredensial untuk jenis log masuk ini.
LOGON32_LOGON_BATCH
4
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 pada satu waktu, seperti email atau server web. Fungsi LogonUserExW tidak menyimpan kredensial untuk jenis log masuk ini.
LOGON32_LOGON_SERVICE
5
Menunjukkan log masuk jenis layanan. Akun yang disediakan harus mengaktifkan hak istimewa layanan.
LOGON32_LOGON_UNLOCK
7
Jenis log masuk ini adalah untuk DLL GINA yang masuk ke pengguna yang akan secara interaktif menggunakan komputer. Jenis masuk ini dapat menghasilkan catatan audit unik yang menunjukkan kapan stasiun kerja tidak terkunci.
LOGON32_LOGON_NETWORK_CLEARTEXT
8
Jenis log masuk ini mempertahankan nama dan kata sandi dalam paket autentikasi, yang memungkinkan server untuk membuat koneksi ke server jaringan lain sambil meniru klien. Server dapat menerima kredensial teks biasa dari klien, memanggil LogonUserExExW, memverifikasi bahwa pengguna dapat mengakses sistem di seluruh jaringan, dan masih berkomunikasi dengan server lain.
LOGON32_LOGON_NEW_CREDENTIALS
9
Jenis log masuk ini memungkinkan pemanggil untuk mengkloning token 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 .

 

dwLogonProvider [in]

Penyedia log masuk. Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
LOGON32_PROVIDER_DEFAULT
Gunakan penyedia masuk standar untuk sistem. Penyedia keamanan default adalah NTLM.
LOGON32_PROVIDER_WINNT50
Gunakan penyedia log masuk negosiasi.
LOGON32_PROVIDER_WINNT40
Gunakan penyedia masuk NTLM.

 

pTokenGroups [in, opsional]

Penunjuk ke struktur TOKEN_GROUPS yang menentukan daftar SID grup yang ditambahkan ke token yang diterima fungsi ini setelah berhasil masuk. Setiap SID yang ditambahkan ke token juga mempengaruhi ekspansi grup. Misalnya, jika SID yang ditambahkan adalah anggota grup lokal, grup tersebut juga ditambahkan ke token akses yang diterima.

Jika parameter ini bukan NULL, pemanggil fungsi ini harus memiliki hak istimewa SE_TCB_PRIVILEGE diberikan dan diaktifkan.

phToken [keluar, opsional]

Penunjuk ke variabel handel yang menerima handel ke token yang mewakili pengguna yang ditentukan.

Anda dapat menggunakan handel yang dikembalikan dalam panggilan ke fungsi ImpersonateLoggedOnUser .

Dalam kebanyakan kasus, handel yang dikembalikan adalah token utama yang dapat Anda gunakan dalam panggilan ke fungsi CreateProcessAsUser . Namun, jika Anda menentukan bendera LOGON32_LOGON_NETWORK, LogonUserExW mengembalikan token peniruan yang tidak dapat Anda gunakan di CreateProcessAsUser kecuali Anda memanggil DuplicateTokenEx untuk mengonversi token peniruan ke token utama.

Ketika Anda tidak lagi memerlukan handel ini, tutup dengan memanggil fungsi CloseHandle .

ppLogonSid [keluar, opsional]

Penunjuk ke penunjuk ke SID yang menerima SID pengguna yang masuk.

Setelah Anda selesai menggunakan SID, bebaskan dengan memanggil fungsi LocalFree .

ppProfileBuffer [keluar, opsional]

Penunjuk ke penunjuk yang menerima alamat buffer yang berisi profil pengguna yang masuk.

pdwProfileLength [keluar, opsional]

Penunjuk ke DWORD yang menerima panjang buffer profil.

pQuotaLimits [keluar, opsional]

Penunjuk ke struktur QUOTA_LIMITS yang menerima informasi tentang kuota untuk pengguna yang masuk.

Nilai kembali

Jika fungsi berhasil, fungsi mengembalikan bukan nol.

Jika fungsi gagal, fungsi akan mengembalikan nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

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 dalam 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 jarak jauh atau printer, melalui pengalihan. Pengecualiannya adalah bahwa jika sumber daya jaringan tidak dikontrol akses, maka proses baru akan dapat mengaksesnya.

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 Hak Akses Objek Akun.

Pengguna dianggap masuk jika setidaknya ada satu token. Jika Anda memanggil CreateProcessAsUser lalu menutup token, pengguna masih masuk hingga proses (dan semua proses anak) berakhir.

Jika parameter pTokenGroups opsional disediakan, LSA tidak akan menambahkan SID lokal atau SID masuk secara otomatis.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2008 [hanya aplikasi desktop]
Versi
LogonUserExExW juga tersedia diWindows Server 2003 atau Windows XPdengan Rilis Distribusi Umum.
Header
Winbasep.h
DLL
Advapi32.dll

Lihat juga

Access Control Klien/Server

Fungsi Access Control Klien/Server

CloseHandle

CreateProcessAsUser

DuplikatTokenEx

ImpersonateLoggedOnUser

LogonUserEx

QUOTA_LIMITS