Мог бы кто объяснить как закрыть handle (file mapping) находясь извне процесса который породил объект. Т.е. в другом процессе я могу вызвать, скажем, OpenFileMapping и получить Handle объекта, но CloseHandle не удаляет удаляет обьект. Например process explorer закрывает file mapping любого процесса без всяких проблем.
DUPLICATE_CLOSE_SOURCE имеется в виду под единицей ) А вообще, может быть установлено ProtectFromClose и тогда наверное так не получится
A что это за ProtectFromClose? В Google нашел только некий ProtectFromClose в struct _HANDLE_OBJECT_INFO. Как его можно установить? P.S. похоже что process explorer не пользуется DuplicateHandleHook. Я сделал глобальный hooking на этот вызов - process explorer его не трогает. Тогда не понятно как он убивает handle ...
Может подгружать DLLку с кодом типа ZwClose(hHandle) или инжектиться, или драйвер (там все намного интереснее) или еще есть способы (умолчим пока) установить можно вроде бы с помощью SetInformationObject, но не утверждаю - Неббета под рукками сейчас нет.
slow На самом деле задача стоит обратная - защитить handler'ы от закрытия. Хотя-б на уровне защиты закрытия через process explorer. Идея - перехватить системный вызов используемый для закрытия handler'а и если это "защищаемый" handler отправить вызов в сад.
katrus ProtectFromClose - устанавливается функцией SetHandleInformation: Код (Text): SetHandleInformation(hObject, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
Atlantic точно, точно, я совсем и забыл. katrus Хватаем ZwDuplicateObject везде / ZwCloseObject у себя и фильтруем
по-моему, process explorer закрывает их через драйвер перехватывать вызовы через KiServiceTable тут бесполезно.. если только сплайсить саму ZwCloseHandle или что он там вызывает..