Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> командой из программы создать нового юзвера, в вин 200 
:(
    Опции темы
Step
Дата 10.6.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Как из программы создать нового юзвера в виндоус 2000 с заданием ему пароля и администраторских прав...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
shedon
Дата 11.6.2004, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Код

#include <ntsecapi.h>
#include <lmaccess.h>

BOOL
GetAccountSid(
   LPTSTR SystemName,
   LPTSTR AccountName,
   PSID *Sid
   )
{
   LPTSTR ReferencedDomain=NULL;
   DWORD cbSid=128;    // initial allocation attempt
   DWORD cbReferencedDomain=16; // initial allocation size
   SID_NAME_USE peUse;
   BOOL bSuccess=FALSE; // assume this function will fail

   __try {

   //
   // initial memory allocations
   //
   if((*Sid=HeapAlloc(
                   GetProcessHeap(),
                   0,
                   cbSid
                   )) == NULL) __leave;

   if((ReferencedDomain=(LPTSTR)HeapAlloc(
                   GetProcessHeap(),
                   0,
                   cbReferencedDomain
                   )) == NULL) __leave;

   //
   // Obtain the SID of the specified account on the specified system.
   //
   while(!LookupAccountName(
                   SystemName,         // machine to lookup account on
                   AccountName,        // account to lookup
                   *Sid,               // SID of interest
                   &cbSid,             // size of SID
                   ReferencedDomain,   // domain account was found on
                   &cbReferencedDomain,
                   &peUse
                   )) {
       if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
           //
           // reallocate memory
           //
           if((*Sid=HeapReAlloc(
                       GetProcessHeap(),
                       0,
                       *Sid,
                       cbSid
                       )) == NULL) __leave;

           if((ReferencedDomain=(LPTSTR)HeapReAlloc(
                       GetProcessHeap(),
                       0,
                       ReferencedDomain,
                       cbReferencedDomain
                       )) == NULL) __leave;
       }
       else __leave;
   }

   //
   // Indicate success.
   //
   bSuccess=TRUE;

   } // finally
   __finally {

   //
   // Cleanup and indicate failure, if appropriate.
   //

   HeapFree(GetProcessHeap(), 0, ReferencedDomain);

   if(!bSuccess) {
       if(*Sid != NULL) {
           HeapFree(GetProcessHeap(), 0, *Sid);
           *Sid = NULL;
       }
   }

   } // finally

   return bSuccess;
}

NTSTATUS
OpenPolicy(
   LPWSTR ServerName,
   DWORD DesiredAccess,
   PLSA_HANDLE PolicyHandle
   )
{
   LSA_OBJECT_ATTRIBUTES ObjectAttributes;
   LSA_UNICODE_STRING ServerString;
   PLSA_UNICODE_STRING Server = NULL;

   //
   // Always initialize the object attributes to all zeroes.
   //
   ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));

   if (ServerName != NULL) {
       //
       // Make a LSA_UNICODE_STRING out of the LPWSTR passed in
       //
       InitLsaString(&ServerString, ServerName);
       Server = &ServerString;
   }

   //
   // Attempt to open the policy.
   //
   return LsaOpenPolicy(
               Server,
               &ObjectAttributes,
               DesiredAccess,
               PolicyHandle
               );
}

NTSTATUS
SetPrivilegeOnAccount(
   LSA_HANDLE PolicyHandle,    // open policy handle
   PSID AccountSid,            // SID to grant privilege to
   LPWSTR PrivilegeName,       // privilege to grant (Unicode)
   BOOL bEnable                // enable or disable
   )
{
   LSA_UNICODE_STRING PrivilegeString;

   //
   // Create a LSA_UNICODE_STRING for the privilege name.
   //
   InitLsaString(&PrivilegeString, PrivilegeName);//см.ниже

   //
   // grant or revoke the privilege, accordingly
   //
   if(bEnable) {
       return LsaAddAccountRights(
               PolicyHandle,       // open policy handle
               AccountSid,         // target SID
               &PrivilegeString,   // privileges
               1                   // privilege count
               );
   }
   else {
       return LsaRemoveAccountRights(
               PolicyHandle,       // open policy handle
               AccountSid,         // target SID
               FALSE,              // do not disable all rights
               &PrivilegeString,   // privileges
               1                   // privilege count
               );
   }
}


