Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723

Повышение прав своему приложению

24.05.2011, 18:19. Показов 7933. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде где то было описано как выставлять права своей программы, но не могу найти... подскажите?

От модератора: тема является продолжением этой.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2011, 18:19
Ответы с готовыми решениями:

Как назначить своему приложению входящие параметры?
Всем добрый день!:) Допустим я собрал простенькое winForms-приложение C:\1.exe Хочу чтобы при ее запуске из cmd с параметром допустим...

Как дать своему приложению привилегии Root?
Нужно записать данные в файл, который имеет права доступа RW-R--R--, соответственно нужен рут. Следующий код не пишет в файл, получаю...

Повышение прав
Доброго времени суток! вопрос такой, возможно ли для проги на Делфи повысить программно права в систем? ничего не зная о пароле и...

13
Заблокирован
25.05.2011, 08:52
вот это?
0
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
25.05.2011, 09:40  [ТС]
нет...
0
Кибернетик
 Аватар для СyberSpec
465 / 89 / 12
Регистрация: 10.04.2009
Сообщений: 424
25.05.2011, 10:17
Интересный тред) Нашел по теме вот что:
C#
1
2
WindowsIdentity identity = new WindowsIdentity(accessToken);
WindowsImpersonationContext context = identity.Impersonate();
и статья с MSDN в тему.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.05.2011, 10:21
Sequd, права управляемым приложениям назначаются в соответствии с правами пользователя и в зависимости от групп кода, к которым данное приложение относится. Вы никак не сможете вылезть за пределы, определенные ОС и CLR.
0
Кибернетик
 Аватар для СyberSpec
465 / 89 / 12
Регистрация: 10.04.2009
Сообщений: 424
25.05.2011, 10:40
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Sequd, права управляемым приложениям назначаются в соответствии с правами пользователя и в зависимости от групп кода, к которым данное приложение относится. Вы никак не сможете вылезть за пределы, определенные ОС и CLR.
значит нужен кусок кода неуправляемого.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.05.2011, 10:46
СyberSpec, опять же все упрется в права пользователя запустившего приложение.
0
Кибернетик
 Аватар для СyberSpec
465 / 89 / 12
Регистрация: 10.04.2009
Сообщений: 424
25.05.2011, 10:51
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
СyberSpec, опять же все упрется в права пользователя запустившего приложение.
Да я согласен. Просто интересно было как зная имя и пасс повысить приложению права.
все, нашел:
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
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System.Runtime.InteropServices; // DllImport
 
using System.Security.Principal; // WindowsImpersonationContext
 
using System.Security.Permissions; // PermissionSetAttribute
 
...
 
