访问;HKEY“本地机器”;用C语言从服务器端调用客户端pc#

访问;HKEY“本地机器”;用C语言从服务器端调用客户端pc#,c#,C#,我已经在C#中构建了一个代码来获取本地系统的产品密钥,问题是获取在具有连接的域下连接的所有系统的产品密钥 连接文件 产品密钥 RegistryKey localKey; if(Environment.is64位操作系统) { localKey=RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64); } 其他的 { localKey=RegistryKey.OpenBaseKey(RegistryHiv

我已经在C#中构建了一个代码来获取本地系统的产品密钥,问题是获取在具有连接的域下连接的所有系统的产品密钥

连接文件 产品密钥
RegistryKey localKey;
if(Environment.is64位操作系统)
{
localKey=RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);
}
其他的
{
localKey=RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry32);
}
var value=(字节[])localKey.OpenSubKey(@“SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Registration\{90140000-0011-0000-0000-0000000 ff1ce}”).GetValue(“DigitalProductId”);
var digitalProductId=值;
变量isWin8OrUp=
(Environment.OSVersion.Version.Major==6&&Environment.OSVersion.Version.Minor>=2)
||
(Environment.OSVersion.Version.Major>6);
var productKey=isWin8OrUp?DecodeProductKeyWin8AndUp(digitalProductId):DecodeProductKey(digitalProductId);
localKey.Close();
返回productKey;
}
公共静态字符串DecodeProductKey(字节[]digitalProductId)
{
常数int keyStartIndex=52;
const int keyEndIndex=keyStartIndex+15;
变量位数=新[]
{
‘B’、‘C’、‘D’、‘F’、‘G’、‘H’、‘J’、‘K’、‘M’、‘P’、‘Q’、‘R’,
‘T’、‘V’、‘W’、‘X’、‘Y’、‘2’、‘3’、‘4’、‘6’、‘7’、‘8’、‘9’,
};
const int decodeLength=29;
const int decodeStringLength=15;
var decodedChars=新字符[decodedLength];
var hexPid=new ArrayList();
对于(变量i=keyStartIndex;i=0;i--)
{
//每六个字符是一个分隔符。
如果((i+1)%6==0)
{
decodedChars[i]='-';
}
其他的
{
//进行实际解码。
var digitMapIndex=0;
对于(var j=decodeStringLength-1;j>=0;j--)
{
变量字节值=(digitMapIndex=0;i--)
{
无功电流=0;
对于(var j=14;j>=0;j--)
{
电流=电流*256;
当前=digitalProductId[j+键偏移]+当前;
digitalProductId[j+keyOffset]=(字节)(当前/24);
电流=电流%24;
last=当前值;
}
键=数字[当前]+键;
}
var keypart1=键子串(1,最后一个);
var keypart2=key.Substring(最后一个+1,key.Length-(最后一个+1));
键=键部件1+“N”+键部件2;
对于(变量i=5;i
在运行上述代码时,它不会从从域到达的指定IP地址获取产品密钥。它会获取运行代码的当前系统的产品密钥

public static string GetWindowsProductKey() {
  RegistryKey environmentKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "SOMANATHAN", RegistryView.Default).OpenSubKey(@ "SOFTWARE\Microsoft\Windows NT\CurrentVersion");

  var isWin8OrUp =
    (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2) ||
    (Environment.OSVersion.Version.Major > 6);

  var productKey = isWin8OrUp ? DecodeProductKeyWin8AndUp(digitalProductId) : DecodeProductKey(digitalProductId);
  environmentKey.Close();
  return productKey;
}
在Registrykey环境中的循环中传递系统用户名

示例:而不是
somanathan
如果系统名称为
Ravi
则通过
Ravi
获取域中连接的windows的产品密钥

注意:还可以在系统中启用RPC服务

在Registrykey环境中的循环中传递系统用户名

示例:而不是
somanathan
如果系统名称为
Ravi
则通过
Ravi
获取域中连接的windows的产品密钥


注意:还可以在系统中启用RPC服务。

这可能需要在所有适用的工作站上运行远程注册表服务。这可能需要在所有适用的工作站上运行远程注册表服务。
    RegistryKey localKey;
    if (Environment.Is64BitOperatingSystem)
    {
        localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
    }
    else
    {
        localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
    }

    var value = (byte[])localKey.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Registration\{90140000-0011-0000-0000-0000000FF1CE}").GetValue("DigitalProductId");

    var digitalProductId = value;

    var isWin8OrUp =
        (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2)
        ||
        (Environment.OSVersion.Version.Major > 6);

    var productKey = isWin8OrUp ? DecodeProductKeyWin8AndUp(digitalProductId) : DecodeProductKey(digitalProductId);
    localKey.Close();
    return productKey;
}

public static string DecodeProductKey(byte[] digitalProductId)
{
    const int keyStartIndex = 52;
    const int keyEndIndex = keyStartIndex + 15;
    var digits = new[]
    {
    'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R',
    'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
    };
    const int decodeLength = 29;
    const int decodeStringLength = 15;
    var decodedChars = new char[decodeLength];
    var hexPid = new ArrayList();
    for (var i = keyStartIndex; i <= keyEndIndex; i++)
    {
        hexPid.Add(digitalProductId[i]);
    }
    for (var i = decodeLength - 1; i >= 0; i--)
    {
        // Every sixth char is a separator.
        if ((i + 1) % 6 == 0)
        {
            decodedChars[i] = '-';
        }
        else
        {
            // Do the actual decoding.
            var digitMapIndex = 0;
            for (var j = decodeStringLength - 1; j >= 0; j--)
            {
                var byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
                hexPid[j] = (byte)(byteValue / 24);
                digitMapIndex = byteValue % 24;
                decodedChars[i] = digits[digitMapIndex];
            }
        }
    }
    return new string(decodedChars);
}

public static string DecodeProductKeyWin8AndUp(byte[] digitalProductId)
{
    var key = String.Empty;
    const int keyOffset = 52;
    var isWin8 = (byte)((digitalProductId[66] / 6) & 1);
    digitalProductId[66] = (byte)((digitalProductId[66] & 0xf7) | (isWin8 & 2) * 4);

    const string digits = "BCDFGHJKMPQRTVWXY2346789";
    int last = 0;
    for (var i = 24; i >= 0; i--)
    {
        var current = 0;
        for (var j = 14; j >= 0; j--)
        {
            current = current * 256;
            current = digitalProductId[j + keyOffset] + current;
            digitalProductId[j + keyOffset] = (byte)(current / 24);
            current = current % 24;
            last = current;
        }
        key = digits[current] + key;
    }

    var keypart1 = key.Substring(1, last);
    var keypart2 = key.Substring(last + 1, key.Length - (last + 1));
    key = keypart1 + "N" + keypart2;

    for (var i = 5; i < key.Length; i += 6)
    {
        key = key.Insert(i, "-");
    }

    return key;
}
public static string GetWindowsProductKey() {
  RegistryKey environmentKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "SOMANATHAN", RegistryView.Default).OpenSubKey(@ "SOFTWARE\Microsoft\Windows NT\CurrentVersion");

  var isWin8OrUp =
    (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2) ||
    (Environment.OSVersion.Version.Major > 6);

  var productKey = isWin8OrUp ? DecodeProductKeyWin8AndUp(digitalProductId) : DecodeProductKey(digitalProductId);
  environmentKey.Close();
  return productKey;
}