Изменения в файле не отображаются

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

  1. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Пишу данные в файл через сектора, но данные видны только если читать файл тоже через сектора или после ребута системы. Что и как надо обновить в ФС, чтобы изменения содержимого файла стали актуальными?
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    может надо кэш обновить?
     
  3. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    кэш чего? кэш ДМА вроде сбрасывается, в любом случае - изменения находятся на диске физически. просто через файловую систему их не видно. Например открываю файл блокнотом и не вижу тестового сообщения, а читая сектора диска - вижу... После перезагрузки все данные на месте. Так что подозреваю что надо что-то делать с файловой системой. Только вот что именно, не понятно.
     
  4. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    сейчас пытаюсь понять как это делается самой ФС, например при вызове WriteFile
     
  5. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    если кому надо, вот лекарство (проверено):
    ZwFsControlFile( hVolume, NULL, NULL, NULL, &IoStatusBlock, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0 );
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    DMA здесь ни при чём, у файловой системы свой кэш, - см. в сторону API менеджера кэша (CcXxx).
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Экий ты гарный хлопец. Ты на каждую операцию записи будешь том туда-сюда гонять? Молодца.
     
  8. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    x64

    есть варианты лучше? предложи... на данный момент FSCTL_DISMOUNT_VOLUME единственное нормальное решение. и не на кажду операцию записи, а на каждый Open/Close

    А если ты такой грамотный, объяснить что проиходит внутри ФС при выполнении FSCTL_DISMOUNT_VOLUME. Буду тебе очень признателен.
     
  9. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    объяснить = объясни

    Что ты имеешь ввиду под словами "том туда-сюда гонять"? Можно поподробнее? ;)
     
  10. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Прочти главу Руссиновича про файловые системы, может что-то прояснится..
     
  11. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да я не грамотный, я так только... нимношко... только учусь, в общем. См. исходный код fastfat'а, - есть в WDK.
     
  12. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    x64

    наверное ты уже смотрел "в сторону API менеджера кэша (CcXxx)." и "исходный код fastfat'а" иначе бы не советовал мне этого. поэтому я еще раз прошу тебя рассказать альтернативу FSCTL_DISMOUNT_VOLUME, если оноя у тебя имеется за общими рассуждениями.