Статья Полные паруса: flags реестра. ч.1

Кирилл

Команда форума
Администратор
Ассоциация VN
Сообщения
14,069
Реакции
5,784
За окном шумел ветер и пытались
сдержать прорехи тучи.
Но драгоценная влага то и дело утекала
через швы и тучи гневно громыхали.
Ветер подвывал дразня их,а я сидел в ступоре
и думал о том что флаги в такую погоду не поднимают.
Да и при чем тут погода и флаги?
Я уже который час пытаюсь сосредоточиться
на этой теме.
И почему до сих пор не видно хоть какого
нибудь обзора?

Я сидел и пялился в монитор,листая параметры
Flags реестра и пытаясь свести их в одну логическую цепочку.
но это оказалось не так уж и просто,но все же я попытаюсь...
_______________________________________________________________________________
Все что написано в этой статье является лично моим мнением
и никак научно или официально не подтверждается.

Flags


Давайте сразу определимся-что из себя все таки представляет флаг?
На мой взгляд это некоторый аргумент,позволяющий задать определенные атрибуты объекту.

Звучит угрожающе,но понять не сложно.
На самом деле флаги присутствуют и используются повсеместно от windows xp до windows 8.
А реестр,как можно прочесть из ранее написанных тем,ни что иное как иерархически построенная зависимая база данных структуры операционной системы.
Отсюда следует вывод,что флаги применяемые в операционной системе вне реестра имеют аналогичный функционал и в реестре.
В параметрах реестра flags является типом dword,записывается как правило шестнадцатиричном значении.

Я думаю это самая главная основа которую необходимо помнить при изучении флагов.


Снимок.JPG




За окном сверкнула молнией гневно туча-я оглянулся на ее громыхание и усмехнулся...
От неожиданности кот проснулся и подскочил,промазав мимо подоконника)))
Я с молниями в глазах продолжал писать.
_______________________________________________________________________________________


В этой теме мы рассмотрим типы флагов и попытаемся их классифицировать.

Первое что нужно знать-иначе сложно будет понять что заложено в флаге:
Флаги являются независимыми друг от друга и могут быть использованы в любой комбинации.
Их можно совмещать.

Как?
Возьмем в пример флаги для папок-FolderFlags.

0x00800000
Не показывать заголовок столбца в представлении в любом режиме просмотра.
0x02000000
Когда представление находится в "режиме просмотра плитки" макет одного элемента должен быть распространен в поле зрения.

А вот комбинированный вариант:
0x02800000
Сочетает в себе два значения.

Тут стоит понимать,что:

Во первых,значения флагов должны быть логичны и не противоречить друг другу.
Во вторых,бесполезно сочетать например флаг папки с флагом clsid,или применять его к папке-работать не будет.

Да-да,тут то мы и подходим к еще одному крайне важному моменту.

Для каждого типа объектов существуют свои наборы флагов.

В последующих темах (их будет три) я постараюсь изложить их все в специальных удобочитаемых таблицах.

Сейчас лишь обозначу варианты:

1)Ассоциации файлов

2)Управление файловыми операциями

3)Создание событий для выполнения условия

4)Атрибуты и функционал папок и файлов.

5)Инструкции решения конфликтов(например возможность пропустить конфликт)

6)Групповые политики и ограничение доступа,администрирование.

7)Параметры пользовательского интерфейса

8)Параметры браузеров и сетевые.

9)Данные для установки

10)Структура каталогов,сценарии.

Все это мы будем детально рассматривать в последующих темах.

На этом закончу вводный обзор-кратко и понятно.


Тучи уже выдохлись,ветер иссяк силами и молнии перегорели...
А я довольно ударил финальный enter еще раз разбудив кота и пошел
тихонько на кухню за котлетами, дабы не потревожить ночь и молча
пожрать сидя в безмолвных лучах монитора.
Диван манит, чувствую, чары его одолеют меня...

___________________________________________________________________________________________________


moderator: далее обсуждение темы и работа над созданием обзора по этой части реестра

По окончании обсуждение будет вынесено в отдельную тему а обзор отредактирован и дополнен.
 
Последнее редактирование:
Спасибо друг, очень занятная тема, этакий конструктивный взгляд разработчика-теоретика)
 
Последнее редактирование:
О методике рассчета флагов
Флаги чаще всего формируются как сумма битов.
Имея расшифроку, что означает каждый из битов,
достаточно перевести число в двоичную систему счисления, где каждая единичка будет обозначать свой активный параметр.

