我想将所有管理员的壁纸更改为我定义的壁纸(更改注册表值足以满足我的目的)。
我的想法是获取所有个人资料并搜索所有管理员:
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不适合我提前管理员SID。
如何从管理员处获得匹配的HKEY_USERS
SID?
IE。对于管理员资料:
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来自哪里?)感谢。
答案 0 :(得分:0)
您可以通过使用LDAP查询枚举“管理员”组中的所有用户,而不是在注册表中查找用户并检查他们是否在“管理员”中。
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);
}
}
}
答案 1 :(得分:0)
我使用了以下解决方法:
string adminKey = Registry.Users.GetSubKeyNames()
.FirstOrDefault(key => key.StartsWith(sid.AccountDomainSid.Value) && char.IsDigit(key[key.Length - 1]));
if (adminKey != null) // ...