Безопасность нитей в интерфейсе сканирования Windows - PullRequest
0 голосов
/ 06 февраля 2019

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

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

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

  • AmsiInitialize
  • AmsiUninitialize

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

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

Мой вопрос:

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

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

1 Ответ

0 голосов
/ 06 февраля 2019

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

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

...