Проведу некую аналогию:
например, вот как это делается при подсчете маски сходства процесса к номеру процессора:
Aff_args.png

Aff_menu.png

TaskM_manual_1.png

TaskM_manual_2.png
DEC (в 10-й СС)|8|4|2|1
Биты (считаются справо налево)|1|1|1|1
Порядковый номер процессора|3|2|1|0

Чтобы получить сумму битовой маски для 0-го и 2-го процессоров в 4-х ядерной системе,
берем 1-ый (DEC=1) и 3 (DEC=4) биты и складываем 1+4 = 5.
Ну и что мелочится сразу дам оффтоп-ом программу на С++, которая работает с такой маской.

Теперь представим, что вместо № процессоров мы имеем какое-то свойство объекта (видимость, уровень доступа и т.д.), берем калькулятор Windows, преводим 10-чное число в двоичное,
смотрим в табличку, что каждій бит означает (надеюсь, Кирилл когда-то ее закончит :)).
 

Вложения

  • _Affinity.zip
    243.2 KB · Просмотры: 5
Последнее редактирование:
(надеюсь, Кирилл когда-то ее закончит )
Я ее не начинал даже!
Там вариантов миллион наверное!

Просто ума не приложу как сделать ввод в тему,как подать все.

Флаги используются не только в реестре но и повсеместно в системе,флаги бывают разного типа+для каждого типа объектов зачастую назначается своя серия флагов,разные флаги суммируются по разному...короче лес в котором лесники блудили ...

Практически не документировано все,тут я напишу как думаю - а оно раз,и неправдой окажется...короче флаги нескоро мне кажется будут)Про суммирование битов давай подробнее?
Я это не до конца разобрал,по принципу сложения в бинарниках?
Давай на пальцах.
 
Последнее редактирование:
Я нарисовал, чтоб было понятно - на примере рассчета маски для отключения автозапуска с устройств (таблица от Drongo, надеюсь не обидится).
Качественный скрин - в архиве.
 

Вложения

  • Bitmask_Sum_Rule.zip
    123.8 KB · Просмотры: 4
  • Bitmask_Sum_Rule.png
    Bitmask_Sum_Rule.png
    54.1 KB · Просмотры: 131
Стас, меня впечатлил п.8 с твоего рисунка: "если включить смекалку, можно подсчитать без калькулятора".
А знаешь 25 лет назад мы примерно так и считали, ну не было тогда у нас таких крутых калькуляторов :)
Добавлю только, что
1+2+4+8+16+32+64+128=255
это
2 в нулевой степени =1
2 в первой степени =2
2 во второй степени =4
2 в третей степени =8
2 в четвертой степени =16
2 в пятой степени =32
2 в шестой степени =64
2 в седьмой степени =128
В сумме это 8 разрядов, отсюда и пошло название восмеричной системы исчесления, а не как на калькуляторе BIN(бинарная). А восемь разрядов(бит) составляют 1 байт.
Отсюда и первая, всего лишь восьми разрядная(8-ми битная), шина адреса и данных. И была она параллельной шиной(это уже позже появилась последовательная), что бы представить это 8 параллельных проводов по которым и передается зашифрованный таким образом сигнал адреса устройства или данных. И мы по этим сигналам читали и рисовали цифровые схемы. Это основа-основ всей цифровой электроники.
п.с.
А был у нас один товарищ , который писал программы в шестнадцатиричной(шестнадцати разрядной), т.е. 2-х байтной системе исчисления, и я таких больше ни когда в своей жизни не встречал.
т.е. листинг программы был примерно такой,..и процессор, зараза, понимал его программы :D
10111001 01111011
01110011 10101000
11100011 00011101
и т.д
 
shestale, спасибо. Но благодарить нужно моего учителя Lamm Vurdalak - спеца по сетям.

На счет флагов:
Dragokas написал(а):
(надеюсь, Кирилл когда-то ее закончит )
Я ее не начинал даже!
Там вариантов миллион наверное!
Кирилл, а может, тебе в тот раз для анализа не хватало удобного инструмента и того факта, что показал glax24 (перевод в двоичную и сложение по-вертикали (это называется побитовое ИЛИ).
А тебе нужен был инструмент наоборот - разложение на биты... изменение свойства объекта, снова разложение на биты и сравнение разницы.
Полагаю так ты на практике находишь скрытый потенциал? (я помню подобное обещал, но пропал куда-то)
Я смотрел твою удаленную тему (уж извини) о флагах, впечатляет - хотя бы то, какую классификацию по типам им даешь.
Неужели совсем нигде не находил по ним информации? (лично я не искал). Может, все-таки перенести ту тему сюда в раздел, как думаешь?
 
Последнее редактирование:
Dragokas, документация очень скудная,я разными методами и ситуациями разрабатывал эту тему про флаги,и в итоге понял что то что я раньше знал это мелочи.
На данные момент есть неплохой объем информации,догадок,выводов.
Многое чисто свои наработки.

Пока не понимаю все до конца,а так же не могу упорядочить все знания в логически построенное изложение.
В итоге получится бурда,думаю еще знаний надо набраться.


Я смотрел твою удаленную тему (уж извини) о флагах, впечатляет - хотя бы то, какую классификацию по типам им даешь.

О!
А мне показалось бурдой и удалил)


ожет, тебе в тот раз для анализа не хватало удобного инструмента и того факта, что показал glax24 (перевод в двоичную и сложение по-вертикали (это называется побитовое ИЛИ).
А тебе нужен был инструмент наоборот - разложение на биты... изменение свойства объекта, снова разложение на биты и сравнение разницы.

Давайте оформим отдельную тему и я там у вас поучусь чего пропустил?

Неужели совсем нигде не находил по ним информации?

Иногда попадаются портянки типа "если хочешь что бы было так- ставь флаг такой то"
А вот конкретно документации о том как флаги прописываются программно,что бы ОС их воспринимала - такого не нашел.
Только собственные доводы и немного опыта,но я понимаю что знаний того же С# или другого у меня практически нет,а мы ведь понимаем на чем написана винда...Ок,вечером попробую собрать что у меня есть в одно что нибудь осмысленное,попробуем вместе разобраться.
 
Последнее редактирование:
Давайте так поступим.
Тема будет долгая,так как тут прежде всего интересуемся флагами - давайте результаты поиска,какие у кого есть.
(Кому интересно конечно же)
В реестре вы найдете по ключевому слову Flags:
  • Разделы
  • Имена параметров
  • Значения параметров

Нас сначала будут интересовать имена параметров,для каждого раздела есть свой набор-это обусловлено функционалом директории либо совместимостью с глаголом.

Дабы не дублировать что имеется и как то уже разобрано в человеческие мысли:

  • AdvertiseFlags
  • AmdSataChannelFlags
  • AnnounceFlags
  • AppIDFlags
  • ApplicationFlags
  • AreaFlags
  • BootFlags
  • BrowserFlags
  • Compatibility Flags
  • DeviceHackFlags
  • DisplayFlags
  • EditFlags
  • FFlags
  • Flags
  • FolderValueFlags
  • Flags2
Тема долгоиграющая,скорости не ждем - мало времени много задача)
 
По поводу EditFlags в ассоциациях, есть очень старенькая программка, File Type Manager 2 Фрэнка Уорсли. При помощи неё я попытался отредактировать exefile (Application) так, чтобы всегда отображало .exe, даже если стоит галочка "Скрывать расширения для зарегистрированных типов файлов"!
Было 38 07 00 00, стало dword:00040738 (или 38 07 04 00). В добавок к нему я ещё создал параметр AlwaysShowExt с пустым значением, чтоб наверняка... Программа-то старая (2001-й год), и кто знает, какие ещё флаги добавились к ассоциациям за столько лет... В её help'е указана ссылка на несуществующую страницу msdn.
00000001 — FTA_Exclude
00000002 — FTA_Show
00000004 — FTA_HasExtension
00000008 — FTA_NoEdit
00000010 — FTA_NoRemove
00000020 — FTA_NoNewVerb
00000040 — FTA_NoEditVerb
00000080 — FTA_NoRemoveVerb
00000100 — FTA_NoEditDesc
00000200 — FTA_NoEditIcon
00000400 — FTA_NoEditDflt
00000800 — FTA_NoEditVerbCmd
00001000 — FTA_NoEditVerbExe
00002000 — FTA_NoDDE
00004000 — ? включенным пока не попадался...
00008000 — FTA_NoEditMIME
00010000 — FTA_OpenIsSafe
00020000 — FTA_AlwaysUnsafe
00040000 — FTA_AlwaysShowExt (надо для exefile включать сразу!)
00080000 — ? Отсутствует ?
00100000 — FTA_NoRecentDocs
00200000 — ? FTM2 его не ведает, но такой флаг имеют (m)html-документы, svg-файлы
Но кто знает, может в других ключах тот же EditFlags совсем другое "ставит"..
Если некоторые темы уже готовы, выложите ссылки на них в этой теме (постом или в шапке), а то 4 года уже прошло :)
Планирую разобраться ещё с FFlagами в Shell\Bags, но меня больше заинтересовал ColInfo. Я уже составил огромный список этих UID'ов (formatID) и propID для каждого "свойства", но это совсем другая тема...
Заметных изменений можно просто не заметить при смене значений некоторых флагов, поэтому тема действительна сложная.
Кстати, забыли про UserPreferencesMask :)
 
