Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/56: Рейтинг темы: голосов - 56, средняя оценка - 4.79
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Программно дать права Администратора опытному пользователю

15.03.2011, 11:48. Показов 11716. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Ребята подскажите по такому вопросу.

Можно ли как-нить назначить права Администратора опытному пользователю или как можно под опытным пользователем записать данные в реестр?

Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2011, 11:48
Ответы с готовыми решениями:

Программно дать приложению права администратора
Компилю проект и получаю Exception type - Permission denied . Как я понял требуются рут права, как их программно получить? ...

Как дать пользователю права администратора
Есть сервер (test), на нем есть администратор (adminname). Он может заводить пользователей и править конфигурацию сервера. Этот...

Как дать права администратора через реестр?
Пока меня не было, брат какую-то фигню с ПК сделал. Он попытался создать новый профиль, и в итоге ВСЕ профили потеряли права администратора...

22
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 11:58
1. В какой системе ?
2. Укажите критерии для определения "опытности" пользователя ?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.03.2011, 12:00
подозреваю что речь идет о группе пользователей "PowerUser"(ОпытныеПользователи)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.03.2011, 12:06  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
1. В какой системе ?
2. Укажите критерии для определения "опытности" пользователя ?
Система windows xp или система windows 2000
Цитата Сообщение от koldun Посмотреть сообщение
подозреваю что речь идет о группе пользователей "PowerUser"(ОпытныеПользователи)
Да действительно опытные пользователи.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 12:17
Чтобы узнать, обладает ли административными правами текущий пользователь (это часто бывает необходимо для изменения системных настроек, выполнения приложений или операций с реестром), вызовите в C++ Builder функцию WIndows API IsUserAnAdmin:
C++
1
bool IsUserAnAdmin(void);
Функция объявлена в файле shlobj.h, и возвращает true, если текущий пользователь входит в группу администраторов. Функция возвращает false в противном случае.
2
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.03.2011, 12:26
а вот назначить опытному пользователю админа, скорее всего нельзя.
точно так же как и дать пользователю возможность править реестр.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 12:35
а как, в таком случае, все это: Работа с реестром в C++ Builder ?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.03.2011, 12:48  [ТС]
Уважаемый LK, эту функцию я знаю, я даже выкладывал её на форуме, так что можете поискать. Вопрос был в другом как программно сделать опытного пользователя администратором вот в этом то и состоял вопрос
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 12:51
Цитата Сообщение от Sasha Посмотреть сообщение
так что можете поискать
оно мне не надо. Знаете - пишите: "то-то и то-то - не предлагать".
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Устанавливаем привелегии процессу. 
// аргументы - токен процесса (если 0, то своему процессу), имя привелегии, флаг вкл/выкл, флаг вышло/невышло
 
// Какие бывают привелегии:
 
////////////////////////////////////////////////////////////////////////
//               NT Defined Privileges                                //
////////////////////////////////////////////////////////////////////////
//"SeCreateTokenPrivilege"
//"SeAssignPrimaryTokenPrivilege"
//"SeLockMemoryPrivilege"
//"SeIncreaseQuotaPrivilege"
//"SeUnsolicitedInputPrivilege"
//"SeMachineAccountPrivilege"
//"SeTcbPrivilege"
//"SeSecurityPrivilege"
//"SeTakeOwnershipPrivilege"
//"SeLoadDriverPrivilege"
//"SeSystemProfilePrivilege"
//"SeSystemtimePrivilege"
//"SeProfileSingleProcessPrivilege"
//"SeIncreaseBasePriorityPrivilege"
//"SeCreatePagefilePrivilege"
//"SeCreatePermanentPrivilege"
//"SeBackupPrivilege"
//"SeRestorePrivilege"
//"SeShutdownPrivilege"
//"SeDebugPrivilege"
//"SeAuditPrivilege"
//"SeSystemEnvironmentPrivilege"
//"SeChangeNotifyPrivilege"
//"SeRemoteShutdownPrivilege"
 
function SetPrivilege(hToken: dword; lpPrivName : PChar; bEnable : Boolean) : Boolean;
var
   NameValue: Int64;
   tkp: TOKEN_PRIVILEGES;
   ReturnLength: Cardinal;
