CloseHandle извне процесса

Тема в разделе "WASM.WIN32", создана пользователем katrus, 18 мар 2007.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Мог бы кто объяснить как закрыть handle (file mapping) находясь извне процесса который породил объект. Т.е. в другом процессе я могу вызвать, скажем, OpenFileMapping и получить Handle объекта, но CloseHandle не удаляет удаляет обьект.

    Например process explorer закрывает file mapping любого процесса без всяких проблем.
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    DuplicateHandle с флагом "1" тебе поможет.
     
  3. slow2

    slow2 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    8
    DUPLICATE_CLOSE_SOURCE имеется в виду под единицей :))

    А вообще, может быть установлено ProtectFromClose и тогда наверное так не получится
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    так и есть.
     
  5. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    A что это за ProtectFromClose? В Google нашел только некий ProtectFromClose в struct _HANDLE_OBJECT_INFO. Как его можно установить?

    P.S. похоже что process explorer не пользуется DuplicateHandleHook. Я сделал глобальный hooking на этот вызов - process explorer его не трогает. Тогда не понятно как он убивает handle ...
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Может подгружать DLLку с кодом типа ZwClose(hHandle) или инжектиться, или драйвер (там все намного интереснее) или еще есть способы (умолчим пока)

    установить можно вроде бы с помощью SetInformationObject, но не утверждаю - Неббета под рукками сейчас нет.
     
  7. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    slow
    На самом деле задача стоит обратная - защитить handler'ы от закрытия. Хотя-б на уровне защиты закрытия через process explorer. Идея - перехватить системный вызов используемый для закрытия handler'а и если это "защищаемый" handler отправить вызов в сад.
     
  8. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    katrus
    ProtectFromClose - устанавливается функцией SetHandleInformation:
    Код (Text):
    1. SetHandleInformation(hObject, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
     
  9. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Atlantic
    точно, точно, я совсем и забыл.

    katrus
    Хватаем ZwDuplicateObject везде / ZwCloseObject у себя и фильтруем
     
  10. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    По переxвату апи на форуме в поиск или на wasm.ru статей достаточно
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    по-моему, process explorer закрывает их через драйвер
    перехватывать вызовы через KiServiceTable тут бесполезно.. если только сплайсить саму ZwCloseHandle или что он там вызывает..
     
  12. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Nouzui
    ZwClose.