Сессия в ядре

Тема в разделе "WASM.HEAP", создана пользователем osrootd, 25 сен 2008.

  1. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Это возможно?

    Ну допустим есть символьное устройство, которое читает строку у пользователя, что-то обрабатывает
    и возвращает строку.
    Допустим также, что есть условие, согласно которому, на вопрос Q1 устройство должно ответить A1 а на вопрос Q2 -- A2.
    Я написал такой драйвер.

    Как сделать так, чтобы 2 разных источника получали разные ответы? Как распознать отправителя?
    Блин... не знаю как по-русски объяснить.
    Вот я послал в устройство Q1 и ушел курить не дождавшись ответа. А пользователь иванов прочитал строку из устройства и получил мою A1.

    Как научить драйвер распознавать читателей и писателей? Что-то типа сессии. Чтоб ответ на мой вопрос пришел мне, а злому иванову пришло сообщение об ошибке?
     
  2. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Испольщовать пайпы?
     
  3. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Я в кернел-моде недавно...
    Юзал пайпы в обычно режиме... А ядро имеет к ним доступ? Если да, то проблема решена
     
  4. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Вполне имеет. IoCreateFile используется и в EA передаются параметры пайпа. Правда там есть гемор с привилегиями определенный, но практически решаемый.
     
  5. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    LPC, либо ивент и секция разделяемой памяти, много раз обсуждалось, да и чем собственно IOCTL не подходит?
     
  6. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    В ф-ции device_open я определил:
    Код (Text):
    1. if ( strncmp (Message, "USER",4)!=-1){
    2.  
    3. char *username="df";
    4. int i=0;
    5.  
    6.     for (i=0; i<strlen (Message)-1; i++)
    7.     {
    8.         if (i==5){
    9.         username=&Message[i];
    10.         }
    11.     }
    12. sprintf (Message,"+OK password required for %s",username);
    13. }
    Message берется из
    _IOR(MAJOR_NUMBER, 1, char *)
    в ф-ции int dev_do_ioctl, когда обрабатываем реакцию на запись в устройство

    Дело все в том что драверу плевать кто послал Message и тем более кто будет читать.
    Кинь ему USER osrootd и сразу USER lamer, драйвер ответит +OK password required for lamer а osrootd будет проигнорирован.

    blast правильно говорит: пробывать Shared Memory. Там можно - я просто чето забыл про нее
    Написать "клиента" и вперед!