Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Прописать на домен нового пользователя программно


Автор: Гость_Leo 6.4.2004, 08:16
Каким образом это осуществить в Delphi ?

Автор: p0s0l 6.4.2004, 10:46
NetUserAdd ?

Автор: Гость_Leo 11.4.2004, 08:53
А поподробней, пожалуйста ?
У меня есть описания этой функции на C++, но у меня не получается описать виды данных, которые используются как аргументы этой функции, на Delphi.
Если кто знает, напишите, буду благодарен smile.gif

Автор: p0s0l 11.4.2004, 15:05
Вот пример добавления юзверя:
Код
procedure AddUser(const ServerName, UserName : String);
var
 UserInfo : USER_INFO_1;
 wcUserName, wcServerName, wcPass : LPWSTR;

begin
 GetMem(wcServerName, 1024);
 GetMem(wcUserName, 1024);
 StringToWideChar(ServerName, wcServerName, 1024);
 StringToWideChar(UserName, wcUserName, 1024);

 ZeroMemory(@UserInfo, SizeOf(UserInfo));
 UserInfo.usri1_name := wcUserName;
 UserInfo.usri1_password := 'parol'; // можно nil
 UserInfo.usri1_priv := USER_PRIV_USER;
 UserInfo.usri1_comment := 'Test user';
 UserInfo.usri1_flags := UF_SCRIPT or UF_DONT_EXPIRE_PASSWD or UF_NORMAL_ACCOUNT;

 NetUserAdd(nil, 1, @UserInfo, nil);

 FreeMem(wcServerName);
 FreeMem(wcUserName);
end;

Пример вызова: AddUser('', 'user1') - добавится юзер "user1" на локальной машине. Вот насчет доменов - не знаю, поэкспериментируй сам, может в имени сервера надо задать имя domain controller'а ? А может вообще не эта функция ? smile.gif

Для работы надо подключить в uses модуль JwaLM. Это LanMan модуль от Jedi. В Delphi нет нужных функций и констант. Если у тебя нет Jedi WinAPI, то вот вырезка из JwaLM (вставь перед AddUser):
Код
type
 USER_INFO_1 = record
   usri1_name: LPWSTR;
   usri1_password: LPWSTR;
   usri1_password_age: DWORD;
   usri1_priv: DWORD;
   usri1_home_dir: LPWSTR;
   usri1_comment: LPWSTR;
   usri1_flags: DWORD;
   usri1_script_path: LPWSTR;
 end;

function NetUserAdd(servername: LPCWSTR; level: DWORD; buf: Pointer;
 parm_err: PDWORD): DWORD; stdcall; external 'netapi32.dll' name 'NetUserAdd';

const
 NERR_Success = 0;

 USER_PRIV_MASK      = $3;
 USER_PRIV_GUEST     = 0;
 USER_PRIV_USER      = 1;
 USER_PRIV_ADMIN     = 2;

 UF_SCRIPT                          = $0001;
 UF_ACCOUNTDISABLE                  = $0002;
 UF_HOMEDIR_REQUIRED                = $0008;
 UF_LOCKOUT                         = $0010;
 UF_PASSWD_NOTREQD                  = $0020;
 UF_PASSWD_CANT_CHANGE              = $0040;
 UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = $0080;

// Account type bits as part of usri_flags.

 UF_TEMP_DUPLICATE_ACCOUNT       = $0100;
 UF_NORMAL_ACCOUNT               = $0200;
 UF_INTERDOMAIN_TRUST_ACCOUNT    = $0800;
 UF_WORKSTATION_TRUST_ACCOUNT    = $1000;
 UF_SERVER_TRUST_ACCOUNT         = $2000;

 UF_MACHINE_ACCOUNT_MASK = UF_INTERDOMAIN_TRUST_ACCOUNT or
   UF_WORKSTATION_TRUST_ACCOUNT or UF_SERVER_TRUST_ACCOUNT;

 UF_ACCOUNT_TYPE_MASK = UF_TEMP_DUPLICATE_ACCOUNT or UF_NORMAL_ACCOUNT or
   UF_INTERDOMAIN_TRUST_ACCOUNT or UF_WORKSTATION_TRUST_ACCOUNT or
   UF_SERVER_TRUST_ACCOUNT;

 UF_DONT_EXPIRE_PASSWD           = $10000;
 UF_MNS_LOGON_ACCOUNT            = $20000;
 UF_SMARTCARD_REQUIRED           = $40000;
 UF_TRUSTED_FOR_DELEGATION       = $80000;
 UF_NOT_DELEGATED               = $100000;
 UF_USE_DES_KEY_ONLY            = $200000;
 UF_DONT_REQUIRE_PREAUTH        = $400000;

 UF_SETTABLE_BITS = UF_SCRIPT or UF_ACCOUNTDISABLE or UF_LOCKOUT or
   UF_HOMEDIR_REQUIRED or UF_PASSWD_NOTREQD or UF_PASSWD_CANT_CHANGE or
   UF_ACCOUNT_TYPE_MASK or UF_DONT_EXPIRE_PASSWD or UF_MNS_LOGON_ACCOUNT or
   UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED or UF_SMARTCARD_REQUIRED or
   UF_TRUSTED_FOR_DELEGATION or UF_NOT_DELEGATED or UF_USE_DES_KEY_ONLY or
   UF_DONT_REQUIRE_PREAUTH;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)