Сегодня я хочу начать разговор о редко обсуждаемой в сети, но крайне интересно технологической особенности ОС Windows – о политике продукта (далее буду назвать её оригинальным названием Product Policy). Каким образом Microsoft решает, сколько RDP сессий возможно одновременно открыть на ОС (почему в IOT их 2)? Где сказано, что у издания Windows Enterprise G может быть лишь английский или китайский языковой пакет? Где определено максимальное количество процессоров и памяти, максимальное количество подключений к расшаренной сетевой папке, как решается поддерживает ли ОС RDMA, требует ли SMB Signing, отключаются ли SMB1, Defender и Cortana. Да практически все компоненты и отличия разных изданий Windows контролируются именно через Product Policy, и пора бы нам разобраться, что это такое, где хранится, как изменять, и к чему приведут изменения.
Я расскажу об инструменте, позволяющем не только смотреть, но и изменять Product Policy, поговорим о Product Policy Editor, рассмотрим, где хранятся текущие значения Product Policy в Windows, и почему они возвращаются к исходным значениям, ну и, конечно, о том, можно ли как-то поменять это всё раз и навсегда для своей ОС, навсегда отключив нелюбимый Defender, разрешив неограниченное количество RDP сессий. Ну и, конечно, cделаем ранее невозможное — добьёмся русского интерфейса для интересного издания, описанного мной в наделавшей шума статье Windows 11 Enterprise G – Что за издание для правительства Китая и зачем оно вам? Судя по огромному интересу читателей именно к Windows Enterprise G, я начну с неё, а другие аспекты Product Policy, сравнение параметров между изданиями расскажу в другой статье, там же поясню свою мысль о том, что теперь «все издания нужны, все издания равны», — мы можем включить ранее выключенные и отключить ненужные компоненты в любых изданиях, например, разрешить многое в самом лёгком Starter, или поотключать ненужное в любимом мной IoT Enterprise LTSC.
Итак, Product Policy это список разнообразных параметров, определяющих работу тех или иных компонентов ОС. Список совсем не малый, в Windows 11 24H2 насчитывает 615 таких пунктов, а в Windows 10 22H2 – 534 пункта. В любом издании все эти параметры определены в файле WindowsSystem32spptokensskusEDITIONEDITION-ppdlic.xrm-ms, где на месте слова EDITION в имени каталога и файла значится название SKU издания (Professional, EnterpriseG, IoTEnterpriseS, Cloud, etc) или тип лицензии (например, csvlk-pack). Данный файл у каждого издания свой, имеет все параметры, определяемые Product Policy, идёт внутри Install.wim и применяется к образу при установке, и при каждой перезагрузке ОС. Он подписан цифровой подписью, так что его модификации будут обнаружены службой sppsvc. При загрузке содержимое этого файла загружается в реестр в ключ HKLM SYSTEMCurrentControlSetControlProductOptionsProductPolicy, и именно отсюда ОС и берёт значения по ходу работы.
Как же посмотреть на список параметров и их значения? Можно ли их изменять?
Существует интересная программа Windows Policy Editor, давно разрабатываемая энтузиастами MyDigitalLife. Она доступна в том числе в исходниках и умеет работать не только с онлайн системой, но и с оффлайн образами. Вы можете менять любые параметры из утилиты:
Однако, чтобы записать значение для онлайн ОС (не образ или подмонтированный реестр), вам потребуется перезагрузка с режимом SetupType=1, иначе будете получать ошибку сохранения изменений:
Итак, я перезагружаюсь в Setup Mode и снова запускаю Product Policy Editor. Один из любопытных параметров называется Kernel-MUI-Language-Allowed, в издании Enterprise G его значение выставлено на zh-CN; en-US. У всех остальных изданий значение имеет EMPTY (именно текстом слово EMPTY). Если это поле изменить – в реестре через утилиту и в файле политик в WindowsSystem32spptokensskus, а также отключить службу sppsvc, то мы сможем установить любой Language Pack на Windows Enterprise G (и Windows 10 и Windows 11, как 32-бит, так и 64-бит). Для этого в Product Policy Editor найдём параметр Kernel-MUI-Language-Allowed, зададим ему значение EMPTY, сохраним значение выбрав Save changes to the registry.
Далее, как я уже говорил, нам необходимо отредактировать файл, в котором определены требования лицензии к изданию. Для EnterpriseG сразу после установки это файл C:WindowsSystem32spptokensskusEnterpriseGEnterpriseG-ppdlic.xrm-ms, а если вы активировали ОС через KMS, сменив серийник на KMS ключ, то имя файла лицензии изменилось на C:WindowsSystem32spptokensskuscsvlk-packcsvlk-pack-ppdlic.xrm-ms. В этом файле хранятся все особенности издания, в нашем случае мы хотим изменить значение ключа Kernel-MUI-Language-Allowed, заменив в нём zh-CN; en-US на EMPTY. Для этого придётся похимичить с NTFS правами доступа на этот файл или запускать редактирование с правами System. Я по старинке используя утилиту NSUDO с параметрами -U:T -P:E запускаю CMD.exe, из командной строки, получаю права системы, после чего могу отредактировать данный файл в блокноте.
Наконец, мне необходимо отключить службу sppsvc, запустив из той же CMD с правами системы редактор реестра REGEDIT, я заменю значение ключа с 2 на 4 (отключу запуск службы).
Далее просто перезагружаюсь и спокойно меняю язык интерфейса на русский. Вуаля.
В следующий раз расскажу подробнее о Product Policy для других целей (список возможно интересных задач озвучен в первом абзаце статьи и приведён в виде таблицы). Если остались вопросы, отвечу в комментариях. Интересна дискуссия о редактировании Product Policy для других изданий (Windows IoT Enterprise LTSC, Windows Server, Azure Stack HCI), об этом больше как раз в следующей статье, постараюсь осветить основные вопросы из комментариев. Ставьте лайк, подписывайтесь.
Автор: akibkalo