public WindowsImpersonationContext 
    ImpersonateUser(string sUsername, string sDomain, string sPassword)
{
    // initialize tokens
 
    IntPtr pExistingTokenHandle = new IntPtr(0);
    IntPtr pDuplicateTokenHandle = new IntPtr(0);
    pExistingTokenHandle = IntPtr.Zero;
    pDuplicateTokenHandle = IntPtr.Zero;
    
    // if domain name was blank, assume local machine
 
    if (sDomain == "")
        sDomain = System.Environment.MachineName;
 
    try
    {
        string sResult = null;
 
        const int LOGON32_PROVIDER_DEFAULT = 0;
 
        // create token
 
        const int LOGON32_LOGON_INTERACTIVE = 2;
        //const int SecurityImpersonation = 2;
 
 
        // get handle to token
 
        bool bImpersonated = LogonUser(sUsername, sDomain, sPassword, 
            LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
                ref pExistingTokenHandle);
 
        // did impersonation fail?
 
        if (false == bImpersonated)
        {
            int nErrorCode = Marshal.GetLastWin32Error();
            sResult = "LogonUser() failed with error code: " + 
                nErrorCode + "\r\n";
 
            // show the reason why LogonUser failed
 
            MessageBox.Show(this, sResult, "Error", 
                MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
 
        // Get identity before impersonation
 
        sResult += "Before impersonation: " + 
            WindowsIdentity.GetCurrent().Name + "\r\n";
 
        bool bRetVal = DuplicateToken(pExistingTokenHandle, 
            (int)SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, 
                ref pDuplicateTokenHandle);
 
        // did DuplicateToken fail?
 
        if (false == bRetVal)
        {
            int nErrorCode = Marshal.GetLastWin32Error();
            // close existing handle
 
            CloseHandle(pExistingTokenHandle); 
            sResult += "DuplicateToken() failed with error code: " 
                + nErrorCode + "\r\n";
 
            // show the reason why DuplicateToken failed
 
            MessageBox.Show(this, sResult, "Error", 
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            return null;
        }
        else
        {
            // create new identity using new primary token
 
            WindowsIdentity newId = new WindowsIdentity
                                        (pDuplicateTokenHandle);
            WindowsImpersonationContext impersonatedUser = 
                                        newId.Impersonate();
 
            // check the identity after impersonation
 
            sResult += "After impersonation: " + 
                WindowsIdentity.GetCurrent().Name + "\r\n";
            
            MessageBox.Show(this, sResult, "Success", 
                MessageBoxButtons.OK, MessageBoxIcon.Information);
            return impersonatedUser;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        // close handle(s)
 
        if (pExistingTokenHandle != IntPtr.Zero)
            CloseHandle(pExistingTokenHandle);
        if (pDuplicateTokenHandle != IntPtr.Zero) 
            CloseHandle(pDuplicateTokenHandle);
    }
}
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
04.06.2018, 09:42
решил не создавать новую тему, вопрос у меня такой: каким образом в своем приложении по нажатию кнопки запустить такой процесс, что сама винда выведет диалог с запросом логина и пароля, а я часть кода исполню с этими правами.
Вот примерный сценарий использования: есть программа имеющая информационный функционал, но если пришел админ, то ему может потребоваться и функционал по настройке и он выбрав какой-то пункт меню получит запрос на повышение прав, введет логин и пароль и по результату программа отработает тот или иной код.
аналогия с виндой, где такие кнопки имеют картинку со щитом UAC.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.06.2018, 11:58
belalugoci, запуск делается путем использования глагола runas
C#
1
2
var startInfo = new ProcessStartInfo("app.exe") { Verb = "runas" };
Process.Start(startInfo);
Иконку щита кнопке можно добавить путем отправки сообщения BCM_SETSHIELD.
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
04.06.2018, 12:07
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Иконку щита кнопке можно добавить путем отправки сообщения BCM_SETSHIELD.
Еще читаю материалы, в том числе MSDN и Technet. Я правильно понимаю логику: на кнопку делаем вызов самого себя но с параметром, параметр обрабатываем на этапе запуска приложения, если параметра нет, то запускаемся в обычном режиме, если параметры какие-то переданы, то обрабатываем и например открываем новую копию приложения сразу на окне настроек, после нажатия Ок/Сохранить, копия с повышенными правами закрывается, а данные передаются любым способом, ограниченным только фантазией, все верно?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.06.2018, 12:33
belalugoci, верно
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
08.06.2018, 09:09
Цитата Сообщение от OwenGlendower Посмотреть сообщение
запуск делается путем использования глагола runas
еще вопрос образовался, как запускать приложения консоли MSC?
start compmgmt.msc?
как в таком случае запускать с повышением привилегий?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
08.06.2018, 16:50
belalugoci, им это вроде не требуется, но если что такой способ вроде работает
C#
1
2
3
Process.Start(new ProcessStartInfo("cmd", "/c mmc compmgmt.msc") {
    Verb = "runas"
});
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2018, 16:50
Помогаю со студенческими работами здесь

Повышение прав пользователя до администратора группы
Здравствуйте. Необходимо в созданной группе пользователей (Х), добавить пользователя с правами администратора. Важно чтобы этот...

Повышение прав приложения во время работы
Имеется проект графической программы. Этой программе необходимо во время работы повышать права до суперпользователя. Во время работы...

Запуск программы с повышение прав, использую WMIC
Доброго времени суток! Пишу скрипт, который запускает приложение, а точнее exe файл программы putty с правами администратора. То есть на...

Создать манифест (требовать повышение прав если возможно)
Необходимо создать манифест таким образом чтобы если у пользователя есть права администратора то они запрашивались бы. А если нет прав...

Запрос на повышение прав только при запуске из контекстного меню
Здравствуйте. Пример: regedit.exe Как сделать появление запроса на повышение прав (UAC) только при запуске программы ПКМ =>...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru