C# 如何调用非托管WinCrypt.CryptQueryObject?

C# 如何调用非托管WinCrypt.CryptQueryObject?,c#,unmanaged,C#,Unmanaged,我想将二进制blob指针数据传递给CryptQueryObject() 正如文档中所述,它可以使用指向文件名的指针,或者只指向二进制blob的指针,当我传递(c#string) (WinCrypt.cs中还有另一个字符串重载,其中包含(c#string)) 那么如何从c#正确地传递指向非托管DLL的指针呢 到目前为止,我所拥有的: byte[] BinaryData = // what I Really have as data; IntPtr pvContext = IntPtr.Zero;

我想将二进制blob指针数据传递给CryptQueryObject() 正如文档中所述,它可以使用指向文件名的指针,或者只指向二进制blob的指针,当我传递
(c#string)
(WinCrypt.cs中还有另一个字符串重载,其中包含
(c#string)

那么如何从c#正确地传递指向非托管DLL的指针呢

到目前为止,我所拥有的:

byte[] BinaryData = // what I Really have as data;
IntPtr pvContext = IntPtr.Zero;
unsafe {
 // NOTE(---): WARNING !!! UNSAFE UNMANAGED CODE
 GCHandle pinnedBinaryData = GCHandle.Alloc(BinaryData, GCHandleType.Pinned);
 IntPtr pointer = pinnedBinaryData.AddrOfPinnedObject();


 WinCrypt.CryptQueryObject(WinCrypt.CERT_QUERY_OBJECT_BLOB, pointer, WinCrypt.CERT_QUERY_CONTENT_FLAG_CRL,
  WinCrypt.CERT_QUERY_FORMAT_FLAG_BINARY, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero,
  IntPtr.Zero, IntPtr.Zero, ref pvContext);

 pinnedBinaryData.Free();
}
// NOTE(---): this is my overloading in WinCrypt.cs
[DllImport("CRYPT32.DLL", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool CryptQueryObject(
 int dwObjectType,
 [MarshalAs(UnmanagedType.SysInt)] IntPtr pvObject,
 int dwExpectedContentTypeFlags,
 int dwExpectedFormatTypeFlags,
 int dwFlags,
 IntPtr pdwMsgAndCertEncodingType,
 IntPtr pdwContentType,
 IntPtr pdwFormatType,
 IntPtr phCertStore,
 IntPtr phMsg,
 ref IntPtr ppvContext
);

我假设您的
二进制blob指针数据
是一个C#字节数组,您想封送到
CryptQueryObject
?@martin,是的,它是字节[]