Ошибка при большом количестве подписей

Добрый день!

У нас есть приложение на ASP.NET (C#), которое крутится в IIS. В самом приложении есть логика подписания документа через KalkanCryptCOM, который мы недавно обновили на сервере Windows.
Само подписание работает корректно, но когда начинают подписывать большое количество пользователей, то в один момент запускается дебаггер IIS-а, где мы можем выбрать либо debug w3wp.exe, либо закрыть окно, но после наше приложение просто перезапускается, точнее IIS перезапускает его. В логах сервера нашли только 1 более менее подходящую ошибку:

Faulting module name: ucrtbase.DLL, version: 10.0.14393.2990, time stamp: 0x5caeb96f
Exception code: 0xc0000409

В интернете нашли информацию, что это переполнение буффера

https://stackoverflow.com/questions/23409809/how-do-you-diagnose-the-exception-code-0xc0000409-on-windows
The clue to the problem is in the exception code: 0xc0000409
0xc0000409 means STATUS_STACK_BUFFER_OVERRUN.

И мы хотели бы понять, может ли быть такое, что KalkanCryptCOM.dll у нас в одном экземпляре и из за большого количества запросов на подписание он просто перегружается?
Дополнительно, у нас только 1 сервер, соответственно 1 KalanCryptCOM для подписания (без NCALayer).

Возможно, кто то уже сталкивался с такой ошибкой?

Здравствуйте! Делаете ли Вы KC_Finalize() после каждого подписания?

Добрый день!

Нет, а что он делает?
Дополнительно, мы бы хотели понять, можем ли мы подписывать в нескольких потоках, например, через Semaphore?

Добрый день!
KC_Finalize() используется в случае, если Вы заканчиваете работу с библиотекой Kalkan.
Подскажи, как именно у вас реализовано? Один раз проинициализировали библиотеку- Init(), а после при каждом подписании вызываете метод SignData()?

Сама библиотека KalkanCryptCOM не поддерживает работу в нескольких потоках. Но вы можете реализовать семафоры, но так чтобы одновременно два потока не пересекались. Обязательно дожидаться освобождения.

Но вот не пойму логику работы с библиотекой. Как называется ваша компания?

Добрый день!

Спасибо за ответ.
Мы реализовали через локеры (.NET) и поэтому все подписывается по очереди, но у нас не было вызова Finalize(), скорее всего поэтому и была ошибка

Не уверен, что Вы верно поняли меня. Напишите на почту knca@pki.gov.kz с более подробным описанием процесса подписания.

Постараюсь объяснить тут. Вы правильно указали, мы делаем следующим образом:

  1. Мы делаем 1 раз Init()
  2. Далее при каждом подписании вызываем SignData()

НУ в таком случае finalize не имеет особого значения.
Все же пришлите код на knca@pki.gov.kz и описание еще.

Я неправильно указал нашу реализацию - оказывается у нас производится Init() на каждый запрос подписания.

Также отправили на knca@pki.gov.kz пример с нашим кодом