Безопасность нитей в интерфейсе сканирования Windows

Интерфейс сканирования на наличие вредоносного ПО Windows (AMSI) содержит абстракции, которые можно использовать для вызова текущего активного антивирусного сканера в Windows:

https://docs.microsoft.com/en-us/windows/desktop/amsi/antimalware-scan-interface-functions

Есть 2 метода, связанных с инициализацией:

  • AmsiInitialize
  • AmsiUninitialize

AmsiInitialize возвращает "Дескриптор типа HAMSICONTEXT, который должен быть передан всем последующим вызовам API AMSI".

После завершения инициализации я могу использовать AmsiScanBuffer для сканирования буфера на наличие вредоносных программ.

Мой вопрос:

Могу ли я использовать один и тот же контекст одновременно из множества потоков в моем приложении или мне нужно создать один поток для каждого потока, из которого я собираюсь вызывать методы?

Читая документацию для AsmiUnitialize, он говорит мне, что, когда приложение завершает работу с API AMSI, оно должно вызвать AmsiUninitialize., Это говорит мне о том, что контекст может использоваться для многих вызовов, но ничего не говорит о безопасности потоков или параллелизме.

1 ответ

Как правило, вызовы API, которые специально не помечены как поточно-ориентированные, не являются (это обычно верно для любой библиотеки). Самое простое решение - открыть дескриптор AMSI для каждого потока.

(PS Это работает только с Защитником Windows, насколько я тестировал).

Другие вопросы по тегам