ZwWriteFile на флешку в Vista

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

  1. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    В драйвере пишу данные на флешку с помощью ZwWriteFile, открывая её как \Device\Harddisk1\Partition1. В Win2k/WinXP всё работает нормально, а в Vista в случае, когда Offset+Length > 0x1000, ZwWriteFile возвращает STATUS_ACCESS_DENIED. ZwReadFile отрабатывает нормально для всей флешки.
    Кто-то с подобным сталкивался? Подскажите, пожалуйста, в чём может быть причина?

    Открываю так:
    ZwCreateFile(
    &Extension->hDeviceFile,
    SYNCHRONIZE | GENERIC_READ | GENERIC_WRITE,
    &oaFileAttributes,
    &IoStatusBlock,
    NULL,
    FILE_ATTRIBUTE_NORMAL,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    FILE_OPEN,
    FILE_NON_DIRECTORY_FILE |
    FILE_RANDOM_ACCESS |
    FILE_NO_INTERMEDIATE_BUFFERING |
    FILE_SYNCHRONOUS_IO_NONALERT,
    NULL,
    0 );
     
  2. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Если же отправлять устройству IRP_MJ_WRITE, то Access Denied возвращается так же и в Win2k/XP. IRP_MJ_READ проходит нормально. Подскажите, пожалуйста, в каком направлении копать?
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    http://www.eldos.com/rawdisk/
     
  4. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Спасибо... Только там исходников не видно...
    Да и пользователю доступ к флешке разрешён.
    Вопрос в том, почему драйвер не может записать...
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Это коммерческий продукт.
    Виста разрешает писать в нулевую дорожку и в неразмеченные области диска. Остальное - запрещено.
    Если бы в драйвере можно было бы это делать, то этот запрет элементарно обходился бы написанием своего драйвера.
     
  6. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Спасибо! Это уже интересней...
     
  7. Clerk

    Clerk Забанен

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

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    По-моему контроллер здесь ни при чём. Это вистовский драйвер запрещает.

    Partner, огромное спасибо за подсказку!
    Записываю нолики в нулевую дорожку и можно спокойно писать на всю флешку!
    Правда, теперь смысла подобного ограничения не понимаю :)
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Clerk
    Через IOCTL_SCSI_PASS_THROUGH вроде пишется нормально, но я не пробовал.
     
  10. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Именно.

    Типа защита от подмены содержимого pagefile.sys на уровне секторов диска. Это они так багу пофиксили http://www.securitylab.ru/news/275949.php
     
  11. Clerk

    Clerk Забанен

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