Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432

Смена владельца ветки реестра

03.09.2024, 09:01. Показов 7332. Ответов 148

Студворк — интернет-сервис помощи студентам
Всем привет, подскажите пожалуйста с примером
Нужно получить права доступа к системной ветки реестра то есть, если ветка принадлежит к разделу СИСТЕМА как можно изменить владельца на Администраторы и после выполнения каких-либо действий вернуть владельца обратно

И возможно ли это вообще? Т.к я много искал и читал, но так и не нашел
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2024, 09:01
Ответы с готовыми решениями:

Удаление ветки реестра
Хочу сделать некое подобие твикера для винды, реализовываю твик убирающий папки из проводника, для этого нужно удалить вот этот раздел в...

Поиск раздела (ветки) реестра
Подскажите, подправьте код. Задача - искать в реестре раздел (ветку). Существует или нет. Код //Поиск ветки (раздела) в...

Проверка нужной ветки реестра
Здравствуйте, подскажите пожалуйста, как можно сделать проверку на нужную ветку в реестре. Пример:...

148
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
07.09.2024, 21:52  [ТС]
Студворк — интернет-сервис помощи студентам
OwenGlendower, он на гитхабе есть кстати тоже на шарпе написан, запускается очень просто там 4 кнопки реест диспетчер задач командная строка и еще что-то, а еще можно запустить любую программу от имени системы
При нажатии на кнопку реестра открывается реест от имени системы

А запускал просто как обычное приложение
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.09.2024, 22:19
Цитата Сообщение от pafka1997 Посмотреть сообщение
он на гитхабе есть
Ссылку на эту прекрасную утилиту слабо привести?

Цитата Сообщение от pafka1997 Посмотреть сообщение
кстати тоже на шарпе написан
Значит можно будет изучить исходный код и повторить прием.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
07.09.2024, 22:26  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ссылку на эту прекрасную утилиту слабо привести?
https://github.com/Raymai97/SuperCMD
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
07.09.2024, 22:26
Цитата Сообщение от OwenGlendower Посмотреть сообщение
whoami /all для обоих учеток и сравнить результат?
Одинаково, за исключением что в локальной учетке нет группы MicrosoftAccount\****тут_почта****

Состав включенных объектов в список "разрешения" одинаков; различаются лишь доступные права, т.е. если в первом случае у пользователя стоит галочка "полный доступ", то во втором даже ее установить не получится. А апплет, изменяющий эти разрешения - это отдельная служба винды, и очевидно, эти самые разрешения прописывает в отдельном месте.

Очень вряд ли, что система даст изменить эти разрешения приложению, у которого изначально их нет (или, оно не является доверенным).
Или, нужно работать из под учетки, которой каким-то образом "разрешено все".
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.09.2024, 22:48
Цитата Сообщение от pafka1997 Посмотреть сообщение
Я запускался с правами системы через SuperCmd
Запустил редактор реестра через эту утилиту, но изменить параметр Start для ключа HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl Set\Services\WdBoot по прежнему не могу

Цитата Сообщение от wizard41 Посмотреть сообщение
Одинаково
Понятно. Спасибо.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
07.09.2024, 22:51  [ТС]
OwenGlendower, Хммм не знаю почему у вас так, у меня все работает
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.09.2024, 22:56
pafka1997, я тоже не знаю, но раз у вас работает значит берите исходный код приложения и сделайте свое приложение которое может запустить редактор реестра с правами которыми дают возможность менять любой ключ. Далее можно изменить этот код так чтобы программа сама себя запускала с такими правами. Начинайте с метода bw_DoWork в файле frmMain.cs.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
07.09.2024, 23:03  [ТС]
OwenGlendower, Не нужно запускать саму программу от имени систему, можно просто запускать cmd с правами системы и отправлять в нее агрументы
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.09.2024, 23:11
pafka1997, тоже вариант.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
07.09.2024, 23:19  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Очень вряд ли, что система даст изменить эти разрешения приложению, у которого изначально их нет (или, оно не является доверенным).
не соглашусь с вами. Если я могу менять в ручную владельца и давать полный доступ своей учетной записи тогда и через c# можно изменить владельца просто на данную тему очень мало информации
Чтобы мне в ручную сменить владельца нужно зайти
Разрешение - дополнительно в строке владелец изменить - выбрать пользователя - нажать галочку заменить владельца подконтейнеров и объектов после нажать еще на одну галочку - заменить все записи разрешений дочернего объекта наследуемыми от этого объекта и нажимием ок все готово
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
08.09.2024, 04:28
Цитата Сообщение от pafka1997 Посмотреть сообщение
Если я могу менять в ручную владельца и давать полный доступ своей учетной записи тогда и через c# можно изменить
Не совсем так. Если вы в ручную изменяете тип доступа - значит в данный момент у вас есть такие полномочия. Обычный пользователь не сможет это сделать без пароля администратора.
Точно так же и с приложением - не всем подряд разрешено изменять критические секции или параметры доступа, иначе, что понятно - это был бы такой треш с безопасностью, и жалоб на внезапное падение ОС было бы гораздо больше...
Цитата Сообщение от pafka1997 Посмотреть сообщение
тогда и через c# можно изменить владельца просто
Вот этот момент тоже интересный - получается замкнутый круг, т.к. изменить/добавить пользователя с "усиленными" правами может только учетная запись уже обладающая этими правами. Пользователь с обычным доступом ни как не установит "полный доступ" другому пользователю, да и себе тоже.

