VB.NET - Проверка состояния лицензии Windows или для подлинной Windows - PullRequest
1 голос
/ 27 декабря 2011

Здравствуйте, отвечающий на вопрос, человек удивительный!

Я пытаюсь найти способ точно проверить, использует ли в настоящее время машина Windows 7 активную лицензию и активирована.Я полагаю, что могу запустить команду «cmd.exe» для запуска cscript (slmgr) и анализа этой информации, но это кажется неэффективным методом.

Я столкнулся с неуправляемым Windows API, называемым SLGetGenuineInformation (http://msdn.microsoft.com/en-us/library/windows/desktop/bb648650%28v=vs.85%29.aspx) однако я не знаю, как вызывать это в VB.NET или какими должны быть типы переменных.Я полагаю, что VB6 поставлялся с каким-то APIViewer, который Visual STudio 2010, похоже, не содержит.

Все релевантные поисковые запросы Google оказываются нерелевантными результатами.

Любые предложения, советы или рекомендации о том, как выполнить или достичь этой цели?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Проверьте этот пример консольного приложения vb.net, которое использует функцию SLIsGenuineLocal.

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
0 голосов
/ 27 декабря 2011

Если это поможет, это пример VC ++

#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;
}

Вот VB Sript, который делает это:

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

Источник: Как проверить, является ли версия Windows подлинной или нет?

Если вы хотите прочитать его непосредственно из регистра ОС, вы можете прочитать его, используя VB для работы с регистром здесь: http://www.codeproject.com/KB/vb/registry_with_vb.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...