begin
   Result := False;
   if hToken = 0 then
              OpenProcessToken(INVALID_HANDLE_VALUE, TOKEN_ADJUST_PRIVILEGES
                                                      or TOKEN_QUERY, hToken);
   if not LookupPrivilegeValue(nil, lpPrivName, NameValue) then
    begin
     CloseHandle(hToken);
     exit;
    end;
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Luid := NameValue;
   if bEnable then
          tkp.Privileges[0].Attributes := (SE_PRIVILEGE_ENABLED)
   else begin
          tkp.Privileges[0].Attributes := (SE_PRIVILEGE_ENABLED and
                                           tkp.Privileges[0].Attributes);
   end;
   AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(TOKEN_PRIVILEGES),
                         tkp, ReturnLength);
   if (GetLastError <> ERROR_SUCCESS) then exit;
 
   Result := TRUE;
   CloseHandle(hToken);
end;
 
// Проверка наличия привелегий у процесса.
function LookPrivilege(hToken: dword; lpPrivName : PChar; Typ : Byte) : Boolean;
var
   NameValue : Int64;
   tkp : PRIVILEGE_SET;
   pfResult : LongBool;
begin
 if hToken = 0 then
            OpenProcessToken(INVALID_HANDLE_VALUE, TOKEN_ADJUST_PRIVILEGES
                                                    or TOKEN_QUERY, hToken);
 LookupPrivilegeValue(nil, lpPrivName, NameValue);
 tkp.PrivilegeCount := 1;
 // tkp.Control:=PRIVILEGE_SET_ALL_NECESSARY;
 tkp.Privilege[0].Luid := NameValue;
 if Typ = 1 then
   tkp.Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
 if Typ = 2 then
   tkp.Privilege[0].Attributes := SE_PRIVILEGE_USED_FOR_ACCESS;
 PrivilegeCheck(hToken, tkp, pfResult);
 Result := pfResult
end;
// применение
SetPrivilege(0, "SeDebugPrivilege", True); // Теперь имеем привелегии отладчика
если и это у вас есть, даже не знаю, чем вам еще помочь .
2
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.03.2011, 17:55  [ТС]
Ребята извиняюсь может быть за тупой вопрос, а какая привелегия отвечает за изменение в реестра или хотя бы за просмотр его, и есть ли вообще такая привелегия?

Заранее благодарен
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 18:20
да, кажись, персонально никакая
а какие именно изменения не дают вам покоя ?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.03.2011, 20:07
что-то мне подсказывает что ниодна из этих привилегий не даст вам желаемого результата.
потому как они все работают с локальными политиками безопасности, а правка реестра туда не относитса.

только админом можно.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2011, 21:14
я не зря упоминал Работа с реестром в C++ Builder
При использованиии компонента TRegistry под NT пользователь с правами доступа ниже чем "администратор" не может получить доступа к информации реестра в ключе HKEY_LOCAL_MACHINE. Как это обойти?

Проблема вызвана тем, что TRegistry всегда открывает реестр с параметром KEY_ALL_ACCESS (полный доступ), даже если необходим доступ KEY_READ (только чтение). Избежать этого можно используя функции API для работы с реестром (RegOpenKey и т.п.), или создать новый класс из компонента TRegestry, и изменить его так чтобы можно было задавать режим открытия реестра.
Также можно извратиться с файлом .REG , но человек секретничает .

Не по теме:

И я вот путаюсь , исходя из аватара - который(ая) это Sasha :D ? Тот, который(ая) забавлялся с балуном, или новый :rofl: ...

1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.03.2011, 12:08  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
И я вот путаюсь , исходя из аватара - который(ая) это Sasha ? Тот, который(ая) забавлялся с балуном, или новый
ОНО
Изучая привелегии наткнулся на очень интересный код, который выключает компьютер под опытным пользователем.

Так что, если кому надо выкладываю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
bool __fastcall TForm1::shoot(bool reboot, bool force)
{
OSVERSIONINFO ver;
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&ver);
if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) // в семействе NT для выключения необходимо иметь привилегию SE_SHUTDOWN_NAME
        {
        HANDLE hToken;
        TOKEN_PRIVILEGES* NewState;
        OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
        NewState=(TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
        NewState->PrivilegeCount = 1;
        LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&NewState->Privileges[0].Luid);
        NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, FALSE, NewState, NULL, NULL,NULL);
        free(NewState);
        CloseHandle(hToken);
        }
 
UINT mode = 0;
if (reboot)
        mode += EWX_REBOOT;
else
        mode += EWX_POWEROFF;
 
if (force) mode += EWX_FORCE;
 