NET_API_STATUS UserAdd(LPSTR username)
{
// Эту функцию и надо вызвать для создания юзвера

USER_INFO_2   user_info;

char compname[256];
wchar_t wcompname[256];
DWORD parm_err=0;
LSA_HANDLE PolicyHandle;

LPTSTR lpszSystemInfo;    // ptr. to system info. string
DWORD cchBuff = 256;      // size of comp. or user name
TCHAR tchBuffer2[256];    // buffer for concat'd. str.
WCHAR wGroupNameAdd[20]=L"Administrators";
lpszSystemInfo = tchBuffer2;
ZeroMemory(&user_info,sizeof(user_info));

   GetComputerName(lpszSystemInfo, &cchBuff);
   strcpy(compname,"\\\\");
   strcat(compname,lpszSystemInfo);

   mbstowcs( wcompname, compname, strlen(compname)+1 );
   mbstowcs(user_info.usri2_name,username, strlen(username)+1 );

//-------создаем юзера------------//

       user_info.usri2_password = L"";
       user_info.usri2_priv = USER_PRIV_USER;
       user_info.usri2_flags =

UF_SCRIPT|UF_PASSWD_CANT_CHANGE|UF_DONT_EXPIRE_PASSWD|UF_NORMAL_ACCOUNT;

user_info.usri2_acct_expires=TIMEQ_FOREVER;

NetUserAdd(wcompname,// PDC name
      2L,                   // level
      (LPBYTE)&user_info,   // input buffer
      &parm_err );          // parameter in error

GetAccountSid(
           NULL,       // default lookup logic
           username,   // account to obtain SID
           &pSid       // buffer to allocate to contain resultant SID
           );

NetLocalGroupAddMember(0,wGroupNameAdd,pSid);

//---------даем ему кое-какие права-----------//

OpenPolicy(
    wcompname,           // target machine
    POLICY_ALL_ACCESS,  
    &PolicyHandle        // resultant policy handle
     );


SetPrivilegeOnAccount(
                   PolicyHandle,               // policy handle
                   pSid,                       // SID to grant privilege
                   L"SeInteractiveLogonRight", // Unicode privilege
                   TRUE                        // enable the privilege
                   );

SetPrivilegeOnAccount(
                   PolicyHandle,          
                   pSid,                  
                   L"SeNetworkLogonRight",
                   TRUE                  
                   );


LsaClose(PolicyHandle);

return 0;
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Step
Дата 11.6.2004, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



shedon , да ты хакер(могу объяснить почему) как я посмотрю, спасибо....



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
shedon
Дата 11.6.2004, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата
shedon , да ты хакер(могу объяснить почему) как я посмотрю
wow.gif
Не, я не хакер, уже вышел из того возраста biggrin.gif


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Step
Дата 11.6.2004, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



shedon
Цитата
Не, я не хакер, уже вышел из того возраста
это не возраст а понимание ценности информации....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Enflout
Дата 13.6.2004, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 22.5.2004

Репутация: нет
Всего: 6



Если кому интересен альтернативный способ, то вот он...

# include <windows.h>
void main(void){
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
CreateProcess(NULL, "net user New /add", NULL, NULL, true, HIGH_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CreateProcess(NULL, "net localgroup Administrators New /add", NULL, NULL, true, HIGH_PRIORITY_CLASS, NULL, NULL, &si, &pi);
}
Работает при наличии net.exe разумеется. smile.gif

Ах а про задание пароля сказать забыл!!! Кому интересно нужно дать команду не net user New /add, а
net user New password /add
А потом:
net localgroup Administrators New /add
или
net localgroup Администраторы New /add
В зависимости от языка Windows(я обычно пишу оба варианта).

Это сообщение отредактировал(а) Templar$ - 14.6.2004, 10:52
PM MAIL   Вверх
Step
Дата 14.6.2004, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Templar$, сенкс


Ваши варианты будут добавленны в ФАКю



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 14.6.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Step, если честно, то в MSDN есть wink.gif Ищи лучше.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 15.6.2004, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Baa, ты прекрасно знаешь что разобрать функцию что передать в функцию по документации могут практическе все....
А вот человек который слабо знает английский врядли сможет данные вопросы найти в мсдн...
а вопрос будет звучать примерно так как сделать тото...



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.