Guid видеокарты как узнать
Вы определяете новый идентификатор GUID для элемента, который экспортируется драйвером в другие системные компоненты, драйверы или приложения. Например, вы определяете новый идентификатор GUID для пользовательского события PnP на одном из его устройств. Чтобы определить и экспортировать новый идентификатор GUID, необходимо выполнить следующие действия.
Выберите символическое имя для GUID.
Выберите имя, представляющее назначение идентификатора GUID. Например, операционная система использует такие имена, как GUID_BUS_TYPE_PCI и PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID.
Создайте значение для идентификатора GUID, используя Uuidgen.exe или Guidgen.exe. при установке Microsoft Windows SDK автоматически устанавливается Uuidgen.exe. Guidgen.exe доступен на странице загрузки генератора GUID Microsoft Exchange Server .
Определите идентификатор GUID в соответствующем файле заголовка.
Используйте макрос DEFINE_GUID (определенный в гуиддеф. h), чтобы связать символьное имя GUID со своим значением (см. Пример 1).
Пример 1. Определение идентификаторов GUID в файле заголовка GUID-Only
Пример 2. Определение идентификаторов GUID в файле смешанного заголовка
Размещение определения GUID вне инструкций, предотвращающих множественное включение, не приводит к созданию нескольких экземпляров GUID в драйвере, поскольку DEFINE_GUID определяет GUID как переменную EXTERN_C. Несколько объявлений переменной типа EXTERN допускаются, пока типы совпадают.
При создании идентификатора GUID для нового класса установки устройства или класса интерфейса устройстваприменяются следующие правила.
Не используйте один GUID для одновременного задания класса установки устройства и класса интерфейса устройства.
При создании символьного имени для сопоставления с GUID используйте следующее соглашение:
Для классов установки устройств используйте формат GUID_DEVCLASS_xxx.
Для классов интерфейсов устройств используйте формат GUID_DEVINTERFACE_xxx.
В D3D9 был такой параметр у интерфейса адаптера, как DeviceIdentifier, который представлял собой GUID видеокарты. Это легко можно посмотреть в DxDiag или CapsViewer за девятую версию.
В 10 и 11 версиях апи этот параметр был заменён на AdapterLuid, который представляет из себя LUID - т.е. идентификатор, валидный лишь до конца сессии. После перезапуска я не смогу опознать устройство по этому номеру.
Вопрос в следующем: как получить GUID адаптера в direct3d10/11, либо в обход оных?
Nomad
В D3D11/DXGI насколько я знаю GUID'а нет. При определённых манипуляциях его можно извлечь через Setup API, либо через D3D9.
[telepathy]
Если стоит задача рендерить каждый раз на одном и том же адаптере, то GUID для этого плохо подходит. Юзер может обновить драйвера, переставить видеокарту в другой слот и GUID изменится. Лучше запоминать адаптер по device/vendor/revision id.
[/telepathy]
Yamazaru
> [telepathy]
GUID (Globally Unique ID) на то же и гуид, что идентифицирует сущность уникально.
Если у меня Radeon 5770 то это vendor = AMD device = RADEON revision = 5770 (грубо говоря), но два одинаковых Radeon 5770 в системе различить не получится. Или я не прав?
Мне нужно запоминать конкретные девайсы и различать их, даже если они одной модели и вышли с одного завода.
Nomad
Инересная идея. Не знаю но догадываюсь, что никаких уникальных меток на платах просто нет. GUID который там может быть с чем-то ассоциирован генерируется системой при инициализации и от видеокарты никак не зависит.
Nomad
GUID лишь идентифицирует установленное в системе физическое или логическое устройство (не обязательно активное).
Идентифицирует по уникальным параметрам устройства (device/vendor, функции, класс) и по его расположению (PCI/bus_number/device_number/. ).
Device/vendor/subvendor и прочая хардварная информация прошитая на заводе неизменна, а вот класс, функции, расположение зависит от ОС и может изменяться юзером (переставил в соседний слот), либо самой системой (обновление драйверов).
> но два одинаковых Radeon 5770 в системе различить не получится. Или я не прав?
Если они выпущены одной фирмой в одной партии, то официальным "рекомендованным" WinAPI их различить нельзя.
Зачастую можно различить через vendor specific API (nvapi и подобное), либо парся реестр, потому что там у видеокарт бывает видно firmware version/date/serial number. Это в user mode. В kernel mode возможностей больше (вплоть до ковыряния в недокументированных портах или I2C).
Но универсального способа нет, всё это ведёт даже не к vendor, а к device specific коду и базе данных по каждому устройству и его ревизиям, которую ещё надо регулярно обновлять.
Так что если это нужно не для программы уровня Everest/GPU-Z, а для игры или подобного user level приложения, что советую не заморачиваться и использовать device/vendor. В худшем случае, если юзер сменит карту на точно такую же, то рендеринг будет идти на карте с точно такой же мощностью и возможностями.
Yamazaru
Нужно лицензировать per-device. Сменили железо (даже на идентичное) - лицензия нарушена.
Ещё идеи как это реализовать?
Nomad
Стандартно к MAC адресу или HDD serial привязать нельзя?
Потому, что ничего похожего по стабильности идентификации в видеокартах не встречал.
Вообще, контроль по subvendor и revision id, хотя и не даёт уникальности, но довольно неплохо ограничивает возможность замены.
Так как даже у двух абсолютно одинаковых видеокарт из одной оптовой партии, они могут быть разными.
Nomad
Почему бы не использовать нормальное решение? HASP-ключи, например?
Как узнать GUID сетевой карты через net config
Утилита командной строки ipconfig нам уже известна, мы с ее помощью проверяли настройки сети у Windows Server 2019 при его настройке. Давайте я выведу текущие вводные данные. Как видите у меня есть два сетевых интерфейса Intel(R) 82574L Gigabit Network Connection, у одного mac-адрес 00-0C-29-DD-CC-73 у второго 00-0C-29-DD-CC-7D, которые подключены к моей тестовой виртуальной машине с Windows 10.
Далее в командной строке введите:
В результате вы получите небольшой вывод, в котором будет GUID сетевой карты и ее mac-адрес, по которому вы можете интерпритировать имя сетевого интерфейса.
Как узнать GUID сетевой карты через wmic nicconfig
Есть еще утилита wmic, которая так же в одну строку показывает GUID сетевого адаптера. В командной строке введите:
На выходе будет имя интерфейса и его GUID.
Где может потребоваться узнать GUID интерфейса?
О том, что такое GUID я рассказывал, в нескольких словах, это термин, используемый Microsoft для числа, которое ее программа генерирует, чтобы создать уникальную идентичность для объекта, в нашем случае, это сетевой интерфейс. Операционной системе Windows, так проще его идентифицировать и иметь записи такого вида у себя в реестре.
Теперь я приведу несколько сценариев, где вам потребуется уметь узнавать GUID сетевого интерфейса:
- Первое, что приходит на ум, это когда необходимо изменить размер MTU на нужном сетевом интерфейсе, и вот чтобы его найти нам нужно знать его GUID
- Второй пример, это когда у вас могут оставаться в системе данные об удаленном интерфейсе в реестре, что будет мешать корректной настройке сети, вот пример такого случая "Виртуальная машина ESXI получает неправильные настройки сети"
Методы определения GUID у сетевого интерфейса:
- Через реестр Windows
- Через командную строку
- Через PowerShell
- Через утилиту NetworkInterfacesView
Как узнать GUID через PowerShell
Для того, чтобы вы могли быстро извлечь информацию, о GUID ,я могу вам предложить небольшой скрипт:
$UninstallKeys = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall", "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
$null = New-PSDrive -Name HKA -PSProvider Registry -Root Registry::HKEY_USERS
$UninstallKeys += Get-ChildItem HKU: -ErrorAction SilentlyContinue | Where-Object < $_.Name -match 'S-\d-\d+-(\d+-)\d+$' > | ForEach-Object < "HKU:\$($_.PSChildName)\Software\Microsoft\Windows\CurrentVersion\Uninstall" >
foreach ($UninstallKey in $UninstallKeys) Get-ChildItem -Path $UninstallKey -ErrorAction SilentlyContinue | Where -([A-Z0-9]-)[A-Z0-9]>$'> | Select-Object @>, @>
>
Еще один вариант воспользоваться вот такой конструкцией:
get - wmiobject Win32_Product | sort - object - property Name | Format - Table IdentifyingNumber , Name , LocalPackage - AutoSize
Тут мы еще вывели пути расположения MSI пакетов для удаления приложения и его ремонту.
Как по GUID найти GPO
Напоминаю, что по умолчанию все объекты групповых политик располагаются на контроллерах домена, по пути C:\Windows\SYSVOL\sysvol\имя вашего домена\Policies. В данной папке все политики как раз и будут иметь в имени значение GUID.
Теперь у нас задача иная, мы зная GUID политики, нам нужно вычислить ее имя, чтобы понять, что за GPO могла не отработать или наоборот, что GPO прилетела и могла, что-то сломать. Как обычно методов несколько, и вы сами будите использовать те, что вам более приемлемы.
- Первым методом лично для меня я могу выделить все то же PowerShell. Напоминаю, что у меня есть ID (GUID), который я получил от политики "Управление UIPI" . Предположим, что мне нужно вычислить именно его. В оболочке введите команду:
На выходе вы получите вывод, где нас будет интересовать поле DisplayName, в котором будет содержаться имя объекта групповой политики:
- Второй метод, это использование оснастки "Active Directory - Пользователи и компьютеры". Выберите там ваш домен и нажмите поиск.
В поле найти, выберите "Пользовательский поиск", далее переходим на вкладку "Дополнительно" и вводим вот такой LDAP запрос:
Так же через вкладку "Вид", добавьте столбец "Выводимое имя". Именно в нем вы увидите имя политики.
- Третьим методом получения имени объекта групповой политики по ID (GUID) значению, это использование поиска в самой оснастке управления групповой политикой. В поисковой форме в поле "Элемент поиска" установите значение код GUID, в условии "Равно" и в значении сам код. После чего нажмите добавить.
После того как условие поиска сформировано, можно нажимать кнопку "Найти". В результате чего вы вычислите искомое GPO.
На выходе вы увидите GUID GPO и его имя. Вот такие вот не хитрые методы получения GUID у GPO и обратно. Так же можете воспользоваться вот таким скриптом:
Как узнать GUID сетевой карты через реестр
Логично предположить, что любая из утилит достает нужные нам данные из реестра Windows. Запустите окно редактора реестра Windows. Перейдите в раздел:
Тут будет список ваших сетевых интерфейсов, в моем случае их два. Тут будут ключи реестра Description и ServiceName (InstanceID)
Еще вы можете запросить вот такую ветку реестра:
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\*" | select -ExpandProperty pschildname
Тут плохо, что не понятно к какому интерфейсу, это относится.
Чтобы соотнести данные GUID с сетевым адаптером, вы можете выполнить скриптик:
$aGUID_SET = @(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\*" | select -ExpandProperty pschildname)
Напоминаю, что если вы получите ошибку при запуске скрипта, то посмотрите, как убрать проверку подписывания скриптов со стороны PowerShell.
Описание ситуации
Когда мы говорим про инфраструктуру Active Directory, то у нас невольно сразу вспоминается понятие групповой политики, и это не удивительно, так как в AD, это одна из фишек централизованного управления. GPO штука отличная, но и с ней могут быть сложности, например, она может не применяться, и как это лечится я показывал. Еще бывает ошибка Ошибка при обработке групповой политики с кодом 1054. Но применимо к нашей задаче, можно отнести ошибку в журналах Windows с кодом 1058, которая звучит:
Ошибка при обработке групповой политики. Попытка чтения файла "\\root.pyatilistnik.org\sysvol\PICompany.ru\Policies\
a) Ошибка разрешения имен или проблемы сетевого подключения к текущему контроллеру домена.
b) Запаздывание репликации Active Directory (созданный на другом контроллере домена файл еще не реплицирован на текущий контроллер домена).
c) Отключен клиент распределенной файловой системы (DFS).
Из ошибки видно, что некая политика, которая имеет GUID E26B087E-2CF3-40C9-8910-66E48A1E53C5, не смогла применится для определенного пользователя. Сомневаюсь, что кто-то знает по номеру GUID свои объекты GPO. Вот для таких случаев, вы должны уметь их определять у объектов групповой политики, и находить по ним нужную GPO, это можно сравнить, когда мы узнавали SID пользователя и по SID значению находили пользователя.
Методы получения GUID у объекта GPO
Самой простой метод определить GUID идентификатор, это открыть редактор групповой политики. Найти в контейнере "Объекты групповой политики" нужную вам политику. Выбрать ее и перейти в ней на вкладку "Сведения". Там вы увидите время создания, модификации и уникальный код, это и есть GUID, в моем примере у политики "Управление UIPI" код
Если приступить к редактированию политики и зайти в ее свойства, то вам в новом окне, на вкладке "Общие" будет показано уникальное имя, состоящее из GUID , у вас будет свой.
Далее можно воспользоваться поиском в оснастке управления групповой политикой, для этого щелкните правым кликом по корню вашего домена и из контекстного меню выберите пункт "Найти"
В поисковой форме, в пункту "Элемент поиска" выберите значение "имя объекта групповой политики", в условии равно или содержит, в значении указываем нужное слово или имя. После чего нажимаем добавить.
После чего нажимаем кнопку "Найти" в результате чего у вас будут результаты поиска с именами объектов групповой политики, где вы сможете увидеть код GUID.
Еще одним из лучших и универсальных методом просмотра информации по объектам GPO, является оболочка PowerShell с ее огромным количеством командлетов. Как запускать PowerShell от имени администратора я уже писал, нам тут поможет командлет Get-GPO, про него можете почитать по ссылке:
первым делом мы импортируем модуль групповой политики
Для того, чтобы вывести все GPO введите
Вы получите все объекты, где сможете увидеть ID, который соответствует GUID.
Так как политик может быть огромное количество, то вы можете отфильтровать по имени, например вот так:
На выходе получите одну конкретную запись
Если хотите сделать красивый вывод в отдельном окне, то добавьте ключ Out-GridView
на выходе будет удобная форма в отдельном графическом окне, где первым столбцом будет ID с GUID значением.
Как узнать GUID сетевой карты через Get-NetAdapter
Есть замечательный командлет Get-Net Adapter, который за пару минут вам выведет информацию по сетевым интерфейсам, в оболочке PowerShell введите:
На выходе вы увидите прекрасную, сводную таблицу.
Как узнать GUID приложения
Пример вызова компонента Windows диспетчер устройств:
shell. ,для запуска необходимо вызвать диалоговое окно «Выполнить» используя клавиши Win + R, прописать данный код и нажать«OK» Все значения хранятся в разделе реестра HKEY_CLASSES_ROOTCLSID. Зайдя в CLSID поиск, лучше всего производить методом перебора значений для правильного определения в значении должен присутствовать подраздел ShellFolder. Для поиска нужного необходимо иметь время и терпение. Итак, всё по порядку.
Как узнать из реестра GUID приложения в Windows -01
Раздел реестра HKEY_CLASSES_ROOTCLSID
Клавишами Win + R открываем диалоговое окно «Выполнить» вводим команду regedit - открыть редактор реестра. Для поиска заходим в раздел реестра HKEY_CLASSES_ROOTCLSID
Пример: нам нужен «Панели управления — Control Panel», методом перебора значений находим нужный, смотрим наличие подраздела ShellFolder.
Как узнать из реестра GUID приложения в Windows -02
Для того, чтобы извлечь и проверить правой клавишей мыши нажимаем на значение, в открывшемся меню выбираем пункт «Экспортировать», и сохраняем с расширением .reg
Как узнать из реестра GUID приложения в Windows -03
Созданный файл реестра лучше всего открыть программой Notepad ++ познакомиться с которой можно в категории сайта «Офис».Если Вам понравился текстовой редактор Notepad ++ и Вы его установили, то правой клавишей мыши нажимаем на созданный файл реестра. В открывшемся меню выбираем «открыть с помощью Notepad ++ таким образом можно ознакомиться со структурой и синтаксисом файла реестра.
Как узнать из реестра GUID приложения в Windows -04
Выделяем значение, с помощью клавиш Ctrl + C копируем, вызываем диалоговое окно «Выполнить» и с помощью клавиш Ctrl + V вставляем, перед фигурными скобками прописываем Shell. и нажимаем«OK».
Как узнать из реестра GUID приложения в Windows -05
Как узнать GUID через CMD
Откройте cmd от имени администратора и выполните команду, которая создаст на диске C:\ файл с отчетом
или без создания файла wmic product list
Что такое GUID?
GUID (глобальный уникальный идентификатор) - это термин, используемый Microsoft для числа, которое ее программа генерирует, чтобы создать уникальную идентичность для объекта, такого как документ Word. Идентификаторы GUID широко используются в продуктах Microsoft для идентификации интерфейсов, наборов реплик, записей и других объектов. Разные виды объектов имеют разные виды GUID - например, база данных Microsoft Access использует 16-байтовое поле для создания уникального идентификатора для репликации.
Типы GUID
Существует 5 версий идентификаторов GUID, определенных в RFC 4122 , каждая с разными свойствами. Чтобы определить версию GUID, просто посмотрите на цифру версии, например, GUID версии 4 имеют формат xxxxxxxx-xxxx- 4 xxx- N xxx-xxxxxxxxxxxx, где N - это одно 5 значений 4, 8,9, A или B.
- Версия 1: дата-время и MAC-адрес - Эта версия генерируется с использованием текущего времени и MAC-адреса клиента. Это означает, что если у вас есть GUID версии 1, вы можете выяснить, когда он был создан, проверив значение метки времени.
- Версия 2: DCE Security - Эта версия специально не определена в RFC 4122, поэтому не должна генерироваться совместимыми генераторами. Он аналогичен GUID версии 1, за исключением того, что первые 4 байта метки времени заменяются пользовательским UID или GID POSIX, а старший байт последовательности часов заменяется доменом UID / GID POSIX.
- Версия 3: MD5 хэш и пространство имен - Этот GUID генерируется путем взятия пространства имен (например, полного доменного имени) и заданного имени, преобразования в байты, объединения и хеширования. После указания специальных битов, таких как версия и вариант, полученные байты затем преобразуются в его шестнадцатеричную форму. Особое свойство этой версии заключается в том, что идентификаторы GUID, сгенерированные из одного и того же имени в одном и том же пространстве имен, будут идентичны, даже если они генерируются в разное время.
- Версия 4: случайная - Этот тип GUID создается с использованием случайных чисел - из 128 битов в GUID 6 зарезервированы для специального использования (версия + вариантные биты), что дает нам 122 бита, которые могут быть заполнены случайным образом. Спецификация не определяет, как должны генерироваться случайные числа, они могут быть любыми, от псевдослучайных до криптографически безопасных, поэтому эти GUID, как и все другие GUID, следует использовать только для идентификации, а не для безопасности.
- Версия 5: SHA-1 хэш и пространство имен - Эта версия идентична версии 3 за исключением того, что SHA-1 используется на этапе хеширования вместо MD5.
Разделы реестра, где нужно искать:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\Uninstall
- HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ Microsoft\Windows\CurrentVersion\Uninstall
Как узнать GUID сетевой карты через netsh
Я уже вам показывал разное применение команды netsh, можете ознакомиться. Тут чтобы ее использовать нам необходимо две запущенные службы в Windows:
- dot3svc - Проводная автонастройка
- WlanSvc - Служба автонастройки WLAN
Откройте PowerShell и введите команду, которая проверяет статус данных службЖ
Если службы у вас не запущены, то введите:
Далее по очереди введите команды:
netsh lan show interfaces
В результате вы получите удобный список, где вы увидите:
- Имя: Ethernet0
- Описание: Intel(R) 82574L Gigabit Network Connection
- Код GUID: ba2ef413-146b-4521-b179-fbc66bb286d9
- Физический адрес: 00-0C-29-DD-CC-73
- Состояние: Подключение выполнено. Сеть не поддерживает проверку подлинности.
Как узнать GUID сетевой карты через NetworkInterfacesView
Я вам много раз рассказывал уже про крутой набор утилит NirLauncher, например мы его использовали когда нужно было посмотреть пароли в браузере. В данный пакет входит утилита NetworkInterfacesView.
Загрузите ее и запустите, NetworkInterfacesView отобразит вам все сетевые интерфейсы найденные в системе, есть столбец GUID, но так же можно два раза кликнуть по нужному интерфейсу и получить более красивое окно со сводными данными.
Как узнать GUID сетевой карты через Get-WmiObject
В PowerShell введите команду:
Тоже очень удобная команда и при выводе ничего лишнего.
Читайте также: