Zachet
Zachet

Reputation: 47

VB.NET - Checking Windows License State or for Genuine Windows

Hello question answering person of awesomeness!

I am trying to find a way to accurately verify if a Windows 7 machine is currently using an active license and activated. I believe I can initiate a 'cmd.exe' command to run a cscript (slmgr) and parse that information but that seems like an inefficient method.

I have came across an unmanaged windows API called SLGetGenuineInformation ( http://msdn.microsoft.com/en-us/library/windows/desktop/bb648650%28v=vs.85%29.aspx ) however I am not familiar with how to call this in VB.NET or what the variable types should be. I believe VB6 came with some sort of APIViewer that Visual STudio 2010 does not seem to contain.

All relevant Google searches turn up as unrelevant results.

Any suggestions, advice, or guidance on how to proceed or accomplish this goal?

Upvotes: 1

Views: 3077

Answers (2)

RRUZ
RRUZ

Reputation: 136391

Check this sample vb.net console app, that uses the SLIsGenuineLocal function.

Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports SLID = System.Guid
Module Module1

    Public Enum SL_GENUINE_STATE
        SL_GEN_STATE_IS_GENUINE = 0
        SL_GEN_STATE_INVALID_LICENSE = 1
        SL_GEN_STATE_TAMPERED = 2
        SL_GEN_STATE_LAST = 3
    End Enum

    <DllImportAttribute("Slwga.dll", EntryPoint:="SLIsGenuineLocal", CharSet:=CharSet.None, ExactSpelling:=False, SetLastError:=False, PreserveSig:=True, CallingConvention:=CallingConvention.Winapi, _
     BestFitMapping:=False, ThrowOnUnmappableChar:=False)> _
    <PreserveSigAttribute()> _
    Friend Function SLIsGenuineLocal(ByRef slid As SLID, <[In](), Out()> ByRef genuineState As SL_GENUINE_STATE, ByVal val3 As IntPtr) As UInteger
    End Function


    Public Function IsGenuineWindows() As Boolean
        Dim _IsGenuineWindows As Boolean = False
        Dim ApplicationID As New Guid("55c92734-d682-4d71-983e-d6ec3f16059f")
        'Application ID GUID http://technet.microsoft.com/en-us/library/dd772270.aspx
        Dim windowsSlid As SLID = CType(ApplicationID, Guid)
        Try
            Dim genuineState As SL_GENUINE_STATE = SL_GENUINE_STATE.SL_GEN_STATE_LAST
            Dim ResultInt As UInteger = SLIsGenuineLocal(windowsSlid, genuineState, IntPtr.Zero)
            If ResultInt = 0 Then
                _IsGenuineWindows = (genuineState = SL_GENUINE_STATE.SL_GEN_STATE_IS_GENUINE)
            Else
                Console.WriteLine("Error getting information {0}", ResultInt.ToString())

            End If
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Return _IsGenuineWindows
    End Function

    Sub Main()
        If Environment.OSVersion.Version.Major >= 6 Then
            'Version 6 can be Windows Vista, Windows Server 2008, or Windows 7
            If IsGenuineWindows() Then
                Console.WriteLine("Original Windows")
            Else
                Console.WriteLine("Not Original Windows")
            End If
        Else
            Console.WriteLine("OS Not supoprted")
        End If
        Console.ReadLine()
    End Sub

End Module

Upvotes: 2

Sterling Duchess
Sterling Duchess

Reputation: 2080

If it helps this is VC++ example

#include <slpublic.h>
#pragma comment(lib,"Slwga.lib")

bool IsWindowsGenuine()
{
    GUID uid;
    RPC_WSTR rpc=(RPC_WSTR)_T("55c92734-d682-4d71-983e-d6ec3f16059f");
    UuidFromString(rpc,&uid);
    SL_GENUINE_STATE state;
    SLIsGenuineLocal(&uid,&state,NULL);
    if(state==SL_GENUINE_STATE::SL_GEN_STATE_IS_GENUINE)
        return true;
    return false;
}

Here is VB Sript that does it:

trComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colWPA = objWMIService.ExecQuery _
("Select * from Win32_WindowsProductActivation")
For Each objWPA in colWPA
Wscript.Echo "Activation Required: " & objWPA.ActivationRequired
Wscript.Echo "Description: " & objWPA.Description
Wscript.Echo "Product ID: " & objWPA.ProductID
Wscript.Echo "Remaining Evaluation Period: " & _
objWPA.RemainingEvaluationPeriod
Wscript.Echo "Remaining Grace Period: " & objWPA.RemainingGracePeriod
Wscript.Echo "Server Name: " & objWPA.ServerName
Next

Source: How to check if a Windows version is Genuine or not?

If you want to read it directly from OS register you can read upon using VB to work whit register here: http://www.codeproject.com/KB/vb/registry_with_vb.aspx

Upvotes: 0

Related Questions