<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Вывод атрибута из файла с Rutoken]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/2369/" />
	<updated>2016-02-03T17:24:35Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/2369/</id>
		<entry>
			<title type="html"><![CDATA[Re: Вывод атрибута из файла с Rutoken]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/9293/#p9293" />
			<content type="html"><![CDATA[<p><a href="http://www.cplusplus.com/reference/cstdio/printf/">http://www.cplusplus.com/reference/cstdio/printf/</a><br />используйте %c а не %s для вывода символа</p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2016-02-03T17:24:35Z</updated>
			<id>https://forum.rutoken.ru/post/9293/#p9293</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Вывод атрибута из файла с Rutoken]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/9291/#p9291" />
			<content type="html"><![CDATA[<p>Пишу программу, необходимо считать атрибут с файла хранящегося на Rutoken S и записать его в строку.</p><p>пользуюсь исходным кодом представленным на <br /><a href="http://developer.rutoken.ru/pages/viewpage.action?pageId=13795364#id-ВстраиваниеустройствРутокенчерезPKCS#11-Созданиеобъектанатокене">http://developer.rutoken.ru/pages/viewp … танатокене</a></p><p>но при компиляции возникает ошибка <br /> </p><div class="codebox"><pre><code>CK_BYTE         new_data[] = “Sample Rutoken data”;
 
CK_ATTRIBUTE attrDataReadTmpl[] = {CKA_VALUE, NULL_PTR, NULL};
CK_ATTRIBUTE attrDataEditTmpl[] = {CKA_VALUE, new_data, sizeof(new_data)};
 
 
while(true)
{
    ...
  
    /* Изменить значение объекта */
    printf(&quot;Setting object value&quot;);
    rv = pFunctionList-&gt;C_SetAttributeValue(hSession,            // Хэндл открытой с правами Пользователя сессии
                                            hData,              // Хэндл объекта ключа
                                            &amp;attrDataEditTmpl[0],  // Шаблон изменения значения атрибута
                                            1);                 // Количество атрибутов в шаблоне
    if (rv != CKR_OK)
    {
        printf(&quot; -&gt; Failed\n&quot;);
        break;
    }
    printf(&quot; -&gt; OK\n&quot;);
  
    /* Получить размер буфера для хранения значения атрибута CKA_VALUE*/
    printf(&quot;Getting object value size&quot;);
    rv = pFunctionList-&gt;C_GetAttributeValue(hSession,            // Хэндл открытой с правами Пользователя сессии
                                            hData,              // Хэндл объекта ключа
                                            &amp;attrDataReadTmpl[0],  // Шаблон получения значения атрибута
                                            1);                 // Количество атрибутов в шаблоне
    if (rv != CKR_OK)
    {
        printf(&quot; -&gt; Failed\n&quot;);
        break;
    }
    printf(&quot; -&gt; OK\n&quot;);
 
    /* Выделить необходимое количество памяти для значения атрибута */
    attrDataReadTmpl-&gt;pValue = (CK_BYTE*)malloc(attrDataReadTmpl-&gt;ulValueLen);
    if (attrDataReadTmpl-&gt;pValue == NULL)
    {
        printf(&quot;Memory allocation for attrDataReadTmpl failed! \n&quot;);
        break;
    }
    memset(attrDataReadTmpl-&gt;pValue,
           0,
           (attrDataReadTmpl-&gt;ulValueLen * sizeof(CK_BYTE)));
  
    /* Получить значение объекта */
    printf(&quot;Getting object value&quot;);
    rv = pFunctionList-&gt;C_GetAttributeValue(hSession,            // Хэндл открытой с правами Пользователя сессии
                                            hData,              // Хэндл объекта ключа
                                            &amp;attrDataReadTmpl,  // Шаблон получения значения атрибута
                                            1);                 // Количество атрибутов в шаблоне
    if (rv != CKR_OK)
    {
        printf(&quot; -&gt; Failed\n&quot;);
        break;
    }
    printf(&quot; -&gt; OK\n&quot;);
  
    /* Распечатать буфер со значением объекта */
    printf(&quot;Data is:\n&quot;);
    for (i = 0;
         i &lt; attrDataReadTmpl-&gt;ulValueLen;
         i++)
        printf(&quot;%s&quot;, attrDataReadTmpl-&gt;pValue[i]);
    break;
}
  
if (attrDataReadTmpl-&gt;pValue)
{
    free(attrDataReadTmpl-&gt;pValue);
    attrDataReadTmpl-&gt;pValue = NULL_PTR;
    attrDataReadTmpl-&gt;ulValueLen= 0;
}
  </code></pre></div><br /><p>а именно в строчке <br /></p><div class="codebox"><pre><code>        printf(&quot;%s&quot;, attrDataReadTmpl-&gt;pValue[i]); </code></pre></div><p>код ошибки <br /></p><div class="codebox"><pre><code>[bcc32 Error] Unit1.cpp(273): E2453 Size of the type &#039;void&#039; is unknown or zero
  Full parser context
    Unit1.cpp(44): parsing: void _fastcall TForm1::FormShow(TObject *)</code></pre></div><p>перерыл весь интрнет ничего путного не нашел,<br />подскажите что делать, или дайте подобный семпл!</p>]]></content>
			<author>
				<name><![CDATA[pva_57]]></name>
				<uri>https://forum.rutoken.ru/user/10009/</uri>
			</author>
			<updated>2016-02-03T09:26:58Z</updated>
			<id>https://forum.rutoken.ru/post/9291/#p9291</id>
		</entry>
</feed>