Получается, что если из под данной УЗ руками этот доступ установить можно, значит можно установить это кодом своего приложения, либо работая с аргументами другого приложения, у которого такие права есть (cmd). Но если у текущей УЗ таких прав нет, то никакие другие варианты не сработают - кодом изменить ничего не получится, без ввода пароля админа.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
08.09.2024, 10:34  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Получается, что если из под данной УЗ руками этот доступ установить можно, значит можно установить это кодом своего приложения
Звучит логично, но не работает из кода

Добавлено через 19 минут
OwenGlendower, wizard41, я нашел способ менять владельца, позже скину, код довольно большой
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
08.09.2024, 10:46
pafka1997, ок, ждем..
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
08.09.2024, 11:00  [ТС]
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
#region TrustedInstaller Permission ByPass Class
public class TokenManipulation
{
 
    public const string CreateToken = "SeCreateTokenPrivilege";
    public const string AssignPrimaryToken = "SeAssignPrimaryTokenPrivilege";
    public const string LockMemory = "SeLockMemoryPrivilege";
    public const string IncreaseQuota = "SeIncreaseQuotaPrivilege";
    public const string UnsolicitedInput = "SeUnsolicitedInputPrivilege";
    public const string MachineAccount = "SeMachineAccountPrivilege";
    public const string TrustedComputingBase = "SeTcbPrivilege";
    public const string Security = "SeSecurityPrivilege";
    public const string TakeOwnership = "SeTakeOwnershipPrivilege";
    public const string LoadDriver = "SeLoadDriverPrivilege";
    public const string SystemProfile = "SeSystemProfilePrivilege";
    public const string SystemTime = "SeSystemtimePrivilege";
    public const string ProfileSingleProcess = "SeProfileSingleProcessPrivilege";
    public const string IncreaseBasePriority = "SeIncreaseBasePriorityPrivilege";
    public const string CreatePageFile = "SeCreatePagefilePrivilege";
    public const string CreatePermanent = "SeCreatePermanentPrivilege";
    public const string Backup = "SeBackupPrivilege";
    public const string Restore = "SeRestorePrivilege";
    public const string Shutdown = "SeShutdownPrivilege";
    public const string Debug = "SeDebugPrivilege";
    public const string Audit = "SeAuditPrivilege";
    public const string SystemEnvironment = "SeSystemEnvironmentPrivilege";
    public const string ChangeNotify = "SeChangeNotifyPrivilege";
    public const string RemoteShutdown = "SeRemoteShutdownPrivilege";
    public const string Undock = "SeUndockPrivilege";
    public const string SyncAgent = "SeSyncAgentPrivilege";
    public const string EnableDelegation = "SeEnableDelegationPrivilege";
    public const string ManageVolume = "SeManageVolumePrivilege";
    public const string Impersonate = "SeImpersonatePrivilege";
    public const string CreateGlobal = "SeCreateGlobalPrivilege";
    public const string TrustedCredentialManagerAccess = "SeTrustedCredManAccessPrivilege";
    public const string ReserveProcessor = "SeReserveProcessorPrivilege";
 
    [StructLayout(LayoutKind.Sequential)]
    public struct LUID
    {
        public Int32 lowPart;
        public Int32 highPart;
    }
 
    [StructLayout(LayoutKind.Sequential)]
    public struct LUID_AND_ATTRIBUTES
    {
        public LUID Luid;
        public Int32 Attributes;
    }
 
    [StructLayout(LayoutKind.Sequential)]
    public struct TOKEN_PRIVILEGES
    {
        public Int32 PrivilegeCount;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public LUID_AND_ATTRIBUTES[] Privileges;
    }
 
 
    [Flags]
    public enum PrivilegeAttributes
    {
        /// <summary>Privilège est désactivé.</summary>
        Disabled = 0,
 
