1. C# / Говнокод #13961

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    using System.Management;
    
    try
    {
        ManagementObjectSearcher searcher =
            new ManagementObjectSearcher("root\\CIMV2",
            "SELECT * FROM Win32_DiskDrive");
    
        foreach(ManagementObject queryObj in searcher.Get())
        {
            foreach(ManagementObject o in queryObj.GetRelated("Win32_DiskPartition"))
            {
                foreach(ManagementBaseObject b in o.GetRelated("Win32_LogicalDisk"))
                {
                    Debug.WriteLine("    #Name: {0}", b["Name"]);
                }
            }
            // One of: USB, IDE
            Debug.WriteLine("Interface: {0}", queryObj["InterfaceType"]);
            Debug.WriteLine("--------------------------------------------");
        }
    }
    catch (ManagementException f)
    {
        Debug.WriteLine(f.StackTrace);

    Тру кодер изобрел собственный способ получения сведений о дисках.

    WinApi для петушков.

    Запостил: Stertor, 16 Октября 2013

    Комментарии (78) RSS

    • Взято с http://govnokod.ru/13953, но по моему скромному мнению, этот шедевр заслуживает отдельного топика.
      Ответить
    • >WinApi для петушков.
      Но ведь это действительно так.
      Ответить
    • В принципе, весь WinAPI заслуживает от дельного топика.
      Ответить
    • На самом деле получить диски что на Solaris, что на Windows, что на Linux используя только встроенные либы - самоубийственно :)
      Ответить
      • Может, стоит вынуть ручки из ануса?
        Получить список дисков (с проверкой их на профпригодность) на Windows всегда было проще пареной репы.
        Ответить
        • Но только не отличить флоппики от флешек, ы.
          Ответить
          • Чем написать глупость, лучше полистать лишний раз справку.
            Вон сколько функций для этого
            http://msdn.microsoft.com/en-us/library/ff551069%28VS.85%29.aspx
            Ответить
            • Ну итить колотить. Теперь покажи мне как это сделать в C# без импорта WinAPI.
              Ответить
              • Никак. Winapi минимальный способ взаимодействия с системой. Если не нравятся системные API - пишите свои.
                Ответить
                • А если мне кросплатформенности хочется? И не спрашивайте, откуда в *unix буквы дисков )
                  Ответить
                  • Могу Вам только посочувствовать, тогда, тем более, что шарп только под винду.
                    Попробуйте попросите линуксоидов, чтобы сделали свою недоось удобнее.
                    Ответить
                    • Не-не-не, ЭТОТ камень должен лететь в огород разработчиков и архитекторов .NET )
                      Ответить
                      • показать все, что скрытоНадоела унылая консоль? Захотелось визуальности? Найди в себе силы отказаться от линукса, будь мущиной! )

                        Портировать шарп на линукс - об этом даже помышлять грешно.
                        Скорее галкин разведется с пугачихой, чем это случится.
                        Ответить
                        • Сосноль.
                          Ответить
                        • Ты всё это скажи разработчикам Unity 3D )
                          Ответить
                        • Должен сказать, нормально выглядящего на винде кроссплатформенного гуя я не видел. В лучшем случае - унылосерый Qt.
                          Ответить
                          • само слово "кроссплатформенность" в текущем состоянии дел вызывает ассоциации примерно такие: пациент вместо горшка (утка занята другим пациентом) мочится в кружку, и медсестра ее выносит.

                            До тех пор, пока не будет жестко-строгого стандарта на внутренее устройство оп.систем, никакой кроссплатформенности не будет. А что происходит сейчас ничто иное как игра в кроссплатформенность.
                            Обилие гомосексуалистов - яркое тому подтверждение.
                            Ответить
                            • Именно так. Например MS вообще не нужна эта ваша кроссплатформенность. Точнее у нее своя - 98-XP-7-8)
                              Ответить
                              • Гомосексуалисты - это те, кто перешел с винды на линукс)
                                Ответить
                              • Точнее у них даже она ограничена больше всех, другие рантаймы чуть ли не под win32 работают и портабельны.
                                Ответить
                    • Кстати, 1 .0 в вашу пользу. В яндексе действительно нет ничего дельного о том, как "отличить флоппики от флешек, ы." ..
                      Ответить
                    • > шарп только под винду.
                      Mono же...
                      Ответить
                      • номинально. А кодить на нем - анально
                        Ответить
                        • Несколько коллег перешедшие в нашу контору, как оказалось, работали на предыдущей работе с Mono. Говорят, неудобства есть, но не так чтоб аж "анально"... Да и сам факт использования Mono для коммерческих проектов заставил меня задуматься. Похоже, прогресс не стоит на месте.
                          Ответить
                    • > попросите линуксоидов
                      Кроссплатформенность это уже не только линукс. Почитай про WinRT. Если мне не изменяет память, то юзавшие апишки напрямую в WinRT соснут хуйца, ибо там все апишки другие ;)
                      Ответить
          • Получаем список дисков, затем тупо сравниваем их буквы, ну или извращаемся, как хотим.
            Пример нашел там, где меньше всего ожидал найти.

            http://msdn.microsoft.com/en-us/library/cc542456%28v=VS.85%29.aspx

            (как получить список дисков засунутых в usb)
            Ответить
            • "http://msdn.microsoft.com/en-us/library/cc542456%28v=VS.85%29.aspx"

              Треш угар и содомия, достойные отдельного ГК ))
              Ответить
        • WinAPI и "проще пареной репы" - два несовместимых понятия.
          Думаю коду вот этой тулзы: http://support.microsoft.com/kb/264203 должны занять достойной место на говнокодике.

          P.S. >> Может, стоит вынуть ручки из ануса?
          А у вас до сих пор отопления нет и вы их там греете? Сочуствую.
          Ответить
          • Author: Raju Ramanathan
            Ответить
            • Ухуху, рашкинский мем про индусов, которые пишут херню вместо рашкинских говнопрограммеров, которые пишут еще большую херню. Среди индусов есть и авторы нормальных книг.
              Ответить
          • Ты кино "эммануэль" смотрел?
            Это твоя мама.
            Ответить
      • Я сегодня узнал про fuse, sshfs и lxc. И понял, что нельзя просто так взять и найти файлы с масс сторедж девайса.
        Да и сам девайс можно иногда очень долго из разных мест выковыривать. Но пользователям МС Виндовс этого не понять. Им бы хоть просто с ярлыками дисков разобраться.
        Ответить
        • /proc/mounts, не? Там же вроде все активные маунты видны.
          Ответить
          • Посоветуйте кококонсольный браузер с html 5, аски картинками и видео и поддержкой мыши. Лунх заебал. gpm стоит.
            Ответить
          • Ну так если код исполняется из контейнера, то у него может не быть полномочий, или, что еще хуже, полномочий не на все, или, еще хуже, там будет что-то виртуализированое. Если используется фьюз, то там могут быть не файловые системы, а не пойми что, и представлятся они могут как угодно.
            Ответить
            • > если код исполняется из контейнера
              То нехрен ему знать на каких дисках что лежит :)

              > Если используется фьюз
              Ну тут само собой. Но в винде, кстати, тоже можно делать такие штуки. Junction points вроде называются. И винда тоже умеет монтировать диски в папки, а не только на c: d: и.т.п. Просто в винде это юзают достаточно редко.
              Ответить
              • Неее... фьюз можно использовать, например, вместе с базой данных, чтобы через хуки "обмануть" кернел и подсунуть ему что-то левое вместо файловой системы, ну, те же записи из бд. Или, вообще вместо запросов к файлам выполнять запросы к говнокод.ру и вытаскивать комментарии из сайта в виде файлов / директорий. А так же создавать директории со спецеффектами, типа саморазрушающиеся после доступа, или, еще интереснее, самоперемещающиеся и т.д.
                Ответить
                • Непонятно, что в этом плохого. Это отлично согласуется с концепцией юникса "всё-файл".

                  Такое давно уже есть в /proc и /sys. fuse просто позволяет не лезть в ядро, если хочется запилить что-то подобное. Мы юзали его на предыдущей работе, когда разрабатывали своё хранилище данных, чтобы прозрачно лазить в него через юниксовые утилиты.
                  Ответить
                  • А кто говорит, что это плохо? Я говорю, что это делает задачу поиска файлов гораздо менее тривиальной.
                    Ответить
                    • > задачу поиска файлов
                      Да тут еще и симлинки радости добавляют...
                      Ответить
                • Да я прекрасно знаю, что такое fuse :)

                  Я просто спустал junction и reparse. http://msdn.microsoft.com/en-us/library/windows/desktop/aa365503%28v=vs.85%29.aspx. Аналогия не полная, но репарс поинты вроде как вполне можно поюзать и для сетевых фс, и для архивов, и для прочей виртуальной фигни. Там же никто не заставляет хранить сами данные в самом reparse point'е.

                  Вот только непонятно, работают ли "драйверы" этой виндовой штуки как обычные проги в юзерспейсе как и во фьюзе, или же нужно писать настоящий драйвер.
                  Ответить
                  • Хз, я этого в виндовсе никогда не видел, судя по описаню, там не полный набор АПИ (нельзя создавать файлы). С фьюзом можно, если есть хук для создания.
                    Ответить
                    • Ну х.з., я в винде с этим никогда не работал.
                      Ответить
                • В винде тоже свой фьюз есть, правда не "изкоробочный". Dokan называется.
                  Ответить
        • ... как получить молоко из воды.
          Ответить
    • Между прочим, во WMI есть куча полезных вещей, благодаря которым можно получить параметры оборудования не зарываясь глубоко в API. Какую-никакую примитивную привязку к железу, например, наклепать можно.
      Ответить
      • Отчасти согласен. Но это для ламеров. Не надо этим страдать.
        Ответить
    • В кои-то веки Мелкософт реализовал международный стандарт WBEM, адаптировав его под Винду (получился WMI), но и тут находятся типы, орущие, что это не надо, ведь есть же WinAPI.

      Реализуй MS что-то своё собственное, тогда наоборот бы орали: вот же есть международный стандарт, почему его не взяли??? Оло-ло! Пыщь! Пыщь!
      Ответить
      • Орут люди, прывыкшие к стандартам 20-летней давности. Что удивительно, им самим иногда столько нет.
        Ответить
      • Не торопись с выводами, друг мой. Сам процесс wmi иногда жутко грузит процессор без видимых причин и долго висит в памяти (даже после того, как сама прога, вызвавшая WMI уже давно завершила работу) т.е. ему свойственна нестабильность. Использовать же классы wmi для получения данных о накопителях - повторять ошибку двух уебков, написавших вирус "анти-пенетратор USB.WSF"

        http://www.grok.ru/895
        http://boosh.ucoz.ru/forum/4-11-1\
        http://sariolla.ru/index.php?option=com_content&view=articl e&id=104
        Ответить
    • Он подошёл к Даниной комнате и постучал. В ответ упрямо молчали.
      Ответить

    Добавить комментарий