Получить массив байтов из gtop11dotnet.dll в С#

У меня есть gtop11dotnet.dll. Это библиотека .NET PKCS#11 для Windows версии 2.2.0.9 с веб-сайта Gemalto. DLL содержит метод C_GetCardProperty, который можно использовать для получения серийного номера или GUID смарт-карты. Согласно Руководству пользователя PKCS#11 и Руководству по интеграции .NET, это «byte[] GetCardProperty (свойство байта, байтовые флаги)». Он получает два байта в качестве параметров и извлекает, например. серийный номер или GUID в виде массива байтов. Мой вопрос: как получить серийный номер и сохранить его в массиве управляемых байтов?

Вот моя попытка:

[DllImport("gtop11dotnet.dll")]
public static extern byte[] C_GetCardProperty(byte property, byte flags);
public static void Main()
{
    byte[] bytes = new byte[12];
    bytes = C_GetCardProperty(0x06, 0x00) //Error at this line -> Cannot marshal 'return value': Invalid managed/unmanaged type combination.
}

Спасибо за любую помощь.


person Almir    schedule 30.06.2011    source источник


Ответы (2)


Что такое «.NET PKCS#11»? Проект PKCS#11 v2.20 и v2.30 не содержит метод C_GetCardProperty. Вы, вероятно, столкнулись с какой-то проприетарной вещью Gemalto/.NET, которая не имеет ничего общего с PCKS#11, известной остальному миру, и Gemalto делает «хорошее» дело, добавляя к произвольным функциям префикс «C_» и вызывая результат cryptoki. . PKCS#11 — это интерфейс C и не имеет ничего общего с управляемым/неуправляемым кодом или .NET.

person Martin Paljak    schedule 30.06.2011
comment
Да, это запатентованная функция Gemalto. Я скачал его с веб-сайта Gemalto, установил и получил gtop11dotnet.dll в C:\Program Files\Gemalto\DotNet PKCS11. Внутри этой DLL есть функция C C_GetCardProperty, я дважды проверил ее с помощью Dependency Walker. Но как получить серийный номер или GUID, который возвращает функция? - person Almir; 01.07.2011
comment
Извините, вам нужно спросить Gemalto об этом. А еще лучше — скажите им, чтобы они удалили функцию или переименовали ее в Gemalto_GetCardProperty — злоупотребление PKCS#11 ни к чему хорошему не приведет. - person Martin Paljak; 01.07.2011

Попробуй это.

public static extern uint C_GetCardProperty (uint slotID, свойство байта, байтовые флаги, байт [] blob, длина ссылки в байте);

person Tiago Elias    schedule 28.02.2013