<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Guardant &mdash; Включение и определение режима HID]]></title>
		<link>https://forum.guardant.ru/topic/1105/</link>
		<atom:link href="https://forum.guardant.ru/feed/rss/topic/1105" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Включение и определение режима HID».]]></description>
		<lastBuildDate>Mon, 19 Jan 2026 18:55:09 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5560/#p5560</link>
			<description><![CDATA[<div class="quotebox"><cite>Тимофей Ершов пишет:</cite><blockquote><p>Сейчас сложно ответить на этот вопрос конкретно. Данная функциональность была реализована очень давно. Известно, что она уже присутствовала в Guardant SDK 7 (Update 1), выпущенном в 2014 году. К сожалению, более детальные исторические заметки о версиях для отдельных типов ключей (Sign/Code) в открытом доступе отсутствуют.</p></blockquote></div><p>Так вопрос и не про открытый доступ, а к Вам как к разработчику ключей и прошивок.<br />Поиск по открытым источникам сейчас прекрасно выполняет ИИ.<br />По непроверенным данным, которые выдает ИИ поддержка GrdSetDriversMode для ключей Guardant Sign появилась в 2020-2022 годах, что соответствует версии микропрограммы 1.0.6.7-1.0.6.10.<br />В качестве пруфов даются ссылки на комментарии в SDK тех лет.</p><p>Я понимаю, что это может быть фантазии и бред ИИ, но хотелось бы конкретной технической информации от разработчика.<br />Пока даже бредовый ИИ дает больше информации, чем официальная техподдержка Guardant.<br />Не могу сказать, что я этим доволен.</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Mon, 19 Jan 2026 18:55:09 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5560/#p5560</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5559/#p5559</link>
			<description><![CDATA[<p>Добрый день.<br /></p><div class="quotebox"><cite>burlak пишет:</cite><blockquote><p>Есть ли описание &quot;Что нового&quot; для версий программы ключа Sign?</p></blockquote></div><p>В рамках технологии Guardant SDK появилась поддержка режима работы ключа - WinUSB.<br /></p><div class="quotebox"><cite>burlak пишет:</cite><blockquote><p>Я бы хотел понять с какой версии появилась поддержка GrdSetDriverMode.</p></blockquote></div><p>Сейчас сложно ответить на этот вопрос конкретно. Данная функциональность была реализована очень давно. Известно, что она уже присутствовала в Guardant SDK 7 (Update 1), выпущенном в 2014 году. К сожалению, более детальные исторические заметки о версиях для отдельных типов ключей (Sign/Code) в открытом доступе отсутствуют.</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Mon, 19 Jan 2026 14:52:15 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5559/#p5559</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5553/#p5553</link>
			<description><![CDATA[<p>Небольшое дополнение.</p><p>По моей просьбе были закуплены для экспериментов современные ключи Sign и Code с датой производства - осень 2025.<br />До этого у меня были ключи Sign производства 2014 года.</p><p>Эксперименты показали, что с современной версией Sign функция GrdSetDriverMode работает также хорошо, как и с ключом Code.<br />По отображаемым данным утилиты grddiag старые и новые ключи Sign отличаются только параметром &quot;Номер программы&quot;.<br />Для старых &quot;1, 0, 2, 25&quot;, а для новых &quot;1, 0, 6, 18&quot;.</p><p>Есть ли описание &quot;Что нового&quot; для версий программы ключа Sign?<br />Я бы хотел понять с какой версии появилась поддержка GrdSetDriverMode.</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Wed, 14 Jan 2026 08:55:32 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5553/#p5553</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5542/#p5542</link>
			<description><![CDATA[<p><strong>1. О работе функции GrdSetDriverMode</strong><br />Вы правильно поняли: функция GrdSetDriverMode действительно предназначена для программного переключения режима работы ключа (между драйверным и HID-режимом) из клиентского приложения в реальном времени. Однако, как мы уже упоминали, эта функция поддерживается <strong>только ключами Guardant Code</strong>.</p><p>Да, вы можете заложить в логику вашего приложения вызов GrdSetDriverMode, чтобы позволить пользователям переопределять режим, заданный при предпродажной подготовке ключа. При смене режима ключ потребуется переподключить к рабочей станции.</p><p><strong>2. О параметрах функции GrdSetDriverMode</strong><br />Вот основные параметры функции GrdSetDriverMode:</p><div class="codebox"><pre><code>int GrdSetDriverMode(
  HANDLE hGrd,
  DWORD dwMode,
  void *pReserved
);</code></pre></div><p><strong>Описание параметров:</strong></p><p>hGrd — хэндл, через который выполняется операция.</p><p>dwMode — флаг, устанавливающий USB-режим использования ключей Guardant Code/Code Time:</p><p>GrdDM_GRD_DRV (0) — Guardant driver;</p><p>GrdDM_USB_HID (1) — HID driver;</p><p>GrdDM_WINUSB (2) — WINUSB driver.</p><p>pReserved — зарезервировано.</p><p><strong>3. О значениях dwGlobalFlags</strong><br />Параметр dwGlobalFlags в функции GrdProtect определяет финальное состояние глобальных флагов ключа после выполнения операции. Вот поддерживаемые флаги:</p><ul><li><p>GrdGF_ProtectTime = 1 (блокировка вызова GrdSetTime)</p></li></ul><ul><li><p>GrdGF_HID = 2 (ключ работает в HID-режиме)</p></li></ul><ul><li><p>GrdGF_OnlyOneSessKey = 4 (единственный сессионный ключ для Guardant API)</p></li></ul><ul><li><p>GrdGF_2ndSessKey = 8 (единственный сессионный ключ для автозащиты)</p></li></ul><p><strong>4. Дополнительные ресурсы</strong><br />Для более глубокого изучения API Guardant рекомендуем обратиться к нашему порталу документации:</p><p><a href="https://dev.guardant.ru/display/DOC/GrdSetDriverMode">GrdSetDriverMode</a></p><p><a href="https://dev.guardant.ru/display/DOC/GrdProtect">GrdProtect</a></p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Thu, 11 Dec 2025 10:49:20 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5542/#p5542</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5539/#p5539</link>
			<description><![CDATA[<p>Вдогонку.<br /></p><div class="quotebox"><blockquote><p>Подробное описание функции можно найти у нас на портале документации - <a href="https://dev.guardant.ru/display/DOC/GrdProtect.">https://dev.guardant.ru/display/DOC/GrdProtect.</a></p></blockquote></div><p>Что-то я в подробном описании не нашел описания параметров для Guardant Code...</p><p>Интересно было бы узнать, какие значения для dwGlobalFlags поддерживаются и как согласуются с последующими вызовами GrdSetDriverMode.</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Tue, 09 Dec 2025 13:35:48 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5539/#p5539</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5538/#p5538</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Параметр dwGlobalFlags в функции GrdProtect — это финальное значение глобальных флагов, которое будет установлено в ключе в момент этого вызова. Это не начальное, а итоговое состояние.</p></blockquote></div><p>В контексте того, что прошивка (и вызов GrdProtect) происходят перед передачей ключа конечному пользователю, а потом глобальные флаги могут быть изменены вызовом GrdSetDriverMode, то это, так сказать, значение по умолчанию получается.<br />Клиентское приложение может какие-то свои настройки считать и вызвать GrdSetDriverMode для переопределения режима HID, заданного при предпродажной прошивке ключа. Верно?</p><div class="codebox"><pre><code>Поэтому вызов GrdProtect без предварительного GrdInit является некорректным с точки зрения предназначения API.</code></pre></div><p>Увы, я понимаю, что это так.<br />Но для ключей Sign приходится выбирать - шашечки или ехать.<br />Однонаправленное включение режима HID на практике работает.</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Tue, 09 Dec 2025 13:14:34 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5538/#p5538</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5537/#p5537</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Функция GrdSetDriverMode позволяет переключать режим из клиентской программы в рантайм?</p></blockquote></div><p>Да, верно. Функция GrdSetDriverMode предназначена именно для программного переключения режима работы ключа (между драйверным и HID-режимом) из клиентского приложения в реальном времени. Эта функция работает только с ключами Guardant Code.</p><div class="quotebox"><blockquote><p>Флаги, указываемые в GrdProtect — это начальное значение или что?</p></blockquote></div><p>Параметр dwGlobalFlags в функции GrdProtect — это финальное значение глобальных флагов, которое будет установлено в ключе в момент этого вызова. Это не начальное, а итоговое состояние.</p><div class="quotebox"><blockquote><p>...использование GrdProtect без GrdInit...</p></blockquote></div><p>Вы правы в своем техническом анализе. Подробное описание функции можно найти у нас на портале документации - <a href="https://dev.guardant.ru/display/DOC/GrdProtect">https://dev.guardant.ru/display/DOC/GrdProtect</a>. GrdProtect используется на завершающем этапе реорганизации памяти ключа.<br />Этот процесс включает:</p><p>GrdInit — полная инициализация (сброс) памяти ключа.</p><p>Запись всех необходимых данных (таблиц, алгоритмов, ячеек).</p><p>GrdProtect — финализация конфигурации, установка защит и глобальных флагов.</p><p>Поэтому вызов GrdProtect без предварительного GrdInit является некорректным с точки зрения предназначения API.</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Tue, 09 Dec 2025 12:13:27 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5537/#p5537</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5527/#p5527</link>
			<description><![CDATA[<p>Спасибо за ответ.</p><div class="quotebox"><blockquote><p>Эта функция работает только с ключами Guardant Code. Более подробно о ней можно узнать на портале документации - GrdSetDriverMode.</p></blockquote></div><p>Все-таки у меня не складывается полная картина.<br />Функция GrdSetDriverMode позволяет переключать режим из клиентской программы в рантайм?<br />Или она изменяет глобальные флаги при прошивке ключа между вызовами GrdInit и GrdProtect?<br />Флаги указываемые в GrdProtect - это начальное значение или что?</p><p>Про ключи модели Code у меня не праздное любопытство.<br />Если они реально удобнее в плане работы без драйверов Guardant, то мы можем принять решение о добавлении их поддержки в нашем софте.</p><p>А пока остались вопросы по модели Sign.<br />Как я понял, поддержка HID фиксируется в момент вызова GrdProtect с флагом GrdGF_HID или без него.<br />При полной прошивке ключа с вызовом GrdInit и последующим формированием памяти ключа все ок.<br />Т.е. для вновь продаваемых ключей мы научились на выбор делать их с глобальными флагами GrdGF_HID или 0.</p><p>Остается проблема с ключами Sign, которые уже находятся на руках у пользователей.<br />Многие обновляют компьютеры, с включенным модулем TPM драйверы Guardant не работают.<br />Включение удаленно поддержки HID для таких пользователей - актуальная проблема.<br />У нас есть собственный механизм удаленной ограниченной записи в ключ на стороне пользователя.<br />Т.е. потенциально есть возможность указать другое значение глобальных флагов при вызове GrdProtect.</p><p>Эксперименты с вызовом GrdProtect без предшествующего GrdInit показали, что флаг GrdGF_HID включается, но указание флагов 0 не отключает HID. Т.е. получается только одностороннее включение HID без возможности отката.<br />Смысл отказа от вызова GrdInit - не сбрасывать всю память ключа, на стороне пользователя нет возможности сделать полноценную прошивку.</p><p>В примере из SDK demo.cpp я добавил такой код:<br /></p><div class="codebox"><pre><code>/*
    printf(&quot;Init: &quot;);
    nRet = grdDongle.Init();
    ErrorHandling(nRet);
    */

    uint32_t dwWrProt = 3952;
    uint32_t dwRdProt = 3952;
    uint32_t dwNumFunc = 40;
    uint32_t dwTableLMS = 0;
    uint32_t dwGlobalFlags = 0/*GrdGF_HID*/;

    printf(&quot;Protect: &quot;);
    nRet = grdDongle.Protect(dwWrProt, dwRdProt, dwNumFunc, dwTableLMS, dwGlobalFlags);
    ErrorHandling(nRet);</code></pre></div><p>Если раскоментировать dwGlobalFlags = GrdGF_HID, то ключ переводится в режим HID без вызова Init.<br />А вот когда dwGlobalFlags = 0, то глобальные флаги не обнуляются.<br />Если добавить вызов Init, то флаги и устанавливаются, и обнуляются, но при этом сбрасывается вся остальная память ключа (чего хотелось бы избежать).</p><p>Может я чего-то не понимаю на базовом уровне?<br />Вызов Protect с флагами dwGlobalFlags = 0 проходит без ошибки, но результат контринтуитивен...</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Mon, 08 Dec 2025 09:19:35 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5527/#p5527</guid>
		</item>
		<item>
			<title><![CDATA[Re: Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5526/#p5526</link>
			<description><![CDATA[<p>Добрый день.<br /></p><div class="quotebox"><cite>burlak пишет:</cite><blockquote><p>Проблема в том, что ключ Sign, а не Code? Хотелось бы пояснений на этот счет.</p></blockquote></div><p>Да, все верно. Эта функция работает только с ключами Guardant Code. Более подробно о ней можно узнать на портале документации - <a href="https://dev.guardant.ru/display/DOC/GrdSetDriverMode">GrdSetDriverMode</a>.</p><div class="quotebox"><cite>burlak пишет:</cite><blockquote><p>Как мне программно считать глобальные флаги?</p></blockquote></div><p>Попробуйте использовать - <a href="https://dev.guardant.ru/pages/viewpage.action?pageId=4751687">структуру TGrdFindInfo</a>. Она должна читать поле с глобальными флагами.</p><p>typedef struct {<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwPublicCode;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Общий код доступа в числовом виде <br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; byHrwVersion;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Аппаратная версия ключа (биты 0 -3: minor, биты 4 - 7: major)<br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; byMaxNetRes;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Максимальный ресурс лицензий сетевого ключа (программируется компанией &quot;Актив&quot; при продаже ключа)<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wType;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Флаги типа ключа <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwID;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ID ключа (программируется компанией &quot;Актив&quot; при продаже ключа)// Соответствующие поля доступны из UAM режима<br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; byNProg;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Номер программы<br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; byVer;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Версия программы<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wSN;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Серийный номер<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wMask;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Битовая маска<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wGP;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Счетчик запусков GP (устаревшая технология, не используется)<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wRealNetRes;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Текущий ресурс лицензий сетевого ключа. Задается разработчиком, должен быть &lt;= byMaxNetRes<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwIndex;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Индекс, используемый утилитами удаленного программирования<br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; abyReservedISEE[0x1C];&nbsp; // Зарезервированная память для будущего использования<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wWriteProtectS3;&nbsp; &nbsp; &nbsp; &nbsp; // SAM-адрес 1-го байта, доступного для записи. Если 0, запреты на запись отсутствуют.<br />&nbsp; &nbsp;WORD&nbsp; &nbsp; wReadProtectS3;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// SAM-адрес 1-го байта, доступного для чтения. Если 0, запреты на чтение отсутствуют.<br />&nbsp; <strong> WORD&nbsp; &nbsp; wGlobalFlags;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Глобальные флаги</strong><br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwDongleState;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Состояние ключа.см.GrdDSF_XXX определение // В наличии с: // 1. Stealth Sign.(Номер прошивки &gt;= 0x01000011h or 01.00.00.11)// 2. Guardant Code. <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwOldMPNum;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Старый номер прошивки (перед SFU).<br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; abyReservedH[0x100 - 0x1A - 0x1C - 0x0E]; // Зарезервированная память для будущего использования<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwGrDrv_Platform;&nbsp; &nbsp; &nbsp; &nbsp;// Разрядность драйвера.Платформа (Win32/Win64).<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwGrDrv_Vers;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Версия драйвера(0х05401234=5.40.12.34)<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwGrDrv_Build;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Сборка драйвера<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwGrDrv_Reserved;&nbsp; &nbsp; &nbsp; &nbsp;// Зарезервированое значение <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwRkmUserAddr;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Адрес начала пользовательской памяти в 2-х байтовых словах <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwRkmAlgoAddrW;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Адрес таблицы размещения защищенных ячеек в словах<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwPrnPort;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Адрес LPT-порта (или 0, если ключ - USB)<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwClientVersion;&nbsp; &nbsp; &nbsp; &nbsp; // Зарезервированная версия клиента ключа // SAP start<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwRFlags;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Зарезервировано. Тип MCU <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwRProgVer;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Версия микропрограммы (в MCU)<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwRcn_rc;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Зарезервированный текущий номер и код ответа<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwNcmps;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Зарезервированный номер условий сравнения<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwNSKClientVersion;&nbsp; &nbsp; &nbsp;// Зарезервированная версия клиента (low byte - minor, hi - major)<br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwModel;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Модель ключа <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwMcuType;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Тип ключа MCU <br />&nbsp; &nbsp;DWORD&nbsp; &nbsp;dwMemoryType;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Тип памяти ключа&nbsp; // Зарезервировано для будущего использования <br />&nbsp; &nbsp;BYTE&nbsp; &nbsp; abyReserved[0x200 - 0x100 - 0x28]; // Зарезервированная память для будущего использования. <br />} TGrdFindInfo;</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Mon, 08 Dec 2025 08:20:04 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5526/#p5526</guid>
		</item>
		<item>
			<title><![CDATA[Включение и определение режима HID]]></title>
			<link>https://forum.guardant.ru/post/5517/#p5517</link>
			<description><![CDATA[<p>Здравствуйте.</p><p>Наш продукт использует ключи Guardant Sign, которые умеют работать в режиме HID.<br />Для предпродажной подготовки ключей используется собственный софт для прошивки памяти ключа.</p><p>С переводом в режим HID я разобрался, надо вызывать GrdProtect с параметром dwGlobalFlags=GrdGF_HID.</p><p>Не понятно, как и когда использовать функцию GrdSetDriverMode.<br />У меня всегда выдает ошибку 1 GrdE_DongleNotFound.<br />В примерах из SDK нигде не вызывается.<br />Проблема в том, что ключ Sign, а не Code? Хотелось бы пояснений на этот счет.</p><p>Второй вопрос по определению текущего режима ключа Guardant driver/HID.<br />Утилита grddiag.exe показывает &quot;Глобальные флаги HID&quot;.<br />Как мне программно считать глобальные флаги?<br />В адресах GrdSAM_... или GrdUAM_... для GrdRead ничего похожего не нашел.</p><p>Если я руками в grdutil.exe переключаю Driver/HID в панели инструментов, то вижу, что в .nsd-файле меняется 4 байта со смещением 4 в Data. Как мне в runtime поймать это отличие в памяти ключа?</p>]]></description>
			<author><![CDATA[null@example.com (burlak)]]></author>
			<pubDate>Tue, 02 Dec 2025 10:28:35 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/5517/#p5517</guid>
		</item>
	</channel>
</rss>
