ДрвФильтр 2: Права...

Тема в разделе "WASM.NT.KERNEL", создана пользователем sasha_s, 7 апр 2009.

  1. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Есть драйвер-фильтр, который мапит одну шару на несколько, это уже сделано. Сделано следующим образом: когда кто-то обращается к шаре -- ему выдается список шар под разными именами (хотя сама папка может быть пустой), после этого, когда этотже кто-то полезет к чилдовской папке -- я его просто редиректю на реальный сетевой путь, например:

    Шара задана на \\server\Shara и замаплена на две другие \\pc1\Public, \\pc2\Distrib
    Когда кто-то лезет на \\server\Shara, то получает в списке две папки:
    pc1Public
    pc2Distrib

    когда кто-то лезет на \\server\Shara\pc2Distrib (и на все его чаилды) -- редиректиццо на реальный путь
    \\pc2\Distrib и получает список чего там есть.

    Но есть одна загвоздка с правами... Во время редиректа почему-то переставляются права и запросс идет уже не от того кто полез, а прямо от моего драйвера, т.е. от юзера SERVER\SYSTEM, под которым работает мой фильтр. Сия проблема пока временно решена имперсонализацией, т.е. я подставляю права того, кто меня инсталил:

    Код (Text):
    1.         PSECURITY_SUBJECT_CONTEXT Original = &Data->Iopb->Parameters.Create.SecurityContext->AccessState->SubjectSecurityContext;
    2.         PSECURITY_SUBJECT_CONTEXT Subject  = (PSECURITY_SUBJECT_CONTEXT)::memAlloc(sizeof(*Subject));
    3.         if(NULL == Subject)
    4.             return FLT_PREOP_SUCCESS_NO_CALLBACK;
    5.  
    6.         // copy original subject context
    7.         *Post = Subject;
    8.         Subject->ClientToken        = Original->ClientToken;
    9.         Subject->ImpersonationLevel = Original->ImpersonationLevel;
    10.  
    11.         // replace subject context
    12.         Original->ClientToken        = m_Token;
    13.         Original->ImpersonationLevel = SecurityImpersonation;
    этот код выполняется в обработке запроса IRP_MJ_CREATE (PreCreate), после того как я редиректнул на реальный путь.

    Ну а мне ессесно нужно чтобы запросс шел с правами того юзера, что полез изначально.

    ВОПРОСС: Как мне сию проблему решить?

    Народ, на предыдущий мой вопросс никто не ответил, по сему большая просьба, если вы не знаете ответа, но знаете (или даже видели когда-то давно) форум, или еще какое место/книгу, которая на ваш взгляд может чем-то помочь -- то советуйте мне туда сходить немедля. Что называется готов выслушать любые советы.
     
  2. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    ну тогда тебе придется винду переписать :)
    в самбе запросCы ВСЕГДА идут в контексте SYSTEM
     
  3. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Первый запросс идет с правами того юзера, который запросил, или нет?