Перечисление дисков в режиме ядра

Тема в разделе "WASM.NT.KERNEL", создана пользователем researcher, 17 сен 2008.

  1. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Всем доброго времени суток!

    В DriverEntry создаваемого мной фильтра файловой системы вызываю функцию, которая определяет какие диски есть в системе, следующим образом
    Код (Text):
    1.     xor ecx,ecx
    2.     dec ecx
    3.     lea esi,s_devMap
    4.     invoke  NtQueryInformationProcess,ecx,ProcessDeviceMap,esi,sizeof s_devMap,NULL
    5.     assume  esi:ptr PROCESS_DEVICEMAP_INFORMATION
    6.     mov ebx,[esi].Query.DriveMap
    В ebx - 0Dh, то есть диски A:,C:,D:.

    Почему-то не находит сетевого диска P:

    Смотрю прототип - filemon, он находит этот злополучный P:, правда из RING3 и с помощью GetLogicalDrives.

    Делаю пробник
    Код (Text):
    1.     call    GetLogicalDrives
    В eax - 800Dh, здесь P: - есть!

    Смотрю дизасм функции GetLogicalDrives - также вызывает NtQueryInformationProcess, с такими же значениями параметров (кроме адреса буфера конечно)

    Вопросы следующие:
    1. DriverEntry вызывается в контексте процесса System, а пробник в контексте своего процесса. Возникает предположение: System не видит сетевых дисков?
    2. Кто знает альтернативный способ определения логических дисков? Подскажите в чем он заключается?

    Заранее спасибо
     
  2. sww_

    sww_ New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2007
    Сообщения:
    155
    Пункт 1.

    Зааттачься к любому процессу или вызывай из диспатча.