Здравствуйте, Valery A. Boronin, Вы писали:
VAB>А причина вроде невозможности отловить нечто необходимое другим (легальным) способом, согласитесь, может тянуть на серьезную, не так ли?
Валера, на самом деле есть совершенно легальный путь, причем начиная с 2000'ых... Вот только народ постоянно путает security и safety... А разница между ними как между замком с контролькой и навороченным банковским... А по сути, все эти "блокировки запуска" не более чем защита от дурака...
Вот если уж кому надо, но только имейте ввиду, это не безопасность!
создайте в разделе \\Registry\\MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\AppCertDlls
ключ с именем AppSecDll типа REG_EXPAND_SZ, куда положите, что-то типа %SystemRoot%\system32\<ваша>.dll... На самом деле их там может быть много, имейте это ввиду.
В этой вашей dll'ке должна быть точка входа CreateProcessNotify ...
NTSTATUS CreateProcessNotify ( LPCWSTR lpApplicationName, ULONG Reason );
Reason всегда будет —
либо APPCERT_IMAGE_OK_TO_RUN = 1
либо APPCERT_CREATION_ALLOWED = 2 или APPCERT_CREATION_DENIED = 3
при вызове с APPCERT_IMAGE_OK_TO_RUN, вас как бы спрашивают "этот имедж ОК или нет"
Если вас программа устаривает то верните STATUS_SUCCESS, не устаривает верните STATUS_UNSUCCESSFUL...
при вызове с APPCERT_CREATION_ALLOWED или APPCERT_CREATION_DENIED, вас уведомляют об результатах голосования...
То есть — если APPCERT_CREATION_ALLOWED то процесс с этим именем будет образован, ну и если APPCERT_CREATION_DENIED то соответсвенно нет.
Даже если вы вернули APPCERT_IMAGE_OK_TO_RUN, а другая после вас загруженая такая же dll на этот образ вернет APPCERT_CREATION_DENIED, то будет действовать последний резьюм. Ну и наоборот.