Здравствуйте, m2user, Вы писали:
W>>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.
M>А будет ли разница с WMI?
Я не знаю, может быть. Но это чистая инфа из железа, без всяких locale. Её по идее можно считать вообще без API, чисто просканировав 64KB начиная с 0x0F0000.
Во многих BIOS есть опция выключения serial number. Это раз.
Два — кроме серийного номера есть еще и SMBIOS UUID.
Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.
Четыре — привязываться можно еще и к MachineGUID. По идее стоит привязываться и к тому, и к другому. Если MachineGUID меняется, а SMBIOS data — нет, то имеем переустановку Windows. Если наоборот, то — OS restore на новую машину. Ну и дальше на это накручиваем лицензионную логику как хочется.
U_E>Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber, и все вроде бы хорошо, но почему-то у юзеров hardware id стал менятся, хотя материнку они клянутся, что не меняли. Выяснилось, что некоторые поля (после обновления драйверов? — точно не смог понять) могут начать выдаваться в локали юзера. U_E>Проблема еще в том, что serialnumber может быть пустой строкой. U_E>Чувствую, что как-то не так как следует я получаю hardware id материнки.
Устанавливай английскую локаль (MS_409) при подключении к WMI
W>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.
Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber, и все вроде бы хорошо, но почему-то у юзеров hardware id стал менятся, хотя материнку они клянутся, что не меняли. Выяснилось, что некоторые поля (после обновления драйверов? — точно не смог понять) могут начать выдаваться в локали юзера.
Проблема еще в том, что serialnumber может быть пустой строкой.
Чувствую, что как-то не так как следует я получаю hardware id материнки.
Здравствуйте, wantus, Вы писали:
W>Два — кроме серийного номера есть еще и SMBIOS UUID.
W>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.
Да, я читал об этом, но вот что мне хотелось узнать у коллег, так это какой способ работает стабильно. Ведь я использовал WMI и до поры до времени все было хорошо
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber
Вся эта возня с добычей уникального идентификатора, привязкой, проверкой и поддержкой, действительно оправдывает себя по сравнению с генерацией уникального серийника?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вся эта возня с добычей уникального идентификатора, привязкой, проверкой и поддержкой, действительно оправдывает себя по сравнению с генерацией уникального серийника?
Посмотрим.
Но вот один любопытный схожий кейс. Я для другого продукта ввел floating licenses. Написал сервер лицензий, которому дается ключ с числом одновременных пользователей (причем до этого я просто выдавал один ключ на всех работников, эдакий вариант site license, но один клиент настоял, что ему нужен сервер лицензий, и вообще так положено; я в итоге его за два дня написал на C#, и он до сих пор служит, хотя его поломать ничего не стоит). В итоге стали появляться заказы с бОльшим числом пользователей, чем прежде. И это при том, что нету активации этого ключа через интернет, т.е. можно поднять два (три, четыре, ...) сервера лицензий, а какой-то части работников сказать, что надо использовать другой сервер лицензий
Конечно, "после" не значит "вследствие", но я думаю, что направление верно. Единственное, что компании нынче насчет privacy сильно заморочены, и если прежде было относительно просто заполнять опросники SOC2, то после введения активации, вероятно, будет больше вопросов.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Конечно, "после" не значит "вследствие", но я думаю, что направление верно.
Мне думается, что здесь должно работать правило "80/20". Самая кондовая защита должна снижать нелицензированное использование очень сильно, а дальнейшее ее усложнение уже должно давать значительно более пологое снижение. Ну и область перехода крутого снижения в пологое должна как-то зависеть от цены лицензии.