Bagikan melalui


Fungsi NetUserAdd (lmaccess.h)

Fungsi NetUserAdd menambahkan akun pengguna dan menetapkan tingkat kata sandi dan hak istimewa.

Sintaks

NET_API_STATUS NET_API_FUNCTION NetUserAdd(
  [in]  LPCWSTR servername,
  [in]  DWORD   level,
  [in]  LPBYTE  buf,
  [out] LPDWORD parm_err
);

Parameter

[in] servername

Penunjuk ke string konstanta yang menentukan nama DNS atau NetBIOS dari server jarak jauh tempat fungsi akan dijalankan. Jika parameter ini NULL, komputer lokal akan digunakan.

String ini adalah Unicode jika _WIN32_WINNT atau FORCE_UNICODE ditentukan.

[in] level

Menentukan tingkat informasi data. Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
1
Menentukan informasi tentang akun pengguna. Parameter buf menunjuk ke struktur USER_INFO_1 .

Saat Anda menentukan tingkat ini, panggilan menginisialisasi atribut tertentu ke nilai defaultnya. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

2
Menentukan informasi tingkat satu dan atribut tambahan tentang akun pengguna. Parameter buf menunjuk ke struktur USER_INFO_2 .
3
Menentukan informasi tingkat dua dan atribut tambahan tentang akun pengguna. Tingkat ini hanya valid pada server. Parameter buf menunjuk ke struktur USER_INFO_3 . Perhatikan bahwa disarankan agar Anda menggunakan USER_INFO_4 sebagai gantinya.
4
Menentukan informasi tingkat dua dan atribut tambahan tentang akun pengguna. Tingkat ini hanya valid pada server. Parameter buf menunjuk ke struktur USER_INFO_4 .

Windows 2000: Tingkat ini tidak didukung.

[in] buf

Penunjuk ke buffer yang menentukan data. Format data ini tergantung pada nilai parameter tingkat . Untuk informasi selengkapnya, lihat Buffer Fungsi Manajemen Jaringan.

[out] parm_err

Penunjuk ke nilai yang menerima indeks anggota pertama struktur informasi pengguna yang menyebabkan ERROR_INVALID_PARAMETER. Jika parameter ini NULL, indeks tidak dikembalikan pada kesalahan. Untuk informasi selengkapnya, lihat fungsi NetUserSetInfo .

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah NERR_Success.

Jika fungsi gagal, nilai yang dikembalikan dapat menjadi salah satu kode kesalahan berikut.

Menampilkan kode Deskripsi
ERROR_ACCESS_DENIED
Pengguna tidak memiliki akses ke informasi yang diminta.
NERR_InvalidComputer
Nama komputer tidak valid.
NERR_NotPrimary
Operasi ini hanya diperbolehkan pada pengendali domain utama domain.
NERR_GroupExists
Grup sudah ada.
NERR_UserExists
Akun pengguna sudah ada.
NERR_PasswordTooShort
Kata sandi lebih pendek dari yang diperlukan. (Kata sandi juga bisa terlalu panjang, terlalu baru dalam riwayat perubahannya, tidak memiliki karakter unik yang cukup, atau tidak memenuhi persyaratan kebijakan kata sandi lain.)

Keterangan

Jika Anda memprogram Direktori Aktif, Anda mungkin dapat memanggil metode Antarmuka Layanan Direktori Aktif (ADSI) tertentu untuk mencapai fungsionalitas yang sama yang dapat Anda capai dengan memanggil fungsi pengguna manajemen jaringan. Untuk informasi selengkapnya, lihat IADsUser dan IADsComputer.

Jika Anda memanggil fungsi ini pada pengendali domain yang menjalankan Direktori Aktif, akses diizinkan atau ditolak berdasarkan daftar kontrol akses (ACL) untuk objek yang dapat diamankan. ACL default hanya mengizinkan Admin Domain dan Operator Akun untuk memanggil fungsi ini. Di server anggota atau stasiun kerja, hanya Administrator dan Pengguna Daya yang dapat memanggil fungsi ini. Untuk informasi selengkapnya, lihat Persyaratan Keamanan untuk Fungsi Manajemen Jaringan. Untuk informasi selengkapnya tentang ACL, ACE, dan token akses, lihat Model Access Control.