Заметных изменений можно просто не заметить при смене значений некоторых флагов, поэтому тема действительна сложная.
Пока выложить нечего - как вы верно заметили, тема сложная.
В виду того, что она практически никому не была интересна, но ее изучение занимало достаточно много ресурсов и сил - большинство, да почти все: мои хотелки, планы, наметки и так далее остались недоработками, которые лежат огромной папкой с информацией, в которой даже мне сегодня будет достаточно сложно разобраться быстро.
Когда я уперся в то, что не хватало навыков в программировании, технических знаний и так далее - начал все это изучать. Потом в какой то момент затянули некоторые разработки, новые интересы... и та логическая нить, которая все это связывало в моей голове на сегодня утрачена.
Вижу свои старые темы по реестру, многое хочется переделать и создать новое - но пока что с духом все не соберусь))
Так что если у вас есть что показать, рассказать - будьте любезны и вы поделиться, как говорится одна голова хорошо, а много - лучше!
 
в ассоциациях, есть очень старенькая программка, File Type Manager 2 Фрэнка Уорсли. При помощи неё я попытался отредактировать exefile (Application)
Есть от Nirsoft с похожим названием и похожим функционалом, но не такая старая программа https://safezone.cc:443/resources/filetypesman.174/
 
Есть от Nirsoft с похожим названием и похожим функционалом, но не такая старая программа
Да писал несколько раз этому NirSofer'у. Видимо, посчитал спамом.... Функционала у него гораздо меньше. Во-первых, нет ассоциаций с AudioCD и DVD! (Есть Drive, Folder и Directory, но нет "специализированных дисков"!). Во-вторых, флаги он менять не умеет. В-третьих, нельзя выбрать, куда поместить новую "ассоциацию": HKLM\SOFTWARE\Classes или в HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts (хотя этого и в старой нет).. А что уж говорить про CLSiD'ы.. Ну и нет такого бонуса, как обработчики контекстного меню (выведено в отдельную программу ShellMenuView), страниц свойств, DragDrop, и прочих, что можно увидеть в ShellExView...
Кстати, в CLSiD'ах можно встретить ещё одно имя: Attributes
А AlwaysShowExt как 0x00040000-флаг не работает на 7ке (и наверно даже в XP-шке, раз он заменён наличием пустого строкового параметра с этим же именем).
флаги применяемые в операционной системе вне реестра имеют аналогичный функционал и в реестре.
Я вот хочу наоборот, поместить флаги (колонки и сортировку) с "Shell\Bags" в desktop.ini. Но пока в desktop.ini только рядом с CLSID'ом замечал Flags=0, и поэтому подозреваю, что этот флаг отличается от FFlags в Shell\Bags\... А то на одном компе настроишь вид на флешке, приносишь на другой, опять перенастраивать надо, да ещё и сама флешка может монтироваться в другую букву, и опять всё по-новой (вот за что я ненавижу эти мегабайты "мешков" мусора в реестре)...
Полную расшифровку UserPreferencesMask нашёл в UPMCalc (UserPreferencesMask Calculator), разраб — aerDNA. Про 7-й бит (что обычно включён вместе с 4-м (градиент фона в заголовках окна на старых темах), поэтому первую цифру в REG_BINARY мы видим 9-ку) не сказано, что убираются подсказки с кнопок управления окном (свернуть, равзернуть/восстановить, закрыть), или ещё где, поэтому и здесь подозреваю, что некоторые флаги с каждой новой версии Windows® ведут себя не так, как задумано.
Есть ещё такое имя параметра: [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\<какой-нибудь ключ>] AttributeMask
А в настройках Network Adapter'а есть ещё такое: Characteristics
Так что, помимо флагов и масок, есть и другие имена, содержащие к примеру, State/Status или того хуже, Type, Mode...

