<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Контроль очередности рутокенов]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/3556/" />
	<updated>2022-04-07T17:28:55Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/3556/</id>
		<entry>
			<title type="html"><![CDATA[Re: Контроль очередности рутокенов]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/17273/#p17273" />
			<content type="html"><![CDATA[<p>да, спасибо, потратил целый день на исследования, но добился результата))<br />пример, переименовываем первый рутокен в нулевой<br /></p><div class="codebox"><pre><code>    SCARDCONTEXT hContext; // дискриптор контекста
    LONG         result; // результат
    LPTSTR       pmszReaders = NULL; // имена групп ридеров, NULL - все
    LPTSTR       pReader; // список ридеров
    DWORD        cch = SCARD_AUTOALLOCATE; // длина буффера

    // Получаем контекст
    result = SCardEstablishContext(SCARD_SCOPE_SYSTEM,
                                   NULL,
                                   NULL,
                                   &amp;hContext);
    if (SCARD_S_SUCCESS != result)
    {
        return 1;
    }

    // Получаем список ридеров
    result = SCardListReaders(hContext,
                              pmszReaders,
                              (LPTSTR)&amp;pmszReaders,
                              &amp;cch);
    if (SCARD_S_SUCCESS != result)
    {
        return 2;
    }

    // Выводим в консоль
    pReader = pmszReaders;
    while (&#039;\0&#039; != *pReader)
    {
        printf(&quot;SCardListReaders %S\n&quot;, pReader);
        pReader = pReader + wcslen((wchar_t *)pReader) + 1;
    }

    // Освобождение памяти
    result = SCardFreeMemory(hContext, pmszReaders);
    if (SCARD_S_SUCCESS != result)
    {
        return 3;
    }


    // Переименовывание ридера

    SCARDHANDLE hCardHandle; // дискриптор ридера
    DWORD       dwAP; // флаг протокола

    // Подключаемся к ридеру
    result = SCardConnectA(hContext,
                           &quot;Aktiv Rutoken ECP 1&quot;,
                           SCARD_SHARE_SHARED,
                           SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
                           &amp;hCardHandle,
                           &amp;dwAP);
    if (SCARD_S_SUCCESS != result)
    {
        return 4;
    }

    LPBYTE pbAttr = NULL; // указатель на буффер с атрибутом, в нашем случае имя
    DWORD  cByte = SCARD_AUTOALLOCATE; // длина буффера

    // Получаем атрибуты ридера
    result = SCardGetAttrib(hCardHandle,
                            SCARD_ATTR_DEVICE_SYSTEM_NAME,
                            (LPBYTE)&amp;pbAttr,
                            &amp;cByte);
    if (SCARD_S_SUCCESS != result)
    {
        return 5;
    }

    // Добавляем новое имя ридеру
    result = SCardIntroduceReader(hContext,
                                  TEXT(&quot;Aktiv Rutoken ECP 0&quot;),
                                  (LPCTSTR)pbAttr);
    if (SCARD_S_SUCCESS != result)
    {
        return 6;
    }

    // Удаляем старое имя
    result = SCardForgetReaderA(hContext, &quot;Aktiv Rutoken ECP 1&quot;);
    if (SCARD_S_SUCCESS != result)
    {
        return 7;
    }

    // Дисконект от ридера
    result = SCardDisconnect(hCardHandle, SCARD_LEAVE_CARD);
    if (SCARD_S_SUCCESS != result)
    {
        return 8;
    }

    // Освобождение памяти
    result = SCardFreeMemory(hContext, pbAttr);
    if (SCARD_S_SUCCESS != result)
    {
        return 9;
    }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[regnor]]></name>
				<uri>https://forum.rutoken.ru/user/11725/</uri>
			</author>
			<updated>2022-04-07T17:28:55Z</updated>
			<id>https://forum.rutoken.ru/post/17273/#p17273</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Контроль очередности рутокенов]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/17270/#p17270" />
			<content type="html"><![CDATA[<p><strong>regnor</strong>, добрый день. Порядковый номер устройству назначает <a href="https://docs.microsoft.com/en-us/windows/win32/secauthn/smart-card-resource-manager">Smart Card Resource Manager</a>.</p><p>Скорее вам подойдут эти API:<br />- <a href="https://docs.microsoft.com/en-us/windows/win32/secauthn/smart-card-database-query-functions">https://docs.microsoft.com/en-us/window … -functions</a><br />- <a href="https://docs.microsoft.com/en-us/windows/win32/secauthn/smart-card-and-reader-access-functions">https://docs.microsoft.com/en-us/window … -functions</a></p>]]></content>
			<author>
				<name><![CDATA[Павел Анфимов]]></name>
				<uri>https://forum.rutoken.ru/user/7338/</uri>
			</author>
			<updated>2022-04-07T07:24:09Z</updated>
			<id>https://forum.rutoken.ru/post/17270/#p17270</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Контроль очередности рутокенов]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/17269/#p17269" />
			<content type="html"><![CDATA[<p>Приветствую<br />Как драйвер контролирует порядок устройств, то есть какой рутокен под номером 0, какой 1 и так далее? И вообще контролирует ли?<br />Если контролирует, то есть ли возможность через ваше апи поменять порядок рутокенов, то есть который был под номером 1, сделать его нулевым, и наоборот?<br />В данный момент я решаю это переподключением устройств через вин апи, то есть отключаю все рутокены, и подключаю их в нужном порядке...<br />Хотелось бы узнать, есть ли менее извращенный способ?</p>]]></content>
			<author>
				<name><![CDATA[regnor]]></name>
				<uri>https://forum.rutoken.ru/user/11725/</uri>
			</author>
			<updated>2022-04-07T06:12:23Z</updated>
			<id>https://forum.rutoken.ru/post/17269/#p17269</id>
		</entry>
</feed>
