Безопасность нитей в интерфейсе сканирования 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, насколько я тестировал).