New
#1
Reading windows 10 key from bios
I work for a company that we get vendor pc's all the time. We need to be able to get the key from the bios and from the registry. With this we can then see if there is a key in the bios and if it is being used in the OS...
example will be vendors sending in Windows 7 pc's but win10 key is in bios... we know we can attempt to upgrade.
thanks for any help...
I have a teste machine that RW and oem_key.exe work and show my key in the bios. This key is different than what is in the OS.
from googling and trying various things... it seems that I thought I had it but it doesnt work.
here is the code I am using and top part is for bios key and bottom lengthy part is from the registry...
On Error Resume Next
strGetKey = "Not in Bios"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from SoftwareLicensingService")
For Each objItem in colItems
Set GetOSKey = objItem.OA3xOriginalProductKey
Next
If GetOSKey = "" Then
GetOSKey = strGetKey
End If
Dim objshell,path,DigitalID, Result
Set objshell = CreateObject("WScript.Shell")
'Set registry key path
Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
'Registry key value
DigitalID = objshell.RegRead(Path & "DigitalProductId")
Dim ProductName,ProductID,ProductKey,ProductData
'Get ProductName, ProductID, ProductKey
ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
ProductKey = "Installed Key: " & ConvertToKey(DigitalID)
ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey & vbNewLine & "Key in Bios: " & GetOSKey
MsgBox(ProductData)
'MsgBox(GetOSKey)
'Convert binary to chars
Function ConvertToKey(Key)
Const KeyOffset = 52
Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
'Check if OS is Windows 8
isWin8 = (Key(66) \ 6) And 1
Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
i = 24
Maps = "BCDFGHJKMPQRTVWXY2346789"
Do
Current= 0
j = 14
Do
Current = Current* 256
Current = Key(j + KeyOffset) + Current
Key(j + KeyOffset) = (Current \ 24)
Current=Current Mod 24
j = j -1
Loop While j >= 0
i = i -1
KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
Last = Current
Loop While i >= 0
If (isWin8 = 1) Then
keypart1 = Mid(KeyOutput, 2, Last)
insert = "N"
KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then KeyOutput = insert & KeyOutput
End If
ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
End Function