C# 如何调用非托管WinCrypt.CryptQueryObject?
我想将二进制blob指针数据传递给CryptQueryObject() 正如文档中所述,它可以使用指向文件名的指针,或者只指向二进制blob的指针,当我传递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;
(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,是的,它是字节[]