опоздал с редактированием сообщения, модератор объединит...
Кстати, в CLSiD'ах можно встретить ещё одно имя: Attributes
Хотя, Вы уже его встречали в теме со способами запуска программ с использованием CLSID...
 
Последнее редактирование модератором:
По AttributeMask и AttributeValue нашлось упоминание про SFGAOF (Enums)

Код:
[Flags]
    public enum SFGAOF : uint {
        SFGAO_CANCOPY       = 0x1,                // Objects can be copied    (DROPEFFECT_COPY)
        SFGAO_CANMOVE       = 0x2,                // Objects can be moved     (DROPEFFECT_MOVE)
        SFGAO_CANLINK       = 0x4,                // Objects can be linked    (DROPEFFECT_LINK)
        SFGAO_STORAGE       = 0x00000008,         // supports BindToObject(IID_IStorage)
        SFGAO_CANRENAME     = 0x00000010,         // Objects can be renamed
        SFGAO_CANDELETE     = 0x00000020,         // Objects can be deleted
        SFGAO_HASPROPSHEET      = 0x00000040,         // Objects have property sheets
        SFGAO_DROPTARGET    = 0x00000100,         // Objects are drop target
        SFGAO_CAPABILITYMASK    = 0x00000177,
        SFGAO_ENCRYPTED     = 0x00002000,         // object is encrypted (use alt color)
        SFGAO_ISSLOW        = 0x00004000,         // 'slow' object
        SFGAO_GHOSTED       = 0x00008000,         // ghosted icon
        SFGAO_LINK          = 0x00010000,         // Shortcut (link)
        SFGAO_SHARE         = 0x00020000,         // shared
        SFGAO_READONLY      = 0x00040000,         // read-only
        SFGAO_HIDDEN        = 0x00080000,         // hidden object
        SFGAO_DISPLAYATTRMASK   = 0x000FC000,
        SFGAO_FILESYSANCESTOR   = 0x10000000,         // may contain children with SFGAO_FILESYSTEM
        SFGAO_FOLDER        = 0x20000000,         // support BindToObject(IID_IShellFolder)
        SFGAO_FILESYSTEM    = 0x40000000,         // is a win32 file system object (file/folder/root)
        SFGAO_HASSUBFOLDER      = 0x80000000,         // may contain children with SFGAO_FOLDER
        SFGAO_CONTENTSMASK      = 0x80000000,
        SFGAO_VALIDATE      = 0x01000000,         // invalidate cached information
        SFGAO_REMOVABLE     = 0x02000000,         // is this removeable media?
        SFGAO_COMPRESSED    = 0x04000000,         // Object is compressed (use alt color)
        SFGAO_BROWSABLE     = 0x08000000,         // supports IShellFolder, but only implements CreateViewObject() (non-folder view)
        SFGAO_NONENUMERATED     = 0x00100000,         // is a non-enumerated object
        SFGAO_NEWCONTENT    = 0x00200000,         // should show bold in explorer tree
        SFGAO_CANMONIKER    = 0x00400000,         // defunct
        SFGAO_HASSTORAGE    = 0x00400000,         // defunct
        SFGAO_STREAM        = 0x00400000,         // supports BindToObject(IID_IStream)
        SFGAO_STORAGEANCESTOR   = 0x00800000,         // may contain children with SFGAO_STORAGE or SFGAO_STREAM
        SFGAO_STORAGECAPMASK    = 0x70C50008,         // for determining storage capabilities, ie for open/save semantics
    }
VB Definition:
 
Последнее редактирование модератором:
Вообще немного занимался этой темой (параллельно делам) и пришел к выводу, что флаги это лишь аналог аргументов, эдакий хранитель состояния.
Странно только то, что разрабы эти фишки практически не документируют - а ведь в ОС гигантское количество объектов, поддерживающих флаги.
Были идеи сгенерировать их все, но на сейчас руки не оттуда.
И при этом остается вопрос - ну вот выцепили мы объекты, поддерживающие флаги, а как узнать как их применить?
 
Назад
Сверху Снизу