@Linda-chan

Тег windows в блоге Linda-chan

Linda-chan

А я поняла, почему размеры не совпадают. При чём, как оказалось, не только в WSL симлинках, но и в других симлинках (собственно, симлинках и junctions). Началось с того, что я нашла баг в билиотеке, где передавался неправильный размер буфера, и сломалось всё. Код показывал, что в заголовке данных размер буфера с путями такой, а на деле – другой, поменьше. Оказалось, что это поле в заголовке показывает кое-что другое. Там есть структура REPARSE_DATA_BUFFER, которая универсальная для всех майкрософтовских reparse points. У всех у них первые восемь байт имеют одинаковый смысл, а дальше уже могут быть как дополнительные данные, так и дополнительные поля, которые эти данные описывают. Полей может быть разное количество. Так вот, поле, которое указывает размер данных, указывает этот размер после общего заголовка, тоесть вместе со всеми дополнительными полями. А я считала без учёта дополнительных заголовков, ну и получалось, что фактически данных меньше, чем в заголовке. При чём в описании этих заголовков именно это и было написано, но я читала невнимательно =_=

Linda-chan

Добавила в свою библиотеку парсинг симлинков WSL. Оказалось, что Cygwin создаёт их как-то странно: в заголовке данных симлинка есть поле, которое указывает размер части, которая идёт после заголовка и содержит путь к объекту, на который указывает симлинк (в UTF-8, кстати). И вот это значение почему-то всегда на четыре больше, чем там есть по факту. Почему – БП. Надо попытаться ещё с самим WSL поэкспериментировать. Кроме того, сами данные там в очень свободной форме. Если у обычного симлинка есть флаг, относительный там путь или абсолютный, то тут может быть всё, что угодно, и оно даже может не совпадать с тем, что передано команде ln. Передала «0000» – получила «0000». Передала «/cygdrive/x/0000» – получила «/mnt/x/0000». Передала «X:\0000» – «X:\0000».

Linda-chan

Я это всё к чему? У нас есть ещё Cygwin, у которого есть своя ln. И вот как раз она создаёт натуральные reparse points, которые видятся как reparse point. DIR показывает их как «JUNCTION», FAR3 – как «LX_SYM», Проводник (в Windows 7 и ниже) вообще показывает это как файл, а Link Shell Extension не воспринимает как симлинк. И никто не умеет с этим работать. А на деле у данной штуки «тэг» – IO_REPARSE_TAG_LX_SYMLINK, тоесть симлинк, который поддерживается WSL. Возможно, в Десятке в Проводнике он выглядит лучше, но я не видела. Надо экспериментировать.

Linda-chan

В линупсе, при создании симлинков на NTFS разделах, создаются нормальные на первый взгляд симлинки. Но после перезагрузки они превращаются в тыкву в виде файла с атрибутом «Системный», с заголовком «IntxLNK» и каким-то данными после Chr(1). Оказалось, что это какое-то легаси, которое должно работать и в винде, но не через нормальные reparse points, а через какое-то дополнительное ПО, обеспечивающее совместимость с POSIX или типа того (кажется, речь идёт не про подсистему). Короче, в живую я это ПО не видела, так что не в курсе. Что интересно, MINGW32 тоже создаёт такие файлы, но при этом правильно парсит их, ls показывает их как симлинки, ну и входящие в комплект программы тоже работают с ними, как с симлинками. Просто интересное наблюдение.

Linda-chan

Задача жакафрески, на размышление – тридцать секунд. Есть два компа с Windows 2000, других операционных систем на них нет и не было. Обе стоят на разделе, отформатированном в NTFS. На одном компе версия NTFS – 3.0, тоесть та, что появилась с Windows 2000. На другом – 3.1, тоесть от Windows XP. Вопрос: как так получилось?

Linda-chan

А вот интересно... Можно ли сделать кастомную reparse point так, чтобы хранить в ней какие-то свои данные, не связанные с файловой системой? Типа как маскировка данных в файловых потоках, только ещё круче, что прямо код надо писать, чтобы вытащить эти данные.
// Возможно, этот пост содержит часть ответа на вопрос из предыдущего.

Linda-chan

Написала код, который изучает симлинк (на самом деле – reparse point) и выдаёт то, на что симлинк ссылается. Проверила – работает. Почти приступила к применению, но тут заметила, что в некоторых случаях код работает неправильно, выдаёт странные результаты. Начала изучать двоичные данные, которые парсит программа, и поняла, что что-то с ними не так: одни поля налезают на другие, хотя в других случаях всё с полями нормально. Начала копаться в MSDN. Оказалось, что документация про всему этому есть, но какая-то туманная, везде недосказанность, функций всего ничего, объясняются только общие концепции. Продолжила копать и повторно открыла для себя раздел «Open Specifications», в котором предельно чётко описаны все структуры, которые в этих самых reparse points используются. И оказалось, что в MSDN была описана одна структура, а в реальности используются другие структуры, по одной на каждый тип симлинков. А та, что описана в MSDN – вообще для сторонних реализаций. В итоге код придётся переписывать и снова всё тестировать. Но я всё равно не понимаю, чего Microsoft так тряслись над этими reparse points так, словно это пентагоновский секрет?

Linda-chan

Почему структура GUID не соответствует текстовому виду этого самого GUID?

Linda-chan

Обновилась Windows 11. Поотваливались подключения по RDP. Супер. В RDP клиенте по многочисленным просьбам дизайнеров переделали кнопочки, поэтому панелька с кнопками теперь болтается ниже, стала больше и обмазана ШГ, даже значки на кнопках умудрились размазать. Ещё в диалоге свойств RPD соединения криворукие зумеры впилили новый фрейм с галочкой, который не влез по высоте, а посему в окне появился вертикальный скроллбар! Охуенчик! Ещё в меню «Пуск» переделали менюшку (меню в меню, блять), которая появляется при щелчке на имени пользователя. Теперь там логотип Microsoft, который конфузит, и тебе поначалу кажется, что пользователь как-то просочился не с локальной учёткой. Более того, криворукие зумеры решили, что отображаемое имя пользователя – это всегда что-то вроде «BG» (не путать с «BJ»), а посему длинное имя уходит за границы менюшки, обрубаясь краем оной. Зато дизайнеры в экстазе, наконец Microsoft избавляется от старого интерфейса™.

Linda-chan

Заметила, что логи CHKDSK, которые в «System Volume Information» лежат, зачем-то в конце содержат кусок из нулей. Озадачилась. Потом вдруг заметила размер файлов и поняла, что нулями оно выравнивает этот размер до килобайтной границы. Зачем – БП. Возможно, что, когда программа запускается из нативного режима при загрузке системы, драйверы ещё не все загружены, и работает что-то вроде упрощённого драйвера NTFS, который не умеет работать с невыровненными файлами. А при запуске программы в обычном режиме, выравнивание случается для совместимости. Но это просто рандомное предположение, возможно, у Рэймонда Чена есть про это.

Linda-chan

Оказалось, что старые версии Windows испытывают некоторые затруднения в парсинге строк и эмодзиками. Ну или это я что-то не так делаю, либо хочу не того. Короче, мне надо было взять строку в UTF-8 и заэкранировать ей в HTML кодах. Всякие CharNextW() давали мне не то, что нужно, а то и вообще ничего не давали. Поэтому пришлось открыть доки и написать собственный парсер UTF-8 строки =_= И он даже заработал.

Linda-chan

Кажется, я поняла, зачем программы и рантаймы таскают в ресурсах картинку с чекбоксами. Это чтобы эмулировать чекбоксы в системном tree-view.

Linda-chan

Microsoft выпустила очередную сборку Windows 11 Insider Preview, одним из заметных улучшений в которой стали обновлённые значки у индикатора аккумуляторной батареи. Теперь он имеет цветное исполнение, благодаря чему является более заметным, помогая пользователю не упустить важную информацию.