return ExitWindowsEx(mode ,0);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
shoot(false, true);//в "быстром" режиме закроет все программы и выключит компьютер
}
Ну вопрос с реестом остаётся открытым какую привелегию использовать для реестра пока не знаю....
0
"Любовь"
17.03.2011, 12:10
Здравствуйте помогите пожалуйста решить задачу!
Имеется массив А из N произвольных чисел - А(N), среди которых есть положительные, отрицательные и равные нулю. Вычислить количество положительных и нулевых чисел и сумму отрицательных.
Например, если А = {2, 4, –3, 3, 5, –2, 1}, результат: положительных чисел 5 (2, 4, 3,
5, 1), нулевых – 0 (нет), сумма отрицательных –5 (–3 + –2 = –5).
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
17.03.2011, 12:38
Цитата Сообщение от Любовь
Здравствуйте помогите пожалуйста решить задачу!
так вас трудно будет найти - создайте НОВУЮ тему , да и правила советуют - один вопрос - одна тема , для этого внизу даже пимпочка специальная есть - "Создать тему" ...
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
17.03.2011, 15:26
пообщался толькочто с нашим админом, говорит что на реест есть права только у админа.
так что безвариантов, или делать пользователя админом, или только чтение из реестра.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.03.2011, 13:15
Цитата Сообщение от koldun Посмотреть сообщение
пообщался толькочто с нашим админом, говорит что на реест есть права только у админа
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.03.2011, 13:24  [ТС]
Уважаемый koldun, я только что пробывал менять в ручную значения параметров реестра, всё меняется(создаются ключи, меняются параметры существующих ключей) под опытным пользователем, так что пока я считаю, что миф развеян по поводу того, что нельзя изменять реестр под опытным пользователем. Работаю сейчас над программным изменением реестра.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.03.2011, 23:28  [ТС]
Всё ребята проблему решил. Под опытным пользователем параметры ключей в реестре можно обновить.

Спасибо, кто помогал.

Добавлено через 5 часов 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Memo1->Clear();
 DWORD dwIndex,dwSizeName;
 HKEY hRootKey = HKEY_CURRENT_USER;
 TCHAR *sKey = "Control Panel\\Keyboard",sParamName[80];
 HKEY hKeyResult = NULL;
 LONG rc = RegOpenKeyEx(hRootKey,sKey,0,KEY_ALL_ACCESS,&hKeyResult);//получение параметров данного данного ключа
 if (rc == ERROR_SUCCESS)
 {
    for(dwIndex = 0;;dwIndex++)
    {
     dwSizeName = 80;
      if(RegEnumValue(hKeyResult,dwIndex,sParamName,&dwSizeName,NULL,NULL,NULL,NULL)!=ERROR_SUCCESS)
      {
       break;
      }
       Memo1->Lines->Add((AnsiString)sParamName);
    }
 
  RegCloseKey(hKeyResult);
 }
 else
 {
  ShowMessage("Раздел не открылся");
 }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HKEY hRootKey = HKEY_CURRENT_USER;
TCHAR *sKey = "Control Panel\\Keyboard";
TCHAR *sVarName1 = "InitialKeyboardIndicators";
String text = "0";
TCHAR *sVal = text.c_str();
HKEY hKeyResult = NULL;
LONG rc = RegOpenKeyEx(hRootKey,sKey,0,KEY_ALL_ACCESS,&hKeyResult);//изменение значения параметра данного ключа
if (rc == ERROR_SUCCESS)
 {
  if(RegSetValueEx(hKeyResult,sVarName1,0,REG_SZ,(BYTE*)sVal,lstrlen(sVal))!=ERROR_SUCCESS);
 
   RegCloseKey(hKeyResult);
 }
 else
 {
  ShowMessage("Ключ не открыт");
 }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2011, 23:28
Помогаю со студенческими работами здесь

Как дать Права Администратора для рабочего потока
Ребята помогите!!! Как дать Права Администратора для рабочего потока в WinForm

Как дать права Администратора программе которую ставлю прав то нет ?
Часто сталкиваюсь с такой ситуацией нет прав админа на “RegEdit” and “Ctrl+Alt+Delete” Толи вирус снимет права толи так сижу как...

Дать пользователю права только на чтение
Создал 2-го пользователя &quot;ta&quot; в sql server через Management Studio. как в свойствах или в ролях запретить этому пользователю...

Дать пользователю права на каталог (NTFS) из скрипта
Так как же дать определенному пользователю права на запись в определенный каталог из скрипта (VBScript или JScript), то что надо...

Дать пользователю user2 права пользователя user1
Нужно через команду chmod дать пользователю user2 права пользователя user1. Как это можно реализовать ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru