Определите подлинный Windows Installation в C#

Я также использовал StatSVN. Он предоставляет полезную статистику (посмотрите пример выходных данных для Ant ), но он требует, чтобы вы уже выполнили svnlog хранилища и имели рабочую копию, извлеченную для выполнения анализа.

8
задан RRUZ 30 September 2010 в 21:10
поделиться

2 ответа

Обновление

Когда я отвечал на этот вопрос, я отвечал в контексте языка спрашивающего (C #). Как заметил другой респондент, есть способ сделать это на других языках, но он зависит от платформы (Vista и выше, насколько я вижу).

Старый ответ (Уточнено)

Насколько я знаю, документации по API для WGA нет (по-прежнему актуально), и поскольку хакеры могли (и могли) взломать WGA, зная его внутреннее устройство, я сомневаюсь, что Microsoft собирается открыть API для WGA.

У Microsoft есть отдельный API. для разработки на C ++ и COM, как этот ответ указывает, но ничего не доступно в. NET Framework, которую я вижу.

На самом деле, нет никаких оснований выяснять это. Программа не должна знать, установлена ​​ли ОС легально.

Править

Оставить свой ответ, так как я не могу его удалить; но если вы хотите использовать Win32 API и не должны оставаться внутри .NET Framework, я предлагаю использовать этот ответ .

1
ответ дан 5 December 2019 в 08:53
поделиться

Вы можете использовать SLIsGenuineLocal (проверяет, является ли указанное приложение подлинной установкой Windows), поддерживаемый минимум клиент - Windows Vista.

API лицензирования программного обеспечения , API лицензирования программного обеспечения (SLAPI) можно использовать для определения подлинной установки Microsoft Windows, установки и регистрации лицензии на управление активами, а также для получения информации о политике лицензирования программного компонента.

ОБНОВЛЕНИЕ , Я написал это основное Реализация C #

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication11
{
  using SLID = Guid; //SLID id declarated as typedef GUID SLID; in slpublic.h 

  class Program
  {

    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_OFFLINE          = 3,
      SL_GEN_STATE_LAST             = 4
    }

    [DllImportAttribute("Slwga.dll", EntryPoint = "SLIsGenuineLocal", CharSet = CharSet.None, ExactSpelling = false, SetLastError = false, PreserveSig = true, CallingConvention = CallingConvention.Winapi, BestFitMapping = false, ThrowOnUnmappableChar = false)]
    [PreserveSigAttribute()]
    internal static extern uint SLIsGenuineLocal(ref SLID slid, [In, Out] ref SL_GENUINE_STATE genuineState, IntPtr val3);


    public static bool IsGenuineWindows()
    {
        bool _IsGenuineWindows   = false;
        Guid ApplicationID       = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); //Application ID GUID http://technet.microsoft.com/en-us/library/dd772270.aspx
        SLID windowsSlid = (Guid)ApplicationID;  
        try
        {
          SL_GENUINE_STATE genuineState = SL_GENUINE_STATE.SL_GEN_STATE_LAST;
          uint ResultInt                = SLIsGenuineLocal(ref windowsSlid, ref genuineState, IntPtr.Zero);
          if (ResultInt == 0)
          {
            _IsGenuineWindows = (genuineState == SL_GENUINE_STATE.SL_GEN_STATE_IS_GENUINE);
          }
          else
          {
            Console.WriteLine("Error getting information {0}", ResultInt.ToString());          
          }

        }
        catch (Exception ex)
        {
          Console.WriteLine(ex.Message);
        }
        return _IsGenuineWindows;
    }    

    static void Main(string[] args)
    {
      if (Environment.OSVersion.Version.Major >= 6) //Version 6 can be Windows Vista, Windows Server 2008, or Windows 7
      {
        if (IsGenuineWindows())
        {
          Console.WriteLine("Original Windows");        
        }
        else
        {
          Console.WriteLine("Not Original Windows");                
        }
      }
      else
      {
        Console.WriteLine("OS Not supoprted");     
      }
      Console.ReadLine();
    }
  }
}
18
ответ дан 5 December 2019 в 08:53
поделиться