更改所有“管理员”壁纸
本文关键字:管理员 壁纸 | 更新日期: 2023-09-27 18:17:00
我想将所有管理员的壁纸更改为我定义的墙纸(更改注册表值足以满足我想要做的事情)。
我的想法是得到所有的配置文件和搜索所有的管理员到它:
foreach (var sid in Registry.LocalMachine.OpenSubKey(@"SOFTWARE'Microsoft'Windows NT'CurrentVersion'ProfileList")
.GetSubKeyNames().Select(profile => new SecurityIdentifier(profile)))
{
if (sid.IsWellKnown(WellKnownSidType.AccountAdministratorSid)
|| sid.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid))
{
// Is admin
}
}
它工作得很好,除了存储在HKEY_USERS
中的SID与我前面得到的Admins SID不匹配。
我如何从我的Admin获得匹配的HKEY_USERS
SID ?
IE。对于Admin配置文件:
- 在
HKEY_LOCAL_MACHINE
: SID是S-1-5-21-A-B-C-500
- 在
HKEY_USERS
中是:S-1-5-21-A-B-C-D
(其中A-B-C适合,但D来自哪里?)
谢谢。
您可以通过LDAP查询枚举'Administrators'组中的所有用户,而不是在注册表中查找用户并检查他们是否在'Administrators'中。
using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group"))
{
foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
{
using (DirectoryEntry memberEntry = new DirectoryEntry(member))
{
Console.WriteLine(memberEntry.Path);
}
}
}
我使用了以下方法:
string adminKey = Registry.Users.GetSubKeyNames()
.FirstOrDefault(key => key.StartsWith(sid.AccountDomainSid.Value) && char.IsDigit(key[key.Length - 1]));
if (adminKey != null) // ...