【问题标题】:Get a byte array from gtop11dotnet.dll in c#从 c# 中的 gtop11dotnet.dll 获取字节数组
【发布时间】:2011-06-30 13:41:14
【问题描述】:

我有一个 gtop11dotnet.dll。它是来自 Gemalto 网站的适用于 Windows v2.2.0.9 的 .NET PKCS#11 库。 DLL 包含 C_GetCardProperty 方法,可用于检索智能卡的序列号或 GUID。根据 PKCS#11 User's Guide 和 .NET Integration Guide,它是“byte[] GetCardProperty(byte property, byte flags)”。它接收两个字节作为参数并检索例如字节数组形式的序列号或 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.
}

感谢您的帮助。

【问题讨论】:

    标签: .net smartcard pkcs#11


    【解决方案1】:

    什么是“.NET PKCS#11”? PKCS#11 v2.20 和 v2.30 草案不包含“C_GetCardProperty”方法。您可能正面临一些与世界其他地方已知的与 PCKS#11 无关的专有 Gemalto/.NET 事物,而 Gemalto 通过在任意函数前加上“C_”并调用结果 cryptoki 做了一件“好事” . PKCS#11 是一个 C 接口,与托管/非托管代码或 .NET 无关。

    【讨论】:

    • 是的,它是金雅拓的专有功能。我从Gemalto website 下载了它,在 C:\Program Files\Gemalto\DotNet PKCS11 中安装并获得了 gtop11dotnet.dll。在该 DLL 中有 C 函数 C_GetCardProperty,我用 Dependency Walker 仔细检查了它。但是如何获取函数返回的序列号或GUID呢?
    • 抱歉,您需要向金雅拓咨询。更好的是 - 告诉他们删除该函数或将其重命名为 Gemalto_GetCardProperty - 滥用 PKCS#11 不会带来任何好处。
    【解决方案2】:

    试试这个。

    public static extern uint C_GetCardProperty(uint slotID, byte property, byte flags, byte[] blob, ref byte length);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2021-09-03
      相关资源
      最近更新 更多