В драйвере пишу данные на флешку с помощью 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 );
Если же отправлять устройству IRP_MJ_WRITE, то Access Denied возвращается так же и в Win2k/XP. IRP_MJ_READ проходит нормально. Подскажите, пожалуйста, в каком направлении копать?
Спасибо... Только там исходников не видно... Да и пользователю доступ к флешке разрешён. Вопрос в том, почему драйвер не может записать...
Это коммерческий продукт. Виста разрешает писать в нулевую дорожку и в неразмеченные области диска. Остальное - запрещено. Если бы в драйвере можно было бы это делать, то этот запрет элементарно обходился бы написанием своего драйвера.
По-моему контроллер здесь ни при чём. Это вистовский драйвер запрещает. Partner, огромное спасибо за подсказку! Записываю нолики в нулевую дорожку и можно спокойно писать на всю флешку! Правда, теперь смысла подобного ограничения не понимаю
Именно. Типа защита от подмены содержимого pagefile.sys на уровне секторов диска. Это они так багу пофиксили http://www.securitylab.ru/news/275949.php