        /// <summary>Privilège activé par défaut.</summary>
        EnabledByDefault = 1,
 
        /// <summary>Privilège est activé.</summary>
        Enabled = 2,
 
        /// <summary>Privilège est supprimé.</summary>
        Removed = 4,
 
        /// <summary>Privilège utilisé pour accéder à un objet ou un service.</summary>
        UsedForAccess = -2147483648
    }
 
 
    [Flags]
    public enum TokenAccessRights
    {
        /// <summary>Right to attach a primary token to a process.</summary>
        AssignPrimary = 0,
 
        /// <summary>Right to duplicate an access token.</summary>
        Duplicate = 1,
 
        /// <summary>Right to attach an impersonation access token to a process.</summary>
        Impersonate = 4,
 
        /// <summary>Right to query an access token.</summary>
        Query = 8,
 
        /// <summary>Right to query the source of an access token.</summary>
        QuerySource = 16,
 
        /// <summary>Right to enable or disable the privileges in an access token.</summary>
        AdjustPrivileges = 32,
 
        /// <summary>Right to adjust the attributes of the groups in an access token.</summary>
        AdjustGroups = 64,
 
        /// <summary>Right to change the default owner, primary group, or DACL of an access token.</summary>
        AdjustDefault = 128,
 
        /// <summary>Right to adjust the session ID of an access token.</summary>
        AdjustSessionId = 256,
 
        /// <summary>Combines all possible access rights for a token.</summary>
        AllAccess = AccessTypeMasks.StandardRightsRequired |
            AssignPrimary |
            Duplicate |
            Impersonate |
            Query |
            QuerySource |
            AdjustPrivileges |
            AdjustGroups |
            AdjustDefault |
            AdjustSessionId,
 
        /// <summary>Combines the standard rights required to read with <see cref="Query"/>.</summary>
        Read = AccessTypeMasks.StandardRightsRead |
            Query,
 
        /// <summary>Combines the standard rights required to write with <see cref="AdjustDefault"/>, <see cref="AdjustGroups"/> and <see cref="AdjustPrivileges"/>.</summary>
        Write = AccessTypeMasks.StandardRightsWrite |
            AdjustPrivileges |
            AdjustGroups |
            AdjustDefault,
 
        /// <summary>Combines the standard rights required to execute with <see cref="Impersonate"/>.</summary>
        Execute = AccessTypeMasks.StandardRightsExecute |
            Impersonate
    }
 
    [Flags]
    internal enum AccessTypeMasks
    {
        Delete = 65536,
 
        ReadControl = 131072,
 
        WriteDAC = 262144,
 
        WriteOwner = 524288,
 
        Synchronize = 1048576,
 
        StandardRightsRequired = 983040,
 
        StandardRightsRead = ReadControl,
 
        StandardRightsWrite = ReadControl,
 
        StandardRightsExecute = ReadControl,
 
        StandardRightsAll = 2031616,
 
        SpecificRightsAll = 65535
    }
 
 
 
    [DllImport("advapi32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool AdjustTokenPrivileges(
        [In] IntPtr accessTokenHandle,
        [In, MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges,
        [In] ref TOKEN_PRIVILEGES newState,
        [In] int bufferLength,
        [In, Out] ref TOKEN_PRIVILEGES previousState,
        [In, Out] ref int returnLength);
 
    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool CloseHandle(
        [In] IntPtr handle);
 
    [DllImport("kernel32.dll")]
    static extern IntPtr GetCurrentProcess();
 
    [DllImport("advapi32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool OpenProcessToken(IntPtr ProcessHandle, UInt32 DesiredAccess, out IntPtr TokenHandle);
 
 
    [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool LookupPrivilegeName(
       [In] string systemName,
       [In] ref LUID luid,
       [In, Out] StringBuilder name,
       [In, Out] ref int nameLength);
 
    [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool LookupPrivilegeValue(
        [In] string systemName,
        [In] string name,
        [In, Out] ref LUID luid);
 
 
    [DllImport("advapi32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool OpenProcessToken(
        [In] IntPtr processHandle,
        [In] TokenAccessRights desiredAccess,
        [In, Out] ref IntPtr tokenHandle);
 
    [DllImport("kernel32.dll", SetLastError = true)]
    internal static extern Int32 GetLastError();
 
 
    /**********************************************************************/
    /*                        Fonction  MySetPrivilege                    */
    /**********************************************************************/
    public static bool MySetPrivilege(string sPrivilege, bool enablePrivilege)
    {
        bool blRc;
        TOKEN_PRIVILEGES newTP = new TOKEN_PRIVILEGES();
        TOKEN_PRIVILEGES oldTP = new TOKEN_PRIVILEGES();
        LUID luid = new LUID();
        int retrunLength = 0;
        IntPtr processToken = IntPtr.Zero;
 
        /* Récupération du token du processus local
        */
        blRc = OpenProcessToken(GetCurrentProcess(), TokenAccessRights.AllAccess, ref processToken);
        if (blRc == false)
            return false;
 
        /* Récupère le Local Unique Identificateur du privilège
        */
        blRc = LookupPrivilegeValue(null, sPrivilege, ref luid);
        if (blRc == false)
            return false;
 
        /* Etabli ou enlève le privilège
        */
        newTP.PrivilegeCount = 1;
        newTP.Privileges = new LUID_AND_ATTRIBUTES[64];
        newTP.Privileges[0].Luid = luid;
 
        if (enablePrivilege)
            newTP.Privileges[0].Attributes = (Int32)PrivilegeAttributes.Enabled;
        else
            newTP.Privileges[0].Attributes = (Int32)PrivilegeAttributes.Disabled;
 
        oldTP.PrivilegeCount = 64;
        oldTP.Privileges = new LUID_AND_ATTRIBUTES[64];
        blRc = AdjustTokenPrivileges(processToken,
                                      false,
                                      ref newTP,
                                      16,
                                      ref oldTP,
                                      ref retrunLength);
        if (blRc == false)
        {
            Int32 iRc = GetLastError();
            return false;
        }
        return true;
    }
}
#endregion Class
 
#region Initiate 
public class Initiate
{
    #region  TamperProtection
    public static void DisableFender(bool disableTamperProtection, bool disableDefender)
    {
        if (disableTamperProtection) // once we have TrustedInstaller Permission disable the tamper
        {
            RegistryKey Tamper = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\WdFilter", true);
 
            Tamper.SetValue("Start", 4 , RegistryValueKind.DWord); // 4 means disabled 5 means enabled
            var timi = Tamper.GetValue("Start"); //this was for debug*/
            Tamper.Close();
            MessageBox.Show(timi.ToString());
 
            
        }
    }
    #endregion
 
 
    #region ByPassTamperRegistry DisableFender Call
    public static void ByPassTamper()
    {
        try
        {
            // Get the ID of the current user
             
            WindowsIdentity id = WindowsIdentity.GetCurrent();
 
            // Add the TakeOwnership Privilege
             
            bool blRc = TokenManipulation.MySetPrivilege(TokenManipulation.TakeOwnership, true);
 
            if (!blRc)
            {
                throw new PrivilegeNotHeldException(TokenManipulation.TakeOwnership);
            }
                
 
            /* Add the Restore Privilege (must be done to change the owner)
             */
            blRc = TokenManipulation.MySetPrivilege(TokenManipulation.Restore, true);
            if (!blRc)
            {
                throw new PrivilegeNotHeldException(TokenManipulation.Restore);
            }
              
 
            // Open a registry which I don't own
             
            RegistryKey OwnerShipByPass = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\WdFilter", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.TakeOwnership);
           
            RegistrySecurity regSecTempo = OwnerShipByPass.GetAccessControl(AccessControlSections.All);
 
            // Get the real owner
             
            IdentityReference oldId = regSecTempo.GetOwner(typeof(SecurityIdentifier));
            SecurityIdentifier siTrustedInstaller = new SecurityIdentifier(oldId.ToString());
            //Console.WriteLine(oldId.ToString());
 
            // process user become the owner
            
            regSecTempo.SetOwner(id.User);
            OwnerShipByPass.SetAccessControl(regSecTempo);
 
            RegistryAccessRule regARFullAccess = new RegistryAccessRule(id.User, RegistryRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow);
 
            regSecTempo.AddAccessRule(regARFullAccess);
            OwnerShipByPass.SetAccessControl(regSecTempo);
 
 
            #region Write to Registry (Disable  Defender and Tamper)
            DisableFender(true,true); // disable tamper and defender
            #endregion
 
            regSecTempo.SetOwner(siTrustedInstaller);
            OwnerShipByPass.SetAccessControl(regSecTempo);
 
            // Put back the original Rights
 
            regSecTempo.RemoveAccessRule(regARFullAccess);
            OwnerShipByPass.SetAccessControl(regSecTempo);
 
        }
        catch (Exception)
        {
            //MessageBox.Show(ex.ToString());
        }
    }
    #endregion
}
#endregion
Если приложение или служба запущена которая отвечает за раздел реестра, он не может изменить ничего, но если мы остановим службу или процесс тогда мы можем поменять владельца

Единственное что нужно, это при смене владельца добавить в разрешение группу администратор. Буду сейчас разбираться и искать решение
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
08.09.2024, 12:22
pafka1997, какая конечная цель в итоге: манипулировать своими созданными разделами/ключами или уже имеющимися виндовыми?
Цитата Сообщение от pafka1997 Посмотреть сообщение
но если мы остановим службу
Неудобство номер раз..
Цитата Сообщение от pafka1997 Посмотреть сообщение
нужно, это при смене владельца добавить в разрешение группу администратор
Неудобство номер два..
Фактически, это не меняет ничего из первоначальной задачи, а значит, проблемы у пользователей будут гарантированно.

Думаю, надо идти в другом направлении: выявлять текущие права пользователя, и если их "хватает", то код и так выполнится, без этих плясок с TokenManipulation. А если не хватает, то... тут варианты. Но думаю, не каждому понравится лезть руками в политики безопасности и что-то там менять. Тем более останавливать/перезапускать службы. Удобство от такого приложения будет стремится к 0.

В Win7 было немного попроще с этим, а вот в win10 и выше, смотрю, с этим уже накручено.. Надо изучать.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
08.09.2024, 13:06  [ТС]
wizard41, нет, можно службы отключать при помощи шарпа, да и к примеру дефендер если отключить тогда мы можем изменить владельца, но почему то не добавляется в права админ, а в ручную все можно добавить. Я как разберусь скину варианты и если не получится, я займусь запуском cmd от имени системы
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
08.09.2024, 13:19
Цитата Сообщение от pafka1997 Посмотреть сообщение
можно службы отключать при помощи шарпа
я понимаю что можно. Но так же понимаю, что это весьма не безопасно. Я бы не стал таким приложением пользоваться точно.. )
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.09.2024, 14:03
Цитата Сообщение от pafka1997 Посмотреть сообщение
#region TrustedInstaller Permission ByPass Class
Данный код аналогичен тому на который я уже ссылался. И у меня он точно также не работает падая на вызове SetOwner. Но в нем есть и новый кусочек паззла - служба (драйвер) WdFilter. Буду гуглить про него.

Цитата Сообщение от pafka1997 Посмотреть сообщение
при смене владельца добавить в разрешение группу администратор.
Какое разрешение?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3389 / 2708 / 574
Регистрация: 04.09.2018
Сообщений: 8,527
Записей в блоге: 3
08.09.2024, 17:03
...
Структура учетных записей у вин7 и вин 10 значительно отличается, особенно встроенной учетки "Администратор" у десятки.
Установил VM, на нее накатил новенькую чистую "десятку", т.е. в ней априори отсутствует какой-либо софт, который способен изменить что-то подпольно.
Ни каким образом не удалось изменить параметр в ветке реестра, даже при "Запуске от имени..." и прочих плясок, в т.ч. с приведенными способами.
Создание второй учетки из под встроенной админской не принесло результата, что в общем то было ожидаемо.

От сюда пока вывод такой: все зависит от того, кто запускает приложение и с какими правами. Если прав нет, то ничего не выйдет. А если есть, то все эти "способы" не нужны.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 432
09.09.2024, 06:51  [ТС]
OwenGlendower, ну владельца меняет, но не добавляет учетную записи в права доступа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2024, 06:51
Помогаю со студенческими работами здесь

Как удалить содержимое ветки реестра
Всем доброго здравия. Подскажите как на C# удалить содержимое ветки реестра HKLM\SYSTEM\CurrentContolSet\Enum\USBSTOR

Мониторинг ветки реестра
Есть ветка HKEY_LOCAL_MACHINE\SOFTWARE\Task_Queue\Parameters\Task_Execution_Duration Что нужно написать, чтоб програма после запуска и до...

Права на ветки реестра
В моей программе вывода дерева для ветки реестра HKLM\\SYSTEM\\CurrentControlSet\\Enum\\USB при попытке получить подключи веток Properties...

Получение имени ветки реестра
подскажите как получить имя вложенной ветки реестра например есть есть ветка реестра HKEY_CURRENT_USER\\SOFTWARE\\Yandex\\{name} - тут...

Вывести все ветки реестра
Как вывести все ветки реестра. А также открыть вывести папки что вложены в каждую ветку? Есть метод RegistryKey.GetSubKeyNames - Ссылка на...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru