/// <summary> /// Проверка подписи, добавленной в конец исходного файла (расширенная) /// </summary> /// <param name="file">Исходный файл с подписями</param> /// <param name="keys">Ключи проверки подписей отправителей</param> /// <param name="count">Число обнаруженных подписей</param> /// <param name="list">Массив результатов проверки каждой подписи</param> /// <returns>0 или код ошибки</returns> public static int VerifyEx(string file, OpenKey[] keys, out byte count, out CheckList list) { var allocated = new List <IntPtr>(); int ptrSize = Marshal.SizeOf(typeof(IntPtr)); IntPtr keysPtr = Marshal.AllocHGlobal(ptrSize * keys.Length); for (int i = 0; i < keys.Length; i++) { IntPtr keyPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(OpenKey))); allocated.Add(keyPtr); Marshal.StructureToPtr(keys[i], keyPtr, false); Marshal.WriteIntPtr(keysPtr, i * ptrSize, keyPtr); } int ret = Wbotho.CheckFileSignEx(file, keysPtr, (uint)keys.Length, out count, out list); Marshal.FreeHGlobal(keysPtr); foreach (IntPtr ptr in allocated) { Marshal.FreeHGlobal(ptr); } return(ret); }