HANDLE в разных процессах

Тема в разделе "WASM.NT.KERNEL", создана пользователем XshStasX, 28 окт 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Допустим в DllEntry я открываю создаю некий обьект и получаю его HANDLE.
    Можно ли сделать теперь этот хендл доступный для в контексте любого процесса находясь в режиме ядра?
    При этом процесс в контексте которой создали хендл может быть закрыт.
    В моем случаи хендл нужен для файла и секции.
    Интересует общий ответ ну и более конкретный именно по файлам/секции .

    И еще вопрос если смапить секцию(ZwMapViewOfSection) и закрыть хендл который вернула ZwCreateSection можно ли будет работать с памятью, и потом вызвать ZwUnmapViewOfSection ?
     
  2. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    С некоторыми упрощениями, описатель это индекс в таблице конкретного процесса.

    1. Есть механизм дублирования описателей, вызовом NtDuplicateObject. Естественно, что значение нового описателя в другом процессе может отличаться (будет выбран первый свободный индекс).
    2. То, что хотите вы больше смахивает на механизм наследования описателя, но он применяется только к дочерним процессам.
    3. Если вы работаете в ядре, то можно создать описатель на объект для процесса SYSTEM (Kernel-HANDLE). К такому описателю можно обращаться из ядра, но с условием, что в функцию указывается режим вызывающей нити (например, ObReferenceObjectByHandle) или любым способом PreviousMode == KenrelMode (использование сисимных нитей или work-queue items)
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
  4. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Ну да, при открытии с указанием в атрибутах OBJ_KERNEL_HANDLE