Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не получается промапить диск (

255
18 января 2009 года
Dart Bobr
1.4K / / 09.04.2004
Вообщем занимаюсь оптимизацией одного прожекта, который работает напрямую с диском, и чтение организовано потоками и совсем не оптимально:
читается фиксированый буфер, из него парсится мфт-запись, оффсет увеличивается на размер записи и снова читается буфер огромного размера.
Хочу оптимизировать сие безобразие - промапив в память кусок диска, дабы избежать многократного перечитывания содержимого диска.

Пишу что-то вроди (прожект на дельфи):
 
Код:
m_hFile := CreateFile(@Disk[ 1 ], GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  if m_hFile = INVALID_HANDLE_VALUE then
    Exit;
  m_fileMapping := CreateFileMapping(m_hFile, 0, PAGE_READONLY, 0, MAX_FMAPPING_SIZE_VALUE, @MappingName[ 1 ]);

CreateFileMapping постоянно возвращает 0. GetLastError возвращает 5. Запускаю на висте, UAC отключен. Кто может подсказать, что изменить, чтоб мапило содержимое диска нормально, если это вообще в принципе возможно?
Ведь если в CreateFile передавать не строку типа "\\.\c:", а путь к файлу, все прекрасно работает.

З.Ы. Или может есть способ читать еще быстрее?
12K
18 января 2009 года
lifs
163 / / 06.09.2007
Видимо нельзя создать проекцию диска в память. Думаю это связано с тем, что при каждом измененнии содержимого диска, спроецированные данные в памяти должны также измениться. По этой же причине использовать проекцию диска (если бы это было возможно) не эффективно и чревато ошибками.

Насчет оптимальности чтения, в голову приходит только чтение буфером фиксированного размера 64Kb ( или 1Mb для Vista).
255
18 января 2009 года
Dart Bobr
1.4K / / 09.04.2004
Да, но промапить файл с FILE_SHARE_READ Or FILE_SHARE_WRITE получается ведь, и проекция, насколько я понимаю меняется при каждом внешнем изменении файла.
247
18 января 2009 года
wanja
1.2K / / 03.02.2003
Лично я сильно подозреваю, что эта функция не предназначена, чтобы мапить диски.
261
18 января 2009 года
ahilles
1.5K / / 03.11.2005
Цитата: Dart Bobr
Да, но промапить файл с FILE_SHARE_READ Or FILE_SHARE_WRITE получается ведь, и проекция, насколько я понимаю меняется при каждом внешнем изменении файла.


наоборот, при каждом изменении памяти содержимое файла тоже меняется (конечно не сразу).

Цитата: wanja
Лично я сильно подозреваю, что эта функция не предназначена, чтобы мапить диски.


как раз наверно так и есть.

255
18 января 2009 года
Dart Bobr
1.4K / / 09.04.2004
Не знаю - не знаю, ведь хендл открытого диска, ничем не отличается от хендла открытого файла, с точки зрения апи.
Ладно буду пробовать сделать то же, что и CreateFileMapping, только ручками..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог