Достать таблицу описателей. Как?

Тема в разделе "WASM.WIN32", создана пользователем Nfs, 19 янв 2007.

  1. Nfs

    Nfs New Member

    Публикаций:
    0
    Вообщем моя цель такова:
    Берем процесс, узнаем его PID. Шлем PID в драйвер. В драйвере надо достать таблицу открытых описателей (Handle) нашим процессом. По полученным описателям обращаемся к объектам/ресурсам и изменяем пару параметров объекта. Думаю, что особой проблемы при обращении к объектам по хэндлам не будет, а вот как по пиду процесса вытащить индексы описателей?

    Извиняюсь, если данная тема уже поднималась.
    Всем буду благодарен за любую информацию.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    "3 метода работы с занятыми файлами" by Ms-rem
     
  3. Nfs

    Nfs New Member

    Публикаций:
    0
    Большое спасибо за ссылку на статью - очень помогла! Автору - отдельное пасибо! Назрел еще один вопрос... Если залезть в драйвер, который приведен в статье можно найти вот что:
    #define AC_GENERIC_READ 0x120089
    #define AC_GENERIC_WRITE 0x120196
    .....

    Дефайны доступа. Данные переменные заносятся в маску доступа для изменения доступа к объекту, который привязан к файлу. Понятно, что полный доступ будет 0x12021F. При изменении Read на Write доступ меняется... Вообщем все отлично работает.

    При создании описателя на пользовательском уровне мы указываем GENERIC_WRITE | GENERIC_READ. Если залезть в winnt.h, можно найти:
    #define GENERIC_READ (0x80000000L)
    #define GENERIC_WRITE (0x40000000L)
    .....
    Вообщем-то, если посмотреть на структуру маски доступа - все правильно. (Write | Read - C0000000 ) Но каким образом из 0xC0000000 получается 0x12021F ? Но, пожалуй, самый главный вопрос - есть ли тут какая-то закономерность для других типов объектов, к примеру - ключей реестра и т.п?
    Спасибо!
     
  4. DelExe

    DelExe New Member

    Публикаций:
    0
    1) "#define AC_GENERIC_READ 0x120089" - не что иное как FILE_GENERIC_READ
    "#define AC_GENERIC_WRITE 0x120196" - с чего получилось легко догадаться FILE_GENERIC_WRITE|FILE_ATTRIBUTE_NORMAL.

    2) Не путать dwDesiredAccess и dwFlagsAndAttributes + читать MSDN.
     
  5. Nfs

    Nfs New Member

    Публикаций:
    0
    Сам сегодня копался в winnt.h .

    Там действительно есть задефайненный
    GENERIC_READ и выглядит он действительно так:
    #define GENERIC_READ (0x80000000L)

    Но! Есть еще и FILE_GENERIC_READ. И получается он так
    #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
    FILE_READ_DATA |\
    FILE_READ_ATTRIBUTES |\
    FILE_READ_EA |\
    SYNCHRONIZE)
    И он реально получается как 0x120089

    #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
    FILE_WRITE_DATA |\
    FILE_WRITE_ATTRIBUTES |\
    FILE_WRITE_EA |\
    FILE_APPEND_DATA |\
    SYNCHRONIZE)
    Т.о. = 0x120196
    Все вопрос исчерпан!
    Спасибо!