![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [С++ Builder 2009] Проблемы с созданием пользователей (наверно все дело в строках) |
|
C/C++ - [С++ Builder 2009] Проблемы с созданием пользователей (наверно все дело в строках)
|
![]() Старожил Сообщения: 467 |
Вот есть код:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Ntsecapi.h" #include "shlwapi.h" #include "lm.h" #include "cstdlib" #include "tchar.h" #include "stdlib.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; DWORD CreateNewUser(wchar_t *UserName, wchar_t *UserPass, wchar_t *UserDesc, wchar_t *UserGroup, bool IsAutoLogon); LONG SetDefaultPassword(LPCWSTR PasswordBuffer); LONG SetAutoLogon(LPCWSTR pszUserName, LPCWSTR pszPassword); void ClearAutoLogon(VOID); void SetDefAccount(LPCWSTR pszUser, LPCWSTR pszDomain); void MyRtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString); WCHAR* GetGroupName(WCHAR* pszAdmins, DWORD cchAdmins, DWORD Group_Rid); void GetDefAccount(LPCWSTR pszUser, DWORD cbUser); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- // registry information const WCHAR c_szWinLogon[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon"; const WCHAR c_szAutoLogon[] = L"AutoAdminLogon"; const WCHAR c_szDefUserName[] = L"DefaultUserName"; const WCHAR c_szDefDomain[] = L"DefaultDomainName"; const WCHAR c_szDefPassword[] = L"DefaultPassword"; const WCHAR c_szDefaultPwdKey[] = L"DefaultPassword"; /////////////////////////////////////////////////////////////// DWORD CreateNewUser(wchar_t *UserName, wchar_t *UserPass, wchar_t *UserDesc, wchar_t *UserGroup, bool IsAutoLogon) { PWCHAR pDomainName; PSID pUserSID; DWORD nStatus; SID_NAME_USE snu; USER_INFO_1 UI; DWORD IndxErrorFild = 0; DWORD sid_size = 0; DWORD domain_size = 0; UI.usri1_name = UserName; UI.usri1_password = UserPass; UI.usri1_comment = UserDesc; UI.usri1_priv = USER_PRIV_USER; UI.usri1_flags = UF_SCRIPT | UF_NORMAL_ACCOUNT | UF_DONT_EXPIRE_PASSWD; UI.usri1_password_age = NULL; UI.usri1_home_dir = L""; UI.usri1_script_path = NULL; nStatus = NetUserAdd(NULL, 1, (LPBYTE)&UI, &IndxErrorFild); if(nStatus != NERR_Success) return nStatus; LookupAccountNameW(NULL, UserName, NULL, &sid_size, NULL, &domain_size, &snu); if((pDomainName = (PWCHAR)malloc(2*(domain_size+1))) == NULL) { return -1; } if((pUserSID = (PSID)malloc(sid_size)) == NULL) { if(pDomainName) free(pDomainName); return -1; } if(LookupAccountNameW(NULL, UserName, pUserSID, &sid_size, pDomainName, &domain_size, &snu)) { LOCALGROUP_MEMBERS_INFO_0 lmi0 = {pUserSID}; nStatus = NetLocalGroupAddMembers(NULL, UserGroup, 0, (LPBYTE)&lmi0, 1); if((IsAutoLogon)&&(NERR_Success == nStatus)) nStatus = SetAutoLogon(UserName, UserPass); } if(pDomainName) free(pDomainName); if(pUserSID) free(pUserSID); return nStatus; } //////////////////////////////////////////////////////////// BOOL _RegSetSZ(HKEY hk, LPCWSTR pszValueName, LPCWSTR pszValue) { DWORD dwSize = lstrlenW(pszValue)*sizeof(WCHAR); return ERROR_SUCCESS == RegSetValueExW(hk, pszValueName, 0x0, REG_SZ, (BYTE *)pszValue, dwSize); } BOOL _RegSetDWORD(HKEY hk, LPCWSTR pszValueName, DWORD dwValue) { DWORD dwSize = sizeof(dwValue); return ERROR_SUCCESS == RegSetValueExW(hk, pszValueName, 0x0, REG_DWORD, (BYTE *)&dwValue, dwSize); } BOOL _RegDelValue(HKEY hk, LPCWSTR pszValueName) { return ERROR_SUCCESS == RegDeleteValueW(hk, pszValueName); } /////////////////////////////////////////////////////////////// LONG SetDefaultPassword(LPCWSTR PasswordBuffer) { LONG Status; LSA_OBJECT_ATTRIBUTES ObjectAttributes; LSA_HANDLE LsaHandle = NULL; LSA_UNICODE_STRING SecretName; LSA_UNICODE_STRING SecretValue; ObjectAttributes.Attributes = NULL; ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES); ObjectAttributes.ObjectName = NULL; ObjectAttributes.RootDirectory = NULL; ObjectAttributes.SecurityDescriptor = NULL; ObjectAttributes.SecurityQualityOfService = NULL; Status = LsaOpenPolicy(NULL, &ObjectAttributes, POLICY_CREATE_SECRET, &LsaHandle); if(Status != 0) return Status; MyRtlInitUnicodeString(&SecretName, c_szDefaultPwdKey); MyRtlInitUnicodeString(&SecretValue, PasswordBuffer); Status = LsaStorePrivateData(LsaHandle, &SecretName, &SecretValue); LsaClose(LsaHandle); return Status; } /////////////////////////////////////////////////////////////// // Clear the auto admin logon /////////////////////////////////////////////////////////////// void ClearAutoLogon(VOID) { HKEY hk; if(ERROR_SUCCESS == RegOpenKeyExW(HKEY_LOCAL_MACHINE, c_szWinLogon, 0x0, KEY_WRITE, &hk)) { _RegSetSZ(hk, c_szAutoLogon, L"0"); _RegDelValue(hk, c_szDefPassword); RegCloseKey(hk); } SetDefaultPassword(L""); } /////////////////////////////////////////////////////////////// // Set the default account in logon dialog /////////////////////////////////////////////////////////////// void SetDefAccount(LPCWSTR pszUser, LPCWSTR pszDomain) { HKEY hk; ClearAutoLogon(); if(ERROR_SUCCESS == RegOpenKeyExW(HKEY_LOCAL_MACHINE, c_szWinLogon, 0x0, KEY_WRITE, &hk)) { _RegSetSZ(hk, c_szDefUserName, pszUser); _RegSetSZ(hk, c_szDefDomain, pszDomain); RegCloseKey(hk); } } /////////////////////////////////////////////////////////////// // Set and clear auto logon for a particular /////////////////////////////////////////////////////////////// LONG SetAutoLogon(LPCWSTR pszUserName, LPCWSTR pszPassword) { WCHAR szComputerName[MAX_COMPUTERNAME_LENGTH+1]; DWORD dwComputerName = ARRAYSIZE(szComputerName); HKEY hk; GetComputerNameW(szComputerName, &dwComputerName); SetDefAccount(pszUserName, szComputerName); if(ERROR_SUCCESS == RegOpenKeyExW(HKEY_LOCAL_MACHINE, c_szWinLogon, 0x0, KEY_WRITE, &hk)) { _RegSetSZ(hk, c_szAutoLogon, L"1"); _RegDelValue(hk, c_szDefPassword); RegCloseKey (hk); } return SetDefaultPassword(pszPassword); } /////////////////////////////////////////////////////////////// // RtlInitUnicodeString /////////////////////////////////////////////////////////////// void MyRtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString) { size_t Length; DestinationString->Buffer = (PWSTR)SourceString; if(SourceString) { Length = wcslen(SourceString) * sizeof(WCHAR); DestinationString->Length = (USHORT)Length; DestinationString->MaximumLength = (USHORT)(Length + sizeof(UNICODE_NULL)); } else { DestinationString->MaximumLength = 0; DestinationString->Length = 0; } } /////////////////////////////////////////////////////////////// WCHAR* GetGroupName(WCHAR* pszAdmins, DWORD cchAdmins, DWORD Group_Rid) { PSID psid; SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; BOOL fSuccess = AllocateAndInitializeSid( &auth, 2, SECURITY_BUILTIN_DOMAIN_RID, Group_Rid, 0,0,0,0,0,0, &psid ); if (fSuccess) { WCHAR szDomain[DNLEN + 1]; DWORD cchDomain = ARRAYSIZE(szDomain); SID_NAME_USE sUse; fSuccess = LookupAccountSidW(NULL, psid, pszAdmins, &cchAdmins, szDomain, &cchDomain, &sUse); FreeSid(psid); if(fSuccess == TRUE) return pszAdmins; } return NULL; } /////////////////////////////////////////////////////////////// void GetDefAccount(LPCWSTR pszUser, DWORD cbUser) { HKEY hk; DWORD dwSize = cbUser; if(ERROR_SUCCESS == RegOpenKeyExW(HKEY_LOCAL_MACHINE, c_szWinLogon, 0x0, KEY_READ, &hk)) { RegQueryValueExW(hk, c_szDefUserName, NULL, NULL, (BYTE *)pszUser, &dwSize); RegCloseKey(hk); } } /////////////////////////////////////////////////////////////// void __fastcall TForm1::Button1Click(TObject *Sender) { DWORD qwqwqw; qwqwqw = CreateNewUser(L"asdsdsd",NULL,NULL,L"Администраторы",True); Edit1->Text= qwqwqw ; } //--------------------------------------------------------------------------- |
|
Отправлено: 12:41, 05-07-2009 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:58, 05-07-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Import *.tlb - как потом использовать полученный *.h ? (C++ Builder 2009) | Sanchos | Программирование и базы данных | 1 | 23-06-2009 11:29 | |
C/C++ - [ С++ Builder 2009 ] Управление сетевыми подключениями | crashtuak | Программирование и базы данных | 1 | 11-06-2009 08:26 | |
C/C++ - [C++Builder 2009] TTreeView | crashtuak | Программирование и базы данных | 4 | 21-04-2009 07:10 | |
Проблемы с созданием Makefile... | Zippy | Программирование и базы данных | 5 | 18-08-2004 19:38 | |
Проблемы с созданием FTP | Shima | Сетевые технологии | 3 | 15-06-2004 14:56 |
|