Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10

Проверка Windows на подлинность (локальная)

30.04.2021, 13:32. Показов 10272. Ответов 94

Студворк — интернет-сервис помощи студентам
Начиная с Windows 7 есть функция для проверки подлинности системы - SLIsGenuineLocalEx.
Проверка проводится локально.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;https://docs.microsoft.com/en-us/windows/win32/api/slpublic/nf-slpublic-slisgenuinelocalex
 
#SL_GEN_STATE_IS_GENUINE = 0
 
 hDll = OpenLibrary(#PB_Any, "sppc.dll")    
If hDll 
    *SLIsGenuineLocal = GetFunction(hDll, "SLIsGenuineLocalEx")
    If *SLIsGenuineLocal
    If CallFunctionFast(*SLIsGenuineLocal, ?IID_NAME, 0, @test) = #S_OK
            If test = #SL_GEN_STATE_IS_GENUINE
               MessageRequester("Поздравляю! ", "Ваша Windows считается подлинной.", #PB_MessageRequester_Info)
            Else
               MessageRequester("Внимание! ",  "Ваша Windows не прошла проверку подлинности.", #PB_MessageRequester_Warning)
            EndIf
        EndIf
    EndIf    
    CloseLibrary(hDll)
  Else
    
   MessageRequester("Внимание! ",  "Ваша Windows немного устарела для этой проверки.", #PB_MessageRequester_Warning)  
  EndIf
  
  DataSection 
  IID_NAME:
  Data.l $55c92734
  Data.w $d682, $4d71
  Data.b $98, $3e, $d6, $ec, $3f, $16, $05, $9f
 EndDataSection
Проверяйте, тестируйте:
Вложения
Тип файла: zip genuine.zip (3.3 Кб, 25 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2021, 13:32
Ответы с готовыми решениями:

Проверка Windows на подлинность
Добрый день. Подскажите как проверить Windows (любую) - лицензионная она или пиратская анонимно и без последствий для самой винды.

Проверка на подлинность Windows 7
Подскажите как быть, у меня стоит лицензия вин 7, через некоторое время, у меня был троян, изза которого слетела полностью винда, я...

Проверка на подлинность Windows 7
У меня стоит Windows 7. 64 разряда.Активирована.С недавних пор при открытии любого текстового документа выкидывает окно: Копия Windows...

94
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
03.05.2021, 18:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от locm Посмотреть сообщение
И тогда в винде ниже 7, программа не запуститься, т. е. нет совместимости.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Лучше лишний раз проверить, есть ли такая функция, чем тупо вызывать то, чего нет
Объясните, зачем запускать программу которая принципиально не может работать без этой функции?
Цитата Сообщение от Pro_grammer Посмотреть сообщение
undefined reference to `SLIsGenuineLocalEx@12'
Вы в третий раз будете игнорировать исправленную версию?
0
Эксперт по электронике
6850 / 3274 / 339
Регистрация: 28.10.2011
Сообщений: 12,802
Записей в блоге: 7
03.05.2021, 20:22
Цитата Сообщение от Замабувараев Посмотреть сообщение
Объясните, зачем запускать программу которая принципиально не может работать без этой функции?
Кто сказал что программа не может работать без этой функции?
Запускается, работает, в отличие от вашей.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
03.05.2021, 21:00
Цитата Сообщение от locm Посмотреть сообщение
Запускается, работает, в отличие от вашей.
Вся работа заключается в том, чтобы выдать диагностическое сообщение и завершиться с ошибкой? Но ведь это уже делает операционная система. В чём смысл дублировать это поведение?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
03.05.2021, 22:29
Цитата Сообщение от Quiet Snow Посмотреть сообщение
При чём тут глотку грызть, дока кривая, ты это отрицаешь, а виноват Pro_grammer.
Чем она кривая?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Всё, с этого момента она кривая. Когда одно другому начинает противоречить.
Ты не правильно понял сообщение, "Ничего там не соответствует." относилось к коду программера, а не к документации

Цитата Сообщение от Quiet Snow Посмотреть сообщение
и не должен гадать где лежит ещё дополнительная документация, о которой в описании функции явно не сказано.
Прогер должен знать как работать с типами данных, а не просто тупо копипастить код.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Добавятся и хрен с ними, мы с ними не работаем, их не проверяем. Поведение программы не изменится,
если не изменится поведение системы. Я уже писал про обратную совместимость. Если людям хотят
доставить реальных геморов тебя не спасут никакие документации.
Вот именно вы их не проверяете. Вы вообще неправильно проверяете возвращаемое значение и уперлись в то что в доке на функцию указано, совершенно не обращая внимание на тип с которым работаете. Очень плохо конечно что в MSDN нет примера работы именно с этой функцией и всякие говнокодеры растащили один неверный код и выдают его за истину. Ну в качестве доказательства того что вы делаете неверно приведу другой пример. Есть функция MFCreateAttributes которая является частью Media Foundation. Если ты посмотришь в описание функции то увидишь: "If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code." Все тоже самое что и с функцией SLIsGenuineLocalEx. Ну в отличии от функции SLIsGenuineLocalEx, в MSDN есть примеры правильной работы с ней, и о чудо, как ты думаешь что там?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
. . .
 
    // Create an attribute store to hold the search criteria.
    HRESULT hr = MFCreateAttributes(&pConfig, 1);
 
    // Request video capture devices.
    if (SUCCEEDED(hr))
    {
        hr = pConfig->SetGUID(
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, 
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
            );
    }
 
. . .
Почему они не делают как программер? Почему в бинарях что я привел выше используется такой же подход с той функцией о который мы тут спорим? МБ все-таки о чем мы тут пишем с Замабувараевым все-таки верно и нужно прежде чем работать с каким-либо типом сначала изучить как с ним правильно работать?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Указать в документации в каждой функции в разделе возвращаемого значения ссылку на
корректное и убрать некорректное, если оно является таковым.
Они указали это в документации на тип, для того чтобы не дублировать ненужную информацию.

Цитата Сообщение от locm Посмотреть сообщение
Вы предлагаете не следовать официальной документации где написано.
Нет я предлагаю следовать официальной документации где черным по белому написано не полагаться на список возвращаемых значений в описании функций с типом HRESULT.

Цитата Сообщение от locm Посмотреть сообщение
Этот ответ противоречит описанию функции (см. выше), так что не устроит.
Хватит рассуждать. Покажите на примере в каком случае выполнение SLIsGenuineLocalEx будет успешным, но результат будет отличаться от S_OK, иначе не вижу смысла вашего спора. Если у вас нет ответа на этот вопрос, давайте прекратим бессмысленный спор.
Не противоречит. В функции просто дан неполный список возвращаемых значений - все. Я уже кинул выше точно такой же пример с функцией MFCreateAttributes. Прекращайте уже свой бессмысленный спор.

Цитата Сообщение от locm Посмотреть сообщение
Он написан согласно описания функции. Если вы считаете что оно неправильное, обращайтесь в майкрософт.
Нет. Код не правильно работает с типом HRESULT. Мне не нужно обращаться в майкрософт из-за кривого кода программера.

Цитата Сообщение от locm Посмотреть сообщение
У каждой функции есть описание и LIsGenuineLocalEx не исключение. Вы читали ее описание? Особенно в части того что возвращает функция?
Да, я то как раз читал то что возвращает функция, а вы похоже нет.

Цитата Сообщение от locm Посмотреть сообщение
Разве мы не его обсуждаем?
Ну так ты ответь на конкретный вопрос, а не уходи от ответа в очередной раз. Я тебя попросил прокоментировать цитату из MSDN по поводу обработки HRESULT кодов, а ты мне пишешь про функцию SLIsGenuineLocalEx. Что так сложно?

Цитата Сообщение от locm Посмотреть сообщение
В описании функции нет ничего про то что следует использовать SUCCEEDED или FAILED, но приведены коды возврата. Поэтому описание функции в большем приоритете.
Нет. В приоритете как раз SUCCEEDED и FAILED, т.к. явно описано что не полагаться на список возвращаемых значений функций, т.к. возвратится может любое значение.

Цитата Сообщение от locm Посмотреть сообщение
В описании перечислены коды которые может вернуть LIsGenuineLocalEx.
Ну и какие? Там есть ссылка на страницу с общими кодами ошибок, на которой ссылка на списки кодов из Winerror.h в которой есть куча кодов в том числе успешные.

Цитата Сообщение от locm Посмотреть сообщение
Для LIsGenuineLocalEx крайне маловероятно что добавятся коды сообщающие об успешном выполнении. А если появятся новые коды ошибок, это не повлияет на работу программы.
Это нас не касается. Если коды добавятся то код программера не будет работать, а если писать так как требует документация к типу, то все будет работать независимо от того добавятся ли статусы или нет.

Цитата Сообщение от locm Посмотреть сообщение
Почему всю? Только описание тех функций что были изменены.
Я уже написал как происходит возврат HRESULT кодов, почитай и поймешь что это почти нереально сделать т.к. зависимости могут быть очень большими и глубокими.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Почему сделан вывод, что она физически может их возвратить, что в ней это всё есть?
Потому что тип HRESULT может. Вот к примеру какой-либо метод возвращает HRESULT код, для него написали доку. Внутренняя реализация может быть любой. К примеру пусть метод возвращает какую-либо метаинформацию из изображения, там теги или что-то еще. Способов сделать это может быть куча, GDI+, WIC, ручные всякие способы. Вот в одной версии они сделали через WIC, который в свою очередь полагается на что-то другое. То другое полагается на третье и т.д. Получается цепочка вызовов. Любой вызов может возвратить HRESULT код. К примеру при чтении может отвалится диск, компонент чтения вернет соотвествующий код, который передатстся по цепочке до твоего метода и он его вернет. И чем сложнее система тем больше количество кодов она может вернуть, и ты в любой момент можешь получить кучу разных HRESULT кодов. Чтобы не писать всевозможные комбинации, дают ограниченый список только самых частых результатов. Тебе вероятно мало интересует у тебя диск отвалился, или ошибка CRC произошла с данными. Поэтому эти результаты просто не включают в описание. Уже привел выше пример с Media Foundation.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Функция ничего кроме них не выдаёт(не должна), а если выдаёт,
это должно быть описано в документации. Иначе человек об этом не узнает.
А я бы хотел знать, что строго оговоренная функция точно допускает возвратить, т.к. от этого напрямую
зависит работа программы. И у Pro_grammer-a прога работает по описанию функции.
Еще раз. Ту функцию что ты вызываешь - это черный ящик. Как она устроена внутри - ты не знаешь, в любой версии может быть компонент что вернет положительный статус который передастся тебе. Для этого вам и дали тип HRESULT в котором нужно тестировать старший бит для проверки на успешность.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Это про того персонажа, который написал что есть какой-то 1%
но не указал точно. Тут сразу складывается ощущение что до публикации в MSDN допустили
какого-то левого тюфяка который внёс сумбур, скомпрометировав документацию и
не смог нормально описать всю эту ситуацию.
Такие ощущения возникают обычно у тех кто не может читать документацию. Я еще не встречал никого кто-бы так яростно противился использованию макросов для правильной обработки результата, кто-бы писал все-что угодно про кривых разработчиков документации, тюфяков и т.п., но не соглашался бы с очевидными фактами.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Им не пользуюсь, но речь шла, видимо, именно о нём, родимом, о том что где-то там имеются эти самые
пробелы с S_OK.
Лично не видел ещё функции, которые работали бы не так, как написано в описании.
Да ты видимо вообще с HRESULT не работал никогда, раз такое говоришь. Любой код на MSDN, я почти на 100% уверен, использует макросы SUCCEDED и FAILED при работе с HRESULT. Вон скинул уже выше пример с MF и почему-то никого это не смущает кроме вас.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
И тут не канает сказать "чувак ты не разобрался", я вон выше как раз полез и посмотрел и
макросы и табличку. Они слабо объясняют то, про что написано чуть выше.
Еще раз, посмотри как в MSDN работают с HRESULT кодами. Что-ты мне тут пишешь про это? Я в отличии от вас это прекрасно понимаю как все это работает и не вижу никаких проблем в документации по этому поводу.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
04.05.2021, 04:09
Цитата Сообщение от The trick Посмотреть сообщение
Они указали это в документации на тип, для того чтобы не дублировать ненужную информацию.
И тем не менее они дублировали:
https://docs.microsoft.com/en-... ult-values
только с твоих слов это мол криво.
Но мы знаем, что любая техническая документация на любую конкретную вещь всегда делается полностью,
чтобы избежать неточностей в её эксплуатации. Это касается и описания функции.
Ссылка(или описание) на корректную обработку значений должна быть непосредственно
в описании функции, без этой информации воспользоваться функцией - невозможно.
Если этого нет, то отсюда вытекает вывод, что имеющейся информации достаточно, люди так посчитали.
И её действительно достаточно. И тут срабатывает закон мёрфи "всё что может быть понято неправильно
- будет понято неправильно". Кто виноват что программист увидел описание, которое дало
ответы на вопросы как использовать функцию и не полез копать ещё 10000 тысяч страниц документации?
Наверное тот, кто писал доку.
И ещё есть такая фраза из армейского анекдота "больше бумаги - чище задница" про документацию как раз.
Людям дали описание, технически строгое - они по нему работают.
А то что дублируются сущности - это на их совести, если там что-то криво. Повторюсь пока ничего
кривого воочию не увидел.

Цитата Сообщение от The trick Посмотреть сообщение
Чем она кривая?
Для меня пока ничем, но ты приводил цитату про 1% функций и там фигурировало COM.
Меня это пока не касается, мне COM не нужен, но ты это своенравно экстраполировал на все функции.
Лишь хочу узнать подтвердятся ли эти опасения или нет. Как раз с целью не допустить ошибок.
Но и наворачивать какие-то макросы с непонятными целями, просто "по фану" разумеется не буду.
А для этого нужны косячные прецеденты(с вариантом программера где = S_OK), а не чужие коды.

Цитата Сообщение от The trick Посмотреть сообщение
Потому что тип HRESULT может.
Гениально! Ты читал пост, что я писал?
Т.е. пофиг на здравый смысл, что реально внутри функции, скорее всего, не более
отработки лишь той маленькой таблички и указанных в описании ситуаций. Если вообще не тупое
S_OK и -1.
Ещё раз. Описание типа не отвечает на мой вопрос. Более того
Цитата Сообщение от The trick Посмотреть сообщение
Если коды добавятся то код программера не будет работать, а если писать так как требует документация к типу, то все будет работать независимо от того добавятся ли статусы или нет.
я не уверен, что кто-то тут
вообще в состоянии на него ответить. Но, возможно, существует та или иная документация,
которая сможет ответить на эти вопросы.

Цитата Сообщение от The trick Посмотреть сообщение
Внутренняя реализация может быть любой.
Что значит любой? Нужно знать функции ставят биты или значения. Если и то и другое - то какие вообще вопросы?
Значит работает и так и так. Документация не отвечает на этот вопрос.
Мне нужно нормальное объяснение, а не чужие коды. А так там в MSDN и такое есть:

https://docs.microsoft.com/en-... lues-in-c-

Тоже могу за него ухватиться и сказать что это тот другой чувак не прав. Мне вот не надо хендлить всё подряд,
то чего не знаю, моя прога это не обработает, если оно не задокументировано. И это тоже документация.
Так вот если она лживая, то почему её не уберут? там подписано 2018 год... Свежак
Что люди в MS за почти три десятка лет так и не научились работать со своими методами?
А если в COM напортачили - то это проблема COM. Меня этот расклад устроит, покуда туда не лезу.
Всё это звучит как поправки в конституцию, знамо зачем.

Цитата Сообщение от The trick Посмотреть сообщение
в MSDN есть примеры правильной работы с ней, и о чудо, как ты думаешь что там?
Чё тут думать там гуайди...

Microsoft применяет GUID в OLE, COM, DCOM и Windows Runtime — например, в качестве идентификаторов для классов (CLSID), интерфейсов (IID), параметризуемых интерфейсов (PIID), библиотек типов (LIBID).
Хотелось бы пример чего-то не имеющего отношения к COM. Чтобы понимать, как оно людей коснётся.
Пока всё что вынес из этой дискуссии, так это то, что якобы в COM есть 1% кривожопых функций,
работающих своевольно, не так как написано в документации, которые надо хендлить и в хвост и в гриву.
Обычные же функции работают так как указано в описании. И никто пока обратного не подтвердил на практике.
Будут реальные примеры косяков - будет совсем другое дело, с практическими фактами я не спорю никогда.
Тогда все задумаются. А разговор пока был за стартовый пост, за который программера мокнули в говно.
Человек всё делал по документации и это тоже тут подтвердили прогеры практики, а не лохи позорные,
которые ничего не умеют.

Цитата Сообщение от The trick Посмотреть сообщение
Вот именно вы их не проверяете. Вы вообще неправильно проверяете возвращаемое значение и уперлись
Мы не мой код обсуждаем. Проверяю тут я чё-то. Претензии у вас к программеру и к классической MSDN доке
по WinAPI, хочу понять насколько они кореллируются с истиной и вообще копнуть эту самую истину.
Заметь не говорю что кто-то тут не прав, криворук, пишет с ошибками и т.п.
Мы за этим тут на форумах и сидим, не чтобы друг друга говном крыть, а чтобы истину копать.
Повторюсь мне нужно нормальное объяснение, а не чужие коды, которых и сам накопать могу вагоны.
И у меня были коды с FAILED (Direct Input), как бы странно не было, не стал спорить с тем, кто их писал
и оставил как есть.
Есть принцип если работает - лучше не трогать. И тестирование никто не отменял.
Мне не нужны "процентные ванги", мне нужны факты и реальные примеры. А лучше перечень функций,
которые по тем или иным причинам не умеют в классическое описание.

Цитата Сообщение от The trick Посмотреть сообщение
Прогер должен знать как работать с типами данных, а не просто тупо копипастить код.
Чтобы работать с любым коммуникационным типом данных, нужно знать как он устроен и почему он так устроен.
Как с ним работает обратная сторона. Это и к тебе относится. Потому что пока вижу лишь
жанглирование чужими кодами, а мне нужно объяснение, нормальное. Например как функция
формирует эти коды. Повторюсь прочитал как работают макросы, я не дебил. Они не объясняют
внутренней структуры функций и в документации ничего по этому поводу нет.
Вообще на WinAPI такого мало где видел. Часто пишут = 0 и всё. И работает нормально.
А хендлить целый диапазон значений, если оно вдруг сформировано не битовым образом(т.е. одно состояние)
- извините, тут чисто по здравому смыслу не предскажу, что там может навернуться, мне нужна точность
и в документации и в коде. А не вот мол какие-то непонятные люди написали функцию, которая не может
выдать единственный, определённый результат работы. Наверное, с такими функциями я работать не буду
или лишь не имея нормальной альтернативы.

Цитата Сообщение от The trick Посмотреть сообщение
Как она устроена внутри - ты не знаешь
В том то и дело, что теперь выходит надо знать. Т.к. ты говоришь одно, документация(описание функции)
говорит другое. Что достаточно и S_OK.

Цитата Сообщение от The trick Посмотреть сообщение
кто-бы писал все-что угодно про кривых разработчиков документации, тюфяков и т.п., но не соглашался бы с очевидными фактами
Нет никаких фактов. Ты любые слова трактуешь в пользу своих тезисов. А мне интересно, к чему приведёт эта
дискуссия в плане статистики. Т.к. всегда за здравый смысл в программировании, за то чтобы сделать
хорошо там, где это важнее всего и не обосраться по итогу с использованием софта в реале.
А не понаставить идиотских проверок, потратив на них всё своё время и силы, а по итогу выдать дичь,
которая будет падать в движке на самых ответственных моментах.
Взаимодействие с системой это как раз то, за что кодеры отвечать не могут в принципе(не они писали код системы).
Вот ты говоришь про какие-то новые ответы функций, которые появятся и всё обвалится.
Во-первых, менять поведение задокументированной функции - нонсенс. Флаги может и добавят,
но поведение в рамках известной документации - не изменится.
Во-вторых, люди не экстрасенсы, если вышла новая OS и на ней что-то не пашет - ну это как-бы допустимо,
что может такое быть. Тебя и твои проверки могут не спасти и не спасут.
Напиши какую-нть приличную прогу для 98 винды, не тестируя на других, сделай релиз и потом прогони по всем последующим. Да она у тебя там в куче мест отвалится или будет работать не так как задумано.
Инфа соточка, обвалится 100% у всех. Если разрабы захотят в новой версии - обвалят, твои супер
пупер проверки не панацея.
Это жизнь, тут нужно тестировать там, где можешь, больше тестов - лучше работает. Это ещё с тем учётом
что нет багов в алгоритмах и движке, а для этого должна быть формализация, если её вдруг нет - это уже
двойной косяк, чем таких косяков больше - тем прога хуже будет работать везде, её просто тестить сложнее,
факторов отвала больше. А с некоторыми вещами(которые от тебя не зависят) сделать вообще ничего нельзя,
только переписать заново. Например будет библиотека которая на одной системе работает хорошо, а на другой
как говно - и ты ничего тут не сделаешь, если опираешься сугубо на неё и не было возможности тестить.
И смысл тут пинать кого-то правильно\неправильно. Работает софтина, есть от неё толк - значит правильно,
не работает - значит жопа. Люди подбирают себе софт и оборудование под то, что работает, чтобы выгоду и пользу
извлекать с этого, авторы софта также тестируют на конкретных ОС и ставят лычки совместимости.
И я приводил примеры реальной жопы в софте, десятки примеров, когда что не делай, а пользоваться
софтом нереально, это всегда плохо и там не в проверках было дело, а в том что либо плохо писано, либо непредусмотренные вещи(халатность), я даже приводил примеры, когда человек написал сложнейший
движок и лоханулся, его прогу невозможно было запустить именно по здравому смыслу, как бы это делал
человек, который пользу хочет из неё извлечь, а не принципиально выискивая баг. Там был один разработчик
профи и списать на других людей косяк было нельзя. Никогда не заостряю внимание на херне, только
на том что нужно видеть и как не нужно делать. А то что я тут последнее время читаю - это какая-то херня.
То в текстовом поле не запятая, а точка - плохо, то оф. документация имеет изъяны, 20 лет не имела,
а теперь имеет. Осталось начать хаять людей за отсутствие иконки в EXE файле.
Когда здравый смысл теряется это уже не программирование, а анонизм какой-то.

Добавлено через 24 минуты
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вся работа заключается в том, чтобы выдать диагностическое сообщение и завершиться с ошибкой? Но ведь это уже делает операционная система. В чём смысл дублировать это поведение?
Для обратной совместимости. Если в софте явным образом не будет указано для какой ОС
он предназначен, можно либо сделать собственный кастомный функционал, заменяющий тот, что
в старших ОС, либо выдать ошибку. Поддержка старых систем это дело больше энтузиазма разработчика.
И обычно этот энтузиазм исходит из того, что софт изначально под эту систему был и дорабатывать его
стоит не всегда больших усилий.

Добавлено через 15 минут
Читайте до чего вы Петра довели, формалисты:

Цитата Сообщение от locm Посмотреть сообщение
Кто сказал что программа не может работать без этой функции?
Запускается, работает, в отличие от вашей.

Ну получается да, а как тут ещё дискутировать, если люди забивают на здравый смысл.
Если так пинать людей по какой то фигне - то это бред. Хотя кому я говорю, это Россия.
У нас это прям зараза какая-то, такое мышление "докапывательное", а не созидательное.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.05.2021, 07:25  [ТС]
The trick, словоблудие про то как
Цитата Сообщение от The trick Посмотреть сообщение
как в MSDN работают с HRESULT кодами
которым ты пытаешься скрыть тот факт, что в очередной раз жиденько обделались вместе с Замабувараевым.
Но тот быстро переобулся :
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вы же сами говорите, что возвращает либо ошибку, либо S_OK.
На ошибку Я проверил, значит в hrGenuineLocal после этого может лежать только S_OK.
Прочитай доку MSDN :
This function does not change the value of this parameter if the return value is any value other than S_OK.
И конкретно расскажи, чего стОят все твои словоблудия про работу с с HRESULT кодами, и твоё утверждение, что
Цитата Сообщение от The trick Посмотреть сообщение
Положительных кодов может быть 2147483647 штук, любой из них.
если имеет значение только одна проверка на S_OK?

Добавлено через 20 минут
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Читайте до чего вы Петра довели
Он правильно пишет.
Обычно эта проверка лишь часть какой то программы.
Замабувараев тупо вызывает в своей программе эту функцию, даже не проверив, есть она реально в системе или её нет?
PureBasic
1
2
3
4
5
Dim hrGenuineLocal As HRESULT = SLIsGenuineLocalEx( _
        @WINDOWS_SLID, _
        NULL, _
        @GenuineState _
    )
При запуске в WinXP программа падает с ошибкой, итог закономерный.
Правильная программа не падает, а предупреждает, что Win устарела.

Вторая грубая ошибка кроется тут:
PureBasic
1
2
3
 If FAILED(hrGenuineLocal) Then
        ExitProcess(1)
    End If
Идет проверка только на FAILED, тогда как The trick утверждает:
Цитата Сообщение от The trick Посмотреть сообщение
Положительных кодов может быть 2147483647 штук, любой из них.
т.е. при любом другом положительном ответе из 2147483647 штук программа продолжит работу и выдаст неправильный ответ. (кроме S_OK по документу, на который я как раз и проверяю!)
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
04.05.2021, 08:37
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Он правильно пишет.
Правильно то правильно, просто здравый смысл уже в конец утерян, в контексте твоего кода.
Мол прога запустится сказать, что она обессилила и не смогла.
Мы такими темпами деграднём до неработающих хеллоу ворлдов. Вместо того, чтобы какой-то софт
писать и разбирать нормальные вопросы, да ещё и перелаемся из-за этого дерьма, что того явно
не стоит.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.05.2021, 09:06  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Мол прога запустится сказать, что она обессилила и не смогла.
Так многие нормальные программы так делают. Особенно сейчас я стал замечать, когда Win7 не поддерживается, уже с установщика мне сообщают, что для работы программы требуется Win10 и давай, до свидания.
Согласись, это гораздо лучше, чем ты запускаешь установленную прогу, а она с ошибкой падает в середине работы, обматерит тебя какой нибудь фразой типа "Runtime Error 2537648548!". Сиди и думай, то ли программист, который её писал баран, то ли комп не подходит

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Quiet Snow Посмотреть сообщение
да ещё и перелаемся из-за этого дерьма
Тут дело не в истине, а в личной неприязни. Это видно невооружённым взглядом. Я указываю на явные ошибки, а они мстят, пытаются в ответ найти ошибки у меня. Как оказывается именно там, где их нет.

0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
04.05.2021, 09:42
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Согласись, это гораздо лучше, чем ты запускаешь установленную прогу, а она с ошибкой падает в середине работы
Лучше, просто предпочитаю видеть лычку на сайте, где скачиваю прогу для какой она системы, чтобы
не тратить время на скачивание, установку, огребание косяка и удаление проги. За что в общем-то люблю
портейблы и архивы, их не надо устанавливать.
К слову проги, для которых нужен сишный рантайм при запуске бывает дают нулевую реакцию.
У меня так было с аблетоном давно ещё, он даже окна никакого не создавал, мгновенно схлопывался.
Это не ошибка, но забавно. В таком случае лучше бы, наверное, прога упала бы, я бы хоть сразу понял,
что ей может чего-то не хватает, и хорошо что в папке рядом он лежал, как-бы для смекалистых ребят,
но откуда, например, какой-нть пенсионер узнает это что надо посмотреть, полазить в папки с установщиком
да ещё и запустить там какой-то экзешник с не особо звучным названием.
А ещё часто бывает дерьмо, когда не оповещается о необходимости иметь .NET фреймворк, я вот его в гробу видал.
Бывают ещё такие жопы что проге нужен конкретный сишный рантайм, но разумеется ни в какой доке
это не указано. Например из VST есть такой spectral suite, там нужен чётко рантайм какого-то года(не помню
какого), если ставишь ниже или выше версию - может уже отваливаться плагин, помню намучился с ним.
Это всё неприятно, но решаемо.
0
Эксперт по электронике
6850 / 3274 / 339
Регистрация: 28.10.2011
Сообщений: 12,802
Записей в блоге: 7
04.05.2021, 11:36
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вся работа заключается в том, чтобы выдать диагностическое сообщение и завершиться с ошибкой? Но ведь это уже делает операционная система. В чём смысл дублировать это поведение?
Это просто пример. Представьте что программа делает что-то еще и вызываемая функция опциональная. Без нее возможно часть функционала будет отсутствовать или использоваться другие менее эффективные функции, но в целом программа задачу будет выполнять. Ни разу не писали такие программы?

Цитата Сообщение от The trick Посмотреть сообщение
Прогер должен знать как работать с типами данных, а не просто тупо копипастить код.
Прогер должен следовать документации, а не догадываться что и где правильнее применить. В данном случае описание функции имеет больший приоритет.

Цитата Сообщение от The trick Посмотреть сообщение
Нет я предлагаю следовать официальной документации где черным по белому написано не полагаться на список возвращаемых значений в описании функций с типом HRESULT.
В описании функции об этом ни слова.

Цитата Сообщение от The trick Посмотреть сообщение
Нет. Код не правильно работает с типом HRESULT.
Покажите на практике ситуацию при которой будет ошибка. То есть чтобы запустить программу с SLIsGenuineLocalEx и увидеть что код работает неправильно.

Цитата Сообщение от The trick Посмотреть сообщение
Да, я то как раз читал то что возвращает функция, а вы похоже нет.
Читали? Вот что там написано.
If the method succeeds, it returns S_OK.
Цитата Сообщение от The trick Посмотреть сообщение
Я тебя попросил прокоментировать цитату из MSDN по поводу обработки HRESULT кодов, а ты мне пишешь про функцию SLIsGenuineLocalEx.
Мы обсуждаем конкретно SLIsGenuineLocalEx и ее описание.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Мол прога запустится сказать, что она обессилила и не смогла.
Я не об этом писал. В первом сообщении пример, но в реальных программах часто приходится использовать функции из новых версий винды, при этом оставляя совместимость с предыдущими. В режиме совместимости программа работает, но может отсутствовать часть функционала или он реализован по другому. Например если нет функции CancelIoEx, то используется CancelIo. При этом программа работает. Если статически линковать функции, программа просто не запустится.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
04.05.2021, 12:30
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Обычно эта проверка лишь часть какой то программы.
Ваша программа не может работать без этой функции. Это не какой‐то плюгин для расширения функциональности, который можно загружать или не загружать. Эта функция является критической. Следовательно, нет смысла самостоятельно повторять таблицу импорта и заполнять её указателями, это всё сделает загрузчик программ операционной системы. Наверное, вы kernel32.dll тоже вручную загружаете, чтобы выдать WARNING и упасть.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
При запуске в WinXP программа падает с ошибкой, итог закономерный.
1. Ваша программа самостоятельно строит аналог таблицы импорта и заполняет её указателями на функции. Если функция не найдена, то программа выдаёт диагностическое сообщение и закрывается с ошибкой.
2. Загрузчик программ заполняет таблицу импорта указателями на функции. Если функция не найдена, загрузчик выдаёт диагностическое сообщение и прекращает загрузку программы с ошибкой.

Эти два пути приводят к одинаковому результату. Это усложнение программы и раздувание кода.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Правильная программа не падает, а предупреждает, что Win устарела
и тут же завершается с ошибкой, ахаха! Всё то же самое делает загрузчик программ.

Вместо нарушения принципов KISS, которые вы тут приводили, достаточно указать поддерживаемую версию операционной системы в READ.ME файле и на странице загрузки и сразу пресекать скачивание.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.05.2021, 15:37  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
и тут же завершается с ошибкой
Цитата Сообщение от Замабувараев Посмотреть сообщение
Если функция не найдена, то программа выдаёт диагностическое сообщение и закрывается с ошибкой.
Что за ерунда? Достаточно уже флудить, если не понимаете элементарных вещей.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
04.05.2021, 15:58
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Что за ерунда? Достаточно уже флудить, если не понимаете элементарных вещей.
Тогда объясните, чем поведение вашей программы отличается от поведения операционной системы при загрузке библиотеки. Я не понимаю.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.05.2021, 17:14  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Я не понимаю.
Если что то не понимаете, как работают программы на PureBasic, то создайте отдельную тему по интересующему вас вопросу.
Не надо разводить OFF в этой теме. Тут вопросы только по конкретно по SLIsGenuineLocalEx.
Считайте это официальным предупреждением.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
05.05.2021, 12:40
Цитата Сообщение от locm Посмотреть сообщение
Я не об этом писал. В первом сообщении пример, но в реальных программах часто приходится использовать функции из новых версий винды
Да я понял про что ты писал. Об этом же Замабувараеву написал. Как раз за такой подход.
Просто конкретно в стартовом примере это ничтожный смысл имеет.
А так да Замавбувараев пишет про то что прога схлопнется с системным сообщением, а
озвученный тобой вариант продолжит свою работу, игнорируя или заменяя функции.
И то и то имеет место быть, например если какой-то функции нет, без которой прога ну ничего
не сделает толком, наверное проще сделать варик Замавбувараев-a. Проще в данном контексте
не значит лучше, системное "функция XXX не найдена в библиотеке YYY" слабо информативно
для пользователя который об этом особо не в курсе.
Хотя и сообщения которые пишут вендоры тоже забавные, вот например сообщение которое
выдаёт драйвер Intel HD Driver:

И как грится, гадай что этому драйверу надо, редкий си рантайм, конкретная версия фреймворка,
директ икс, активация винды, какой-нибудь конкретный пакет обновления или схождение звёзд в поясе ориона.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2021, 12:40
Помогаю со студенческими работами здесь

Проверка на подлинность Windows 7 (не прошла) экран черный
как убить черный экран в семерке? в хр делала, а тут другое дело) муж вчера попробовал, сегодня с Вашей помощью еле комп реанимировала)...

Проверка на подлинность
Здравствуйте! У меня к вам просьба.Не мог бы кто-то помочь мне разобраться с одной очень интересной задачкой по Access? И решения у...

Проверка COOKIE на подлинность
Здравствуйте. Мне нужно проверить куки на подлинность, что пользователь действительно зарегистрирован $db = Db::getConnection(); ...

Проверка на подлинность домена
Доброго времени суток. У меня небольшой сайт и он шлет на vps сервер, всплыло что кто-то открыл другие домены и скорее всего простым...

Активация и проверка на подлинность
копия windows не прошла проверку на подлинностью. что это может быть?как его убрать чтоб оно больше не высвечивалось? а то поменяю тему а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
95
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru