Я хочу передать данные указателя двоичного двоичного объекта в CryptQueryObject (https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptqueryobject), как указано в документации, он может работать с указателем на имя файла или указателем на двоичный двоичный объект, он отлично работает, когда я передаю (c# string)
(есть еще одна перегрузка со строкой в WinCrypt.cs с (c# string)
в ней).
Итак, как правильно передать указатель на неуправляемую DLL из c #?
что у меня так далеко:
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
);