Как позвонить на неуправляемый WinCrypt.CryptQueryObject? - PullRequest
0 голосов
/ 11 октября 2019

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

Итак, как правильно передать указатель на неуправляемую DLL из c #?

enter image description here

что у меня так далеко:

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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...