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