https://3dnews.ru/1117279/z...i-legche-chitayutsya
ЭТО ПРОРЫВ!
// Того гляди, и остальные иконки сделают нормальными, уберут все эти круглости, окна сделают более различимыми...

Linda-chan

Комп с Windows 10 или Windows 11. Работает несколько часов. Всё это время непрерывно моргает индикатор активности диска. Что, блять, оно делает с диском?

Linda-chan

Попробовала Calmira 3 в Windows 3.11. Выглядит, конечно, заебись OO

Linda-chan

В Windows можно выбрать локаль для пользователя, и от неё будет форматироваться всякое вроде чисел и дат. А чтобы форматировать оные числа и даты, есть ряд функций вроде GetNumberFormat() и GetDateFormat(). Они позволяют отформатировать что-то, используя собственную маску, используя системную маску или то, чем системную маску переопределил пользователь в региональных настройках. Конкретно дата-время форматируются двумя разными функциями, которые выполняют свою работу хорошо, но всё же один нюанс остаётся за кадром: порядок следования. Ну, тоесть, я с детства знаю, что сначала идёт дата, а потом время: возможно, в школе так научили. Но вот есть программы вроде Notepad2, которые сначала вставляют время, а потом – дату. И в локали нет ничего на эту тему, только отдельный формат даты и отдельный формат времени. И как быть? Вообще, есть какие-то правила на сей счёт?

Linda-chan

Я уже писала об этом, но всё равно для меня забавно, что в Windows свёртывание окна на панель задач осуществляется функцией CloseWindow(), а развёртывание обратно – функцией OpenIcon(). Я ещё могу понять название второй функции, помня, что ещё в первой Windows никакой панели задач не было, и свёртывались окна в иконку на рабочем столе, так что при развёртывании иконка... эээ... открывалась. Но вот название первой функции... Даже в её описании испокон веков пишут, что она сворачивает, но не уничтожает окно, а чтобы уничтожить, надо использовать другую функцию. Тоесть понимают, что название может конфузить.

Linda-chan

Кажется, я поняла, почему Microsoft так фанатично проталкивает Метро (которые UWP или типа того) и новую панель управления на его основе, где открывается только одно окно, а чтобы настроить что-то, требующее донастройки в нескольких разных местах, требуется постоянно ходить туда-сюда через все менюшки и вложенные пункты. Дело не в мобильных устройствах, где у Microsoft всё давно протухло. Дело в том, что они тоже решили ориентироваться на современную аудиторию™. А современная аудитория что? Правильно, травмированная с самого рождения, обвешанная менталочками ещё обильнее, чем флажками и пронаунсами, а главное – поголовно состоит из аутистов и сдвгшников. Вот и хватает панические атаки, когда видит на экране больше чем одно окно. А Microsoft не хочет, чтобы пользователи хватали панические атаки при работе с виндой, так что – UWP, одно окно на всё и хождения туда-сюда между менюшками и вложенными пунктами. Несовременная аудитория, правда, страдает, но на то она и несовременная, чтобы не обращать внимание на то, что она там вякает.

Linda-chan

Люблю новый Диспетчер задач в Windows. Там есть много вкладок с бессмысленной информацией. Например, «Автозагрузка», которая показывает даже не все автозагрузки текущего пользователя. Или «Ресурсы», где показывает, сколько «системных ресурсов» употребили рандомные программы, часть из которых даже не установлена на компьютере, а имеет только заглушку в меню Пуск. Или первая вкладка, в которой показаны некоторые программы с некоторыми подробностями и некоторой группировкой. Там список «Приложения» и список «Фоновые процессы», что вызывает вопросы к тому, как виндовые процессы превращаются в «фоновые». Не, скорее всего, там алгоритм как в старом Диспетчере задач, просто в одном списке выводится то, что нашлось по старому алгоритму, а в другом то, что на нашлось по нему, но всё равно чудно. И, разумеется, никто не добавил опции «Всегда, блять, открывать вкладку «Подробности» по умолчанию» =_=

Linda-chan

Стряхнула пыль с подзабытого искусства писать апплеты панели управления Windows.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.