Pendeskripsi keamanan kontainer pengguna digunakan untuk melakukan pemeriksaan akses untuk fungsi ini. Pemanggil harus dapat membuat objek anak dari kelas pengguna.

Pengguna server harus menggunakan sistem di mana server membuat akun sistem untuk pengguna baru. Pembuatan akun ini dikendalikan oleh beberapa parameter dalam file LanMan.ini server.

Jika pengguna yang baru ditambahkan sudah ada sebagai pengguna sistem, anggota usri1_home_dir struktur USER_INFO_1 diabaikan.

Saat Anda memanggil fungsi NetUserAdd dan menentukan informasi tingkat 1, panggilan menginisialisasi anggota tambahan dalam struktur USER_INFO_2, USER_INFO_3, dan USER_INFO_4 ke nilai defaultnya. Anda dapat mengubah nilai default dengan melakukan panggilan berikutnya ke fungsi NetUserSetInfo . Nilai default yang disediakan tercantum berikut ini. (Awalan usriX menunjukkan bahwa anggota dapat dimulai dengan beberapa awalan, misalnya, usri2_ atau usri4_.)

Anggota Nilai Default
usriX_auth_flags Tidak ada (0)
usriX_full_name Tidak ada (string null)
usriX_usr_comment Tidak ada (string null)
usriX_parms Tidak ada (string null)
usriX_workstations Semua (string null)
usriX_acct_expires Never (TIMEQ_FOREVER)
usriX_max_storage Tidak Terbatas (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Masuk diizinkan kapan saja (setiap elemen 0xFF; semua bit diatur ke 1)
usriX_logon_server Pengendali domain apa pun (\\*)
usriX_country_code 0
usriX_code_page 0
 

Nama akun pengguna dibatasi hingga 20 karakter dan nama grup dibatasi hingga 256 karakter. Selain itu, nama akun tidak dapat dihentikan dengan titik dan tidak dapat menyertakan koma atau salah satu karakter yang dapat dicetak berikut: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Nama juga tidak dapat menyertakan karakter dalam rentang 1-31, yang tidak dapat dicetak.

Contoh

Sampel kode berikut menunjukkan cara menambahkan akun pengguna dan menetapkan tingkat hak istimewa menggunakan panggilan ke fungsi NetUserAdd . Sampel kode mengisi anggota struktur USER_INFO_1 dan memanggil NetUserAdd, menentukan informasi tingkat 1.

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <windows.h> 
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   USER_INFO_1 ui;
   DWORD dwLevel = 1;
   DWORD dwError = 0;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Set up the USER_INFO_1 structure.
   //  USER_PRIV_USER: name identifies a user, 
   //    rather than an administrator or a guest.
   //  UF_SCRIPT: required 
   //
   ui.usri1_name = argv[2];
   ui.usri1_password = argv[2];
   ui.usri1_priv = USER_PRIV_USER;
   ui.usri1_home_dir = NULL;
   ui.usri1_comment = NULL;
   ui.usri1_flags = UF_SCRIPT;
   ui.usri1_script_path = NULL;
   //
   // Call the NetUserAdd function, specifying level 1.
   //
   nStatus = NetUserAdd(argv[1],
                        dwLevel,
                        (LPBYTE)&ui,
                        &dwError);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User %s has been successfully added on %s\n",
               argv[2], argv[1]);
   //
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);

   return 0;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header lmaccess.h (termasuk Lm.h)
Pustaka Netapi32.lib
DLL Netapi32.dll

Lihat juga

NetUserDel

NetUserEnum

NetUserSetInfo

Fungsi Manajemen Jaringan

Gambaran Umum Manajemen Jaringan

USER_INFO_1

USER_INFO_2

USER_INFO_4

Fungsi Pengguna