Конференция "WinAPI" » Перечень дисков [WinXP]
 
  • TCrash (08.04.08 20:36) [0]
    Требуется вывести в список только съемные диски. Проверка типа диска нашел - GetDriveType, но не хочется ведь делать

    for i:=byte('A') to byte('Z') do ........


    как можно получить список дисков компьютера, возможно в какой-то структуре?
  • Тыщ (08.04.08 20:39) [1]
    Во всех программах видел только GetDriveType.
    26 букв перебрать - это не так уж и много.
  • trubin © (08.04.08 21:30) [2]

    > как можно получить список дисков компьютера, возможно в
    > какой-то структуре?


    GetLogicalDriveStrings
  • Тыщ (08.04.08 21:37) [3]
    trubin ©   (08.04.08 21:30) [2]

    >GetLogicalDriveStrings

    Парсить строку с буквами, чтоб все равно перечислять в цикле?!
    Тогда уж лучше GetLogicalDrives.
  • trubin © (08.04.08 21:58) [4]

    > Парсить строку с буквами, чтоб все равно перечислять в цикле?
    > !
    > Тогда уж лучше GetLogicalDrives.


    Ему все равно надо диски в список выводить, вот буковки и потребуются.

    Впрочем из GetLogicalDrives буковки получить тоже не проблема.
  • trubin © (08.04.08 22:02) [5]
    Кроме того зачем лишний цикл. Диски из строки возвращаемой GetLogicalDriveStrings всеравно в цикле получаешь. Получил диск - проверил, всего и делов ... .
  • Тыщ (08.04.08 22:09) [6]
    trubin ©   (08.04.08 22:02) [5]

    А я говорю, GetLogicalDrives круче :)

    uses Windows;
    {$APPTYPE CONSOLE}
    var
     Drives:cardinal;
     I:integer;
    begin
     Drives:=GetLogicalDrives();
     for I:=0 to 26 do
     begin
       if Drives shr I and 1<>0 then
         Writeln('Drive '+chr(I+ord('a'))+' available');
     end;
    end.

  • Anatoly Podgoretsky © (09.04.08 15:26) [7]
    > trubin  (08.04.2008 21:58:04)  [4]

    Начиная по крайней мере с ХР диск не обязан иметь букву, а на Висте это получило дальнейшее развитие. Кроме того сильно стали использовать Soft/Hard Links и Junction Point
    И еще много наворотов, надо уходить от букв.
  • clickmaker © (09.04.08 15:28) [8]

    > [7] Anatoly Podgoretsky ©   (09.04.08 15:26)

    а Soft link <> Junction Point ?
  • Riply © (09.04.08 15:30) [9]
    >  [7] Anatoly Podgoretsky ©   (09.04.08 15:26)

    > Начиная по крайней мере с ХР диск не обязан иметь букву, а на Висте это получило дальнейшее развитие.

    А как это можно симитировать ?
  • Anatoly Podgoretsky © (09.04.08 15:40) [10]
    > clickmaker  (09.04.2008 15:28:08)  [8]

    А черт его знает, они же умудрились в документации так накрутить, что читаешь и чуствуешь себя дураком, потом переходишь в другой раздел и снова себя тем же чувствует, только по другому.
    Словарь говорит, что это стык или железнодорожный узел.

    Но при разработке надо учитывать, что буквы может не быть и могут быть хитрые ссылки, они у них уже давно есть и используют по разному, например от простого копирования дистрибутива на другой СД, когда на Диске 700 мб может получаться 4 гб.

    Я сейчас осваиваю Висту и столкнулся, что многие утилиты работы с оглавлениями и дисками ведут себя странно, не учитывают этого, странности могут быть самие разные. Программисты пока еще не освоили всех этих тонкостей и пишут в стиле Win9x
    Буквы из этой же оперы, лучше пересмотреть алгоритм и забыть про них, поскольку это иллюзия. В системе тома идентифицируются с помощью GUID.

    Надо бы Рипли затянуть в эту ветку :-)
  • Anatoly Podgoretsky © (09.04.08 15:46) [11]
    > Riply  (09.04.2008 15:30:09)  [9]

    Ага ты уже здесь.
    Я не знаю, я пока по старинке работаю, а это надо изучать АПИ.
    Но на уровне пользователя в диспетчере дисков, как минимум можно сказать, что бы буква не назначалась. Но там вроде нельзя указать точку монтирования, поскольку диск может быть смонтирован в любое место файловой системы.
    А вот жесткие ссылки вроде можно сделать только с консоли, одной из утилит, мне правда они особенно не нужны, но стоит подумать об изучении.
  • clickmaker © (09.04.08 15:47) [12]

    > Надо бы Рипли затянуть в эту ветку

    она уже подтянулась. Как пчела на мед ))

    На самом деле
    A junction (also called a soft link) differs from a hard link in that the storage objects it references are separate directories, and a junction can link directories located on different local volumes on the same computer

    (с) MSDN
  • Anatoly Podgoretsky © (09.04.08 15:55) [13]
    Я там же читал про Hard Link - can link directories located on different local volumes
    Я же говорю, что у них много противоречий в ней по данному поводу. А им бы это надо усиленно пропагандировать как среди программистов, так и предоставить нормальные ГУИ инструмент для этого. Консольный вроде есть, но надо потратить время на его поиск и освоение, да и не всем он под силу.
    Я как то выходил на него, темный лес, как и в MSDN
  • Riply © (09.04.08 16:51) [14]
    > [10] Anatoly Podgoretsky ©   (09.04.08 15:40)
    > Буквы из этой же оперы, лучше пересмотреть алгоритм и забыть про них,
    > поскольку это иллюзия. В системе тома идентифицируются с помощью GUID.

    На вкус и цвет..., и кажды сам выбирает что использовать.
    Но, из всего многообразия, лично я,
    после долгих мучений и обсуждений (была здесь ветка. guav создавал),
    остановилась на следующих инструментах для навигации по дискам и работы с ними:
    Это IOCTL_MOUNTMGR_QUERY_POINTS.
    В структуре _MOUNTMGR_MOUNT_POINT есть полезные поля.

    А если сюда еще добавить и SetupApi, то больше вообщем-то и ничего не нужно :)
    Разве что можно добавить IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS.

    В результате буквы дисков остаются нужны, только для вывода пользователю на экран. :)

    P.S.
    Rouse_ выладывал пример работы с SetupApi. DeviceList, вроде назывался.
    Из него можно "выдернуть" нужное.
    В MSDN есть перечисление GUID-ов для необходимых классов устройств.
  • Riply © (09.04.08 16:54) [15]
    >  [14] Riply ©   (09.04.08 16:51)

    P.S.
    Nt - функции, тоже могут обходиться без букв, причем с большим удовольствием :)
  • guav © (09.04.08 18:10) [16]
    Хардлинк делается так:
    fsutil hardlink create <new filename> <existing filename>
    хардлинки не имеют отношения к теме т.к. они в пределах тома.

    Софтлинки и точки подключения томов это reparse points.

    Чтобы у диска не было буквы а была точка подключения папка, можно зайти в Disk Management (diskmgmt.msc) и там Change Drive Letter And Paths...
  • guav © (09.04.08 18:15) [17]
    По теме - FindFirstVolume/FindNextVolume/FindVolumeClose или IOCTL_MOUNTMGR_QUERY_POINTS
  • Игорь Шевченко © (09.04.08 22:51) [18]
    Диск без буквы делается с помощью создания Reparse Point

    Но система давно уже внутре с буквами не работает, а работает с томами.
    Можно (это для интересующихся) используя WinObj, посмотреть, во что буковки C,D и проч. преобразуются.

    Кстати, CreateFileW можно вызывать с именем тома вместо буквы, если хочется получить Handle тома.
 
Конференция "WinAPI" » Перечень дисков [WinXP]
Есть новые Нет новых   [134433   +21][b:0][p:0.001]