Пример #1
0
        /// <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);
        }