Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature currently requires accessing the site using the built-in Safari browser.
Подмонтировать к реестру.Вопрос как изменить привилегии в этих hiv файлах?
reg load hku\Temp hkcu.hiv
:: код для смены прав (нужно скорректировать путь по отношению к ветви hku\Temp)
reg unload hku\Temp
Dragokas, а на скрипт перевести можно?Пример, как изменить права есть здесь:
Что именно перевести, как смонтировать hiv, или как изменить права?Dragokas, а на скрипт перевести можно?
'On Error Resume Next
Dim oWMI, UC, oStdReg, CurSID, AdmSID, objSD, SID, i
Const FILE_WRITE_DATA = 2
Const ACE_ALLOW = 0
Const ACE_DENY = 1
Const HKCU = &H80000001
UC = "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.zip\UserChoice"
set oShell = CreateObject("WScript.Shell")
Set oStdReg = GetObject("winmgmts:{impersonationLevel=Impersonate, (Security)}!\\.\root\default:StdRegProv") ' grant SeSecurityPrivilege
Set oWMI = GetObject("winmgmts:\\.\Root\CIMV2")
CurSID = oWMI.Get("Win32_UserAccount.Domain='" & oShell.ExpandEnvironmentStrings("%UserDomain%") & "',Name='" & oShell.ExpandEnvironmentStrings("%UserName%") & "'").SID
AdmSID = "S-1-5-32-544"
'Извлекаем дескриптор безопасности
'Set objSD = oWMI.Get("Win32_SecurityDescriptor").SpawnInstance_()
oStdReg.GetSecurityDescriptor HKCU, UC, objSD
If Not IsNull(objSD.DACL) Then
'Перечисляем все списки избирательного доступа из дескриптора безопасности
For i = 0 to UBound(objSD.DACL)
'получаем SID пользователя в этом DACL
SID = objSD.DACL(i).Trustee.SIDString
'если это SID локального администратора или SID текущего пользователя
if ((SID = CurSID) or (SID = AdmSID)) then
'если устанавливалась привилегия на запись данных
if (objSD.DACL(i).AccessMask And FILE_WRITE_DATA) then
'если эта привилегия содержит запрет
if (objSD.DACL(i).AceType = ACE_DENY) then
'изменить привилегию на разрешительную
objSD.DACL(i).AceType = ACE_ALLOW
end if
end if
end if
next
end if
'записать дескриптор безопасности обратно
oStdReg.SetSecurityDescriptor HKCU, UC, objSD
set oStdReg = Nothing
set oWMI = Nothing
Что именно перевести, как смонтировать hiv, или как изменить права?
Смонтировать только через WinAPI или reg.exe, а на счёт прав можно и скриптом, только смотря, что конкретно ты хочешь поменять...
Вот пример, как я изменял права с запрета на разрешение:
VB.NET / VBA:'On Error Resume Next Dim oWMI, UC, oStdReg, CurSID, AdmSID, objSD, SID, i Const FILE_WRITE_DATA = 2 Const ACE_ALLOW = 0 Const ACE_DENY = 1 Const HKCU = &H80000001 UC = "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.zip\UserChoice" set oShell = CreateObject("WScript.Shell") Set oStdReg = GetObject("winmgmts:{impersonationLevel=Impersonate, (Security)}!\\.\root\default:StdRegProv") ' grant SeSecurityPrivilege Set oWMI = GetObject("winmgmts:\\.\Root\CIMV2") CurSID = oWMI.Get("Win32_UserAccount.Domain='" & oShell.ExpandEnvironmentStrings("%UserDomain%") & "',Name='" & oShell.ExpandEnvironmentStrings("%UserName%") & "'").SID AdmSID = "S-1-5-32-544" 'Извлекаем дескриптор безопасности 'Set objSD = oWMI.Get("Win32_SecurityDescriptor").SpawnInstance_() oStdReg.GetSecurityDescriptor HKCU, UC, objSD If Not IsNull(objSD.DACL) Then 'Перечисляем все списки избирательного доступа из дескриптора безопасности For i = 0 to UBound(objSD.DACL) 'получаем SID пользователя в этом DACL SID = objSD.DACL(i).Trustee.SIDString 'если это SID локального администратора или SID текущего пользователя if ((SID = CurSID) or (SID = AdmSID)) then 'если устанавливалась привилегия на запись данных if (objSD.DACL(i).AccessMask And FILE_WRITE_DATA) then 'если эта привилегия содержит запрет if (objSD.DACL(i).AceType = ACE_DENY) then 'изменить привилегию на разрешительную objSD.DACL(i).AceType = ACE_ALLOW end if end if end if next end if 'записать дескриптор безопасности обратно oStdReg.SetSecurityDescriptor HKCU, UC, objSD set oStdReg = Nothing set oWMI = Nothing
Если нужно добавить привилегии для нового пользователя, то будет совсем по-другому.
1) Это не VB.NET, а vbs-файл (просто тема подсветки такая).vb.net не знаю
reg save
А... это вы с той загадочной темыИли может вы расшифруете ""Изменения в списке привилегий с помощью прямой манипуляций с hive-ами""
Есть. И не только на Microsoft. Есть и по-лучше. Только там в основном всё на английском.может есть ссылка на документацию в Microsoft или на языках c++/c#?
Хотелось бы узнать как-то можно узнать какие права имеет запрашиваемая ветвь реестра?
Через консоль, например CMD можно используя WMI: GetSecurityDescriptor method of the StdRegProv class (Windows)Желательно через консоль
WMIC /NameSpace:\\root\default Class StdRegProv Call GetSecurityDescriptor hDefKey="&H80000002" sSubKeyName="Software"
Идет выполнение (StdRegProv)->GetSecurityDescriptor()
Метод успешно вызван.
Параметры вывода:
instance of __PARAMETERS
{
Descriptor =
instance of __SecurityDescriptor
{
ControlFlags = 39956;
DACL = {
instance of __ACE
{
AccessMask = 131097;
AceFlags = 0;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Пользователи";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 33, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-545";
};
},
instance of __ACE
{
AccessMask = 2147483648;
AceFlags = 10;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Пользователи";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 33, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-545";
};
},
instance of __ACE
{
AccessMask = 983103;
AceFlags = 0;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Администраторы";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-544";
};
},
instance of __ACE
{
AccessMask = 268435456;
AceFlags = 10;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Администраторы";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-544";
};
},
instance of __ACE
{
AccessMask = 983103;
AceFlags = 0;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "NT AUTHORITY";
Name = "СИСТЕМА";
SID = {1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0};
SidLength = 12;
SIDString = "S-1-5-18";
};
},
instance of __ACE
{
AccessMask = 268435456;
AceFlags = 10;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "NT AUTHORITY";
Name = "СИСТЕМА";
SID = {1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0};
SidLength = 12;
SIDString = "S-1-5-18";
};
},
instance of __ACE
{
AccessMask = 983103;
AceFlags = 0;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Администраторы";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-544";
};
},
instance of __ACE
{
AccessMask = 268435456;
AceFlags = 10;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "";
Name = "СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ";
SID = {1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0};
SidLength = 12;
SIDString = "S-1-3-0";
};
},
instance of __ACE
{
AccessMask = 131097;
AceFlags = 0;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "ЦЕНТР ПАКЕТОВ ПРИЛОЖЕНИЙ";
Name = "ВСЕ ПАКЕТЫ ПРИЛОЖЕНИЙ";
SID = {1, 2, 0, 0, 0, 0, 0, 15, 2, 0, 0, 0, 1, 0, 0, 0};
SidLength = 16;
SIDString = "S-1-15-2-1";
};
},
instance of __ACE
{
AccessMask = 2147483648;
AceFlags = 10;
AceType = 0;
Trustee =
instance of __Trustee
{
Domain = "ЦЕНТР ПАКЕТОВ ПРИЛОЖЕНИЙ";
Name = "ВСЕ ПАКЕТЫ ПРИЛОЖЕНИЙ";
SID = {1, 2, 0, 0, 0, 0, 0, 15, 2, 0, 0, 0, 1, 0, 0, 0};
SidLength = 16;
SIDString = "S-1-15-2-1";
};
}};
Group =
instance of __Trustee
{
Domain = "NT AUTHORITY";
Name = "СИСТЕМА";
SID = {1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0};
SidLength = 12;
SIDString = "S-1-5-18";
};
Owner =
instance of __Trustee
{
Domain = "BUILTIN";
Name = "Администраторы";
SID = {1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
SidLength = 16;
SIDString = "S-1-5-32-544";
};
SACL = {};
};
ReturnValue = 0;
};
Псевдокодом:или средствами WinApi
Очень много не понятной информации выходит)Через консоль, например CMD можно используя WMI: GetSecurityDescriptor method of the StdRegProv class (Windows)
Пример команды для HKLM\Software (запускать с повышенными привилегиями):
1 - Administrators Full Access
2 - Administrators Read Access
3 - Administrators Read and Write Access
4 - Administrators Read, Write and Delete Access
5 - Creator Full Access
6 - Creator Read and Write Access
7 - World Full Access
8 - World Read Access
9 - World Read and Write Access
10 - World Read, Write and Delete Access
11 - Power Users Full Access
12 - Power Users Read and Write Access
13 - Power Users Read, Write and Delete Access
14 - System Operators Full Access
15 - System Operators Read and Write Access
16 - System Operators Read, Write and Delete Access
17 - System Full Access
18 - System Read and Write Access
19 - System Read Access
20 - Administrators Read, Write and Execute Access
21 - Interactive User Full Access
22 - Interactive User Read and Write Access
23 - Interactive User Read, Write and Delete Access
case 'r': //registry
if ((pace->Mask & KEY_QUERY_VALUE) == KEY_QUERY_VALUE)
wprintf(L".................... KEY_QUERY_VALUE: 0x%X\n", KEY_QUERY_VALUE);
if ((pace->Mask & KEY_SET_VALUE) == KEY_SET_VALUE)
wprintf(L".................... KEY_SET_VALUE: 0x%X\n", KEY_SET_VALUE);
if ((pace->Mask & KEY_CREATE_SUB_KEY) == KEY_CREATE_SUB_KEY)
wprintf(L".................... KEY_CREATE_SUB_KEY: 0x%X\n", KEY_CREATE_SUB_KEY);
if ((pace->Mask & KEY_ENUMERATE_SUB_KEYS) == KEY_ENUMERATE_SUB_KEYS)
wprintf(L".................... KEY_ENUMERATE_SUB_KEYS: 0x%X\n", KEY_ENUMERATE_SUB_KEYS);
if ((pace->Mask & KEY_NOTIFY) == KEY_NOTIFY)
wprintf(L".................... KEY_NOTIFY: 0x%X\n", KEY_NOTIFY);
if ((pace->Mask & KEY_CREATE_LINK) == KEY_CREATE_LINK)
wprintf(L".................... KEY_CREATE_LINK: 0x%X\n", KEY_CREATE_LINK);
if ((pace->Mask & KEY_WOW64_32KEY) == KEY_WOW64_32KEY)
wprintf(L".................... KEY_WOW64_32KEY: 0x%X\n", KEY_WOW64_32KEY);
if ((pace->Mask & KEY_WOW64_64KEY) == KEY_WOW64_64KEY)
wprintf(L".................... KEY_WOW64_64KEY: 0x%X\n", KEY_WOW64_64KEY);
if ((pace->Mask & KEY_WOW64_RES) == KEY_WOW64_RES) // what is this?
wprintf(L".................... KEY_WOW64_RES: 0x%X\n", KEY_WOW64_RES);
if ((pace->Mask & KEY_READ) == KEY_READ)
wprintf(L".................... KEY_READ: 0x%X\n", KEY_READ);
if ((pace->Mask & KEY_WRITE) == KEY_WRITE)
wprintf(L".................... KEY_WRITE: 0x%X\n", KEY_WRITE);
if ((pace->Mask & KEY_EXECUTE) == KEY_EXECUTE)
wprintf(L".................... KEY_EXECUTE: 0x%X\n", KEY_EXECUTE);
if ((pace->Mask & KEY_ALL_ACCESS) == KEY_ALL_ACCESS)
wprintf(L".................... KEY_ALL_ACCESS: 0x%X\n", KEY_ALL_ACCESS);
break;