更改所有“管理员”壁纸

本文关键字:管理员 壁纸 | 更新日期: 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) // ...