Низкоуровневая работа с внешними дисками

Тема в разделе "WASM.WIN32", создана пользователем xcode, 20 янв 2010.

  1. xcode

    xcode Member

    Публикаций:
    0
    Регистрация:
    8 апр 2007
    Сообщения:
    105
    Проблема - внешний диск через 50 секунд после последнего обращения засыпает.
    Просыпается быстро, примерно через секунду, но все равно раздражает.
    Хочется чтобы он вообще не останавливался.
    В качестве простейшего решения попробовал программу, которая раз в 15 секунд записывает в открытый на диске файл несколько байт и вызывает функцию fflush(). Решение, но хочется все-таки ничего не записывать, а просто "трогать" диск на низком уровне - читать текущий сектор или что-то такое, что бы не приводило к записи, не дергало диск (не приводило к перемещению считывающих головок) и занимало бы минимум времени. Но при этом не давало бы ему засыпать!
    1. Есть ли в винде какие-нибудь низкоуровневые функции, позволяющие сделать такое?
    2. Есть ли универсальные средства управления спящими режимами внешних HDD?
    3. Может быть есть уже готовые решения? Нашел только программу xSleep, но там минимальный период - минута, а мне нужно немного меньше.
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    CreateFileA("\\.\PhysicalDrive0", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0)
    не?
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Если Windows Vista и выше, то зайди в "Панель управления" - "Электропитание" - "Настройка плана электропитания" - "Изменить дополнительные параметры питания", тут в разделе "Жёсткий диск" попробуй параметр "Отключать жёсткий диск через" выставить в "Никогда". Не уверен, что поможет, но мало ли.
     
  4. xcode

    xcode Member

    Публикаций:
    0
    Регистрация:
    8 апр 2007
    Сообщения:
    105
    нет, система XP Sp2 и никуда переходить с нее не собираюсь:)
    Насчет CreateFile - ну открою я устройство, а дальше что? (спрашиваю просто потому что никогда с подобным образом устройствами не работал)
     
  5. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Тебе x64 сказал что сделать, а ХР тоже самое имеет. Проверь сначала. Ищи утилиты для своего винта от производителя ими управляй диском.
     
  6. xcode

    xcode Member

    Публикаций:
    0
    Регистрация:
    8 апр 2007
    Сообщения:
    105
    Все доступные в панели управления настройки винды (электропитание) уже пробовал... действуют только на внутренние диски, если бы было так просто я бы не спрашивал. Утилит от производителя нету - ни на офсайте, ни сторонних. Я первым делом стал искать утилиты, потому что для аналогичного диска Maxtor такая утилита была. На форумах люди задают вопросы, но ответов нет (xSleep я нашел на каком-то англоязычном форуме, и пока это единственное что я нашел)
     
  7. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Попробуй в свойствах диспетчера Устройств, найти УСБ девайс и выключить ему разрешение на экономию электроэнергии.
     
  8. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    Вот как то так считывается MBR у меня...
     
  9. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Treant ты бы лучше ему статью привел, он похоже не понимает.
     
  10. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Попробуйте утилиту CrystalDiskInfo (http://crystalmark.info/?lang=en).
    Меню Функци->Расширенные опции->Управление AAM/APM

    APM- расширенное управление питанием.

    Может, вам поможет.
     
  11. xcode

    xcode Member

    Публикаций:
    0
    Регистрация:
    8 апр 2007
    Сообщения:
    105
    gorodon Спасибо огромное! Это именно то что надо!
    А я уже хотел было писать софтину, которая обращалась бы к диску с какой-то периодичностью:)