Несколько вопросов про R0..

Тема в разделе "WASM.BEGINNERS", создана пользователем test555, 15 дек 2008.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Есть драйвер.

    1. Как узнать системную директорию?
    В юзермоде была функция типа GetSystemDir() или как-то так.. Давал пусть типа
    c:\winxp\system32\
    Есть ли нечто подобное в ядре?

    2. Как идентифицировать приложение, которое открывает мое устройство, созданное моим драйвером, через СreateFile...
    Хотелось бы узнать имя приложения, или хендл или любую другую идентифицирующую его информацию... В драйвере есть обработчик
    DriverObject->MajorFunction[IRP_MJ_CREATE] =
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchCreateClose;
    Так каким образом можно вытащить информацию?

    3. Как узнать путь и имя самого драйвера?
    Допустим
    c:\projects\driver007.sys
    или типа того..

    Спасибо.
    Поиск юзал, темы смотрел... Вопросы актуальны на данный момент..
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    test555
    > Считать из UsSharedData. Смещение наверно меняетсо в зав. от версии, но это не столь важно, главное адрес виртуальный меняетсо однозначно. Но можно вместо определения его заюзоть MmMapIoSpace(), передав в качестве физического адреса 0x41000.
    > Раскрыть символическую ссылку, например \SystemRoot, но вернётся имя не в дос-формате, т. е. на c:\windows, а \Device\Harddisk..., последнее можно преобразовать к дос-формату(дос-имя это тоже символическая ссылка).
    2. Вызов в контексте вызывающего процесса. Заюзоть например PsGetCurrentProcessId() для получения PID.
    3. Вариантов множество, например вручную из загрузчика считать.
     
  3. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    К 3 пункту добавлю:
    Код (Text):
    1. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegPath)
    2. {...}
    RegPath указывает на ключ в реестре, откуда можно считать полный путь к драйверу и его имя
     
  4. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    всем спасибо, все реализовал..
    Читаю путь запуска из реестра..
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нет, не обязательно, имя драйвера может быть относительным.
    например для сервиса "aec" (без понятия что это, просто первый попался) - system32\drivers\aec.sys
    или даже путь может бть таким: \SystemRoot\System32\drivers\afd.sys
    что совшеренно ничего тебе не скажет о системной директории
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Clerk
    а можно просто посмотреть в реестре HKLM\SOFTWARE\Microsoft\Windows NT\Current Version, значение "PathName"
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Можно, только не быстрее и не проще.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    быстрее чем трахаться с \systemroot и гораздо надежнее оффсетов в KUSER_SHARED_DATA
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Физический адрес этой страницы в XP и Vista одинаков, виртуальные отличаются, как в ост. не помню. А смещение этого поля постоянно вроде как 0x30. А насчёт гадёжности громко сказано.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    мейби но помоему лучше привязываться к документированным фичам типа реестра чем к недокументиорванным структурам =)