Получите уникальные системные идентификаторы в C#

Проверьте немного в произвольном местоположении в переменной произвольного типа:

#define bit_test(x, y)  ( ( ((const char*)&(x))[(y)>>3] & 0x80 >> ((y)&0x07)) >> (7-((y)&0x07) ) )

Демонстрационное использование:

int main(void)
{
    unsigned char arr[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };

    for (int ix = 0; ix < 64; ++ix)
        printf("bit %d is %d\n", ix, bit_test(arr, ix));

    return 0;
}

Примечания: Это разработано, чтобы быть быстрым (учитывая его гибкость) и неразветвленным. Это приводит к эффективному машинному коду SPARC когда скомпилированный Sun Studio 8; я также протестировал его с помощью MSVC ++ 2008 на amd64. Возможно сделать подобные макросы для установки и очистки битов. Основное отличие этого решения по сравнению со многими другими здесь - то, что оно работает на любое местоположение в в значительной степени любом типе переменной.

6
задан Alex 20 August 2009 в 21:30
поделиться

6 ответов

Вот хорошее начало с WMI ...

// Win32_CPU will work too
var search = new ManagementObjectSearcher( "SELECT * FROM Win32_baseboard" );
var mobos = search.Get();

foreach (var m in mobos)
{
  var serial = m["SerialNumber"]; // ProcessorID if you use Win32_CPU
}

Вы можете сделать это с множеством аппаратных средств и придумать решение.

9
ответ дан 8 December 2019 в 03:54
поделиться

Вы можете использовать пространство имен System.Management , чтобы получить всю информацию, относящуюся к оборудованию, идентификатору процессора, MAC-адресам и многим другим данным, которые затем можно хэшировать вместе.

Взгляните на эту статью:

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

8
ответ дан 8 December 2019 в 03:54
поделиться

Предполагая, что вы говорите о Windows, тогда каждая установка Windows имеет уникальный идентификатор продукта (который можно увидеть, просмотрев свойства «Мой компьютер»). Я думаю, что это хранится в HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion: ProductId (REG_SZ) . Я так понимаю, вы хотите большего?

5
ответ дан 8 December 2019 в 03:54
поделиться

Вы можете изучить использование GUID

Что такое GUID

Для тех из вас, кто не знает, GUID (произносится goo'id - глобальный уникальный идентификатор ) - это 128-битное целое число, которое можно использовать для однозначной идентификации чего-либо. Вы можете хранить пользователей или продукты в своей базе данных, и вам нужно каким-то образом однозначно идентифицировать каждую строку в базе данных. Распространенным подходом является создание автоматически увеличивающегося целого числа, другим способом было бы создание GUID для ваших продуктов.

Как создать GUID в C #

Метод GUID можно найти в пространстве имен System. Метод GUID System.Guid.NewGuid () инициализирует новый экземпляр класса GUID.

Есть также несколько перегрузок, доступных для тех из вас, кто хочет отформатировать GUID определенным образом.

Следующий живой пример выведет сгенерированный GUID, исходный код также ниже.

Response.Write(@"<br>System.Guid.NewGuid().ToString() = " + System.Guid.NewGuid().ToString());
Response.Write(@"<br>System.Guid.NewGuid().ToString(""N"") = " + System.Guid.NewGuid().ToString("N"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""D"") = " + System.Guid.NewGuid().ToString("D"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""B"") = " + System.Guid.NewGuid().ToString("B"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""P"") = " + System.Guid.NewGuid().ToString("P"));
1
ответ дан 8 December 2019 в 03:54
поделиться

MAC-адрес сетевой карты:

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    // probably need to do some filtering on ni.NetworkInterfaceType here
    Console.WriteLine(ni.GetPhysicalAddress());
}
2
ответ дан 8 December 2019 в 03:54
поделиться

Вы можете использовать WMI с C #, чтобы получить довольно много информации об аппаратном обеспечении.

Идентификаторы жесткого диска и MAC-адрес Ethernet - это два общих уникальных идентификатора, используемых в схемах идентификации системы. Теоретически MAC-адрес уникален для каждой сетевой карты.

2
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: