Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions exports/digests.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 7 additions & 8 deletions exports/port-capabilities.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion exports/task-inputs.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 24 additions & 2 deletions ports/windows/COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,33 @@

## Compatibility boundary

The recorded candidates are Windows 11 x64 builds 26200.9550 and
26300.9550 with the redesigned Start layout. `host.json` records exact Explorer, StartDocked, SystemSettings,
The recorded candidate is Windows 11 x64 build 26300.9711 with the
redesigned Start layout. It replaces the retired 26200.9550 and 26300.9550
candidates; those builds no longer qualify for Full mode. `host.json` records exact Explorer, StartDocked, SystemSettings,
ShellExperienceHost and SearchHost versions, plus Start, shell and Client.CBS
package versions. A changed, absent or unreadable input refuses Full mode.

The 26300.9711 readout changed StartDocked and Explorer's fixed version to
10.0.26100.9711. Explorer's display version remains 10.0.26100.8117, while
ExplorerFrame, DirectUI and SystemSettings remain at fixed version
10.0.26100.9549. Common Controls, Windows Imaging Component, shellcommon and
system XAML have new exact identities. The adapter pins use the observed
versions and hashes, not an assumed common revision across all Windows files.
Terminal's separate package pin is 1.24.12741.0; its controls package and the
Notepad, Paint, Calculator, App Runtime and PowerToys identities remain unchanged.
These identity checks do not establish installed appearance or symbol resolution.

WebView2 155.0.4283.45 also requires a separate Markdown boundary entry. An
isolated empty controller created with the public WebView2 SDK measured
NavigateToString at RVA 0x87bb0, Navigate at 0x87b10, the Controller2 background
getter at 0x56780, setter at 0x56840 and Close at 0x54cc0. All five addresses
belonged to executable memory in the same complete-hash-pinned module. The
transparent-white, opaque-black and original background round trips passed;
empty HTML navigation, about:blank navigation and Close returned success.
Those calls do not establish navigation completion or installed preview
appearance. Markdown adapter 1.4.2 retains the earlier reviewed runtime entries
and their separate original-call storage; no version range is admitted.

Start detection reads the same three feature-state inputs as pinned Start Menu
Styler 1.7. It does not modify feature flags. Default/unknown/query failure is
unknown; no marketing version or guessed layout grants compatibility. This
Expand Down
10 changes: 5 additions & 5 deletions ports/windows/dist/install-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"files": [
{
"path": "dist/j3w1-explorer-native.wh.cpp",
"sha256": "5191b919579d6c6c8897064ab33a59d4524cab42fd6a5b999a0409510cf47c72"
"sha256": "9567e7457ad049753d150761717ad9d7843200e48fdb72b399dbde18d2e5e26e"
},
{
"path": "dist/j3w1-explorer-native.json",
Expand Down Expand Up @@ -52,15 +52,15 @@
},
{
"path": "dist/j3w1-terminal-chrome.wh.cpp",
"sha256": "92c356a2e89a54859967355dce797b08e3e56c807554926e791a6dc638981170"
"sha256": "18a7ca52f8ba614d2a3068fddca7844ec07563544f45b9ab1fb33bb100796bae"
},
{
"path": "dist/j3w1-terminal-chrome.json",
"sha256": "fa5c087652dba209ab8ff6004642106ab801f86c5de197c5a48844da066dce73"
},
{
"path": "dist/j3w1-powertoys-markdown.wh.cpp",
"sha256": "c1afe27af0186af5c971e2e35c95fcd1b7b8024419f7276c245b40b282db89a6"
"sha256": "0ae68b4df825d38fc45080f10c6edd56831cefa284140e9edb8998c8ec7bd686"
},
{
"path": "dist/markdown-theme.css",
Expand All @@ -72,7 +72,7 @@
},
{
"path": "dist/windows-settings.json",
"sha256": "70b27ad15defc572a9dd44c8a3aab29ba9c2566284b47e41570f1d2e724852d3"
"sha256": "f5f7c7a5a3599838e1d0d344d82c14e28c4b7f85b432730f5c83c4f453734578"
},
{
"path": "dist/terminal-fragment.json",
Expand Down Expand Up @@ -212,7 +212,7 @@
},
{
"path": "host.json",
"sha256": "fa6fac6cd54202cf3127ceedd95f0c50c021d030c7240d890e80e2e150da11f9"
"sha256": "5c07a91168d2cd8ea32081cb71254bba1bb435ea6ff04885bfb2492ca950b1be"
}
]
}
14 changes: 7 additions & 7 deletions ports/windows/dist/j3w1-explorer-native.wh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// @id j3w1-explorer-native
// @name j3w1 Explorer native colors
// @description Generated native Explorer canvas and text adapter; exact host only
// @version 1.8.5
// @version 1.8.6
// @author j3w1
// @include explorer.exe
// @architecture x86-64
Expand Down Expand Up @@ -635,8 +635,8 @@ static bool Caller(void* address) noexcept {
reinterpret_cast<LPCWSTR>(address),&module)||module!=GetModuleHandleW(L"windowsudk.shellcommon.dll"))return false;
std::lock_guard guard(moduleLock);
if(retainedShell)return module==retainedShell;
if(!FixedModuleVersion(module,MAKELONG(0,10),MAKELONG(9550,26100))
||!Digest(module,"410141eceecfaa5d7cccbfd7c357920988bf18fec3db7f6865eec674677c0204"))return false;
if(!FixedModuleVersion(module,MAKELONG(0,10),MAKELONG(9711,26100))
||!Digest(module,"a76a9246b16a3c237607cc3d99815e03986ef7731c2b88480cfbd6edf1ef4d3d"))return false;
// Retain the admitted module until hook cleanup so a recycled handle cannot
// inherit an earlier module's admission. Missing/unknown callers pass through.
return GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,reinterpret_cast<LPCWSTR>(address),&retainedShell)!=FALSE;
Expand Down Expand Up @@ -670,8 +670,8 @@ static bool Init() noexcept {
auto function=(*reinterpret_cast<void***>(factory))[22];HMODULE module=nullptr;
ready=GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
reinterpret_cast<LPCWSTR>(function),&module)&&module==GetModuleHandleW(L"windowscodecs.dll")
&&FixedModuleVersion(module,MAKELONG(0,10),MAKELONG(9549,26100))
&&Digest(module,"ad3f960fc9d612c0289035f1b5c334dd44e423ce6c23059ab5129746cd0646f2")
&&FixedModuleVersion(module,MAKELONG(0,10),MAKELONG(9711,26100))
&&Digest(module,"e82652590bce20641926956a65eade7c54e71c240557dba37335f061352b58e0")
&&Wh_SetFunctionHook(function,reinterpret_cast<void*>(Hook),reinterpret_cast<void**>(&originalConvert));
}
if(ready){retainedFactory=factory;factory=nullptr;}
Expand Down Expand Up @@ -749,7 +749,7 @@ static bool InitNavigationPin() {
MODULEENTRY32W entry{};entry.dwSize=sizeof(entry);HMODULE module=nullptr;
if(Module32FirstW(snapshot,&entry))do {
if(_wcsicmp(entry.szModule,L"comctl32.dll")==0
&& FixedModuleVersion(entry.hModule,MAKELONG(10,6),MAKELONG(9549,26100))) {
&& FixedModuleVersion(entry.hModule,MAKELONG(10,6),MAKELONG(9711,26100))) {
if(module){CloseHandle(snapshot);return false;}module=entry.hModule;
}
}while(Module32NextW(snapshot,&entry));
Expand Down Expand Up @@ -1206,7 +1206,7 @@ BOOL Wh_ModInit() {
std::vector<BYTE> bytes(size);
VS_FIXEDFILEINFO* version=nullptr;UINT length=0;
if(!size || !GetFileVersionInfoW(executable,0,size,bytes.data()) || !VerQueryValueW(bytes.data(),L"\\",(void**)&version,&length)
|| length<sizeof(*version) || version->dwFileVersionMS!=MAKELONG(0,10) || version->dwFileVersionLS!=MAKELONG(9549,26100)) {return FALSE;}
|| length<sizeof(*version) || version->dwFileVersionMS!=MAKELONG(0,10) || version->dwFileVersionLS!=MAKELONG(9711,26100)) {return FALSE;}
themeClass=(ThemeClassFn)GetProcAddress(GetModuleHandleW(L"uxtheme.dll"),MAKEINTRESOURCEA(74));
if(!themeClass) {return FALSE;}
ExplorerRenderingModules renderers;
Expand Down
6 changes: 4 additions & 2 deletions ports/windows/dist/j3w1-powertoys-markdown.wh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// @id j3w1-powertoys-markdown
// @name j3w1 Windows preview backing and PowerToys Markdown
// @description Exact-version black and rose Markdown rendering adapter
// @version 1.4.1
// @version 1.4.2
// @author j3w1
// @include PowerToys.MarkdownPreviewHandler.exe
// @include prevhost.exe
Expand Down Expand Up @@ -55,6 +55,7 @@ static constexpr BrowserPin browserPins[]={
{"89df7d69b27dd6c17228c7319e84e22a97076cb3d68271617490f38ab204ea3f",0x896f0,0x89650,0x0,0x0,0x0}, // 154.0.4258.48
{"07b9416907225b99556c2a5242ecc6d16afd83d374b151285cfe41f164843c1c",0x8a290,0x8a1f0,0x58e50,0x58f10,0x57380}, // 154.0.4258.53
{"0cfcd55c5095aec1ab484f15af1ef24bb4dd87b2807557ef7feeb4535c70e0e7",0x8a290,0x8a1f0,0x58e50,0x58f10,0x57380}, // 154.0.4258.62
{"19eec800fb666a0f939c1fc2113c3bcfc2ad352776d5ddfcb4994d15f77d9b4c",0x87bb0,0x87b10,0x56780,0x56840,0x54cc0}, // 155.0.4283.45
};
struct Boundary {HMODULE module=nullptr;bool attempted=false;std::atomic<bool> ready{false};NavigateFn originalString=nullptr,originalNavigate=nullptr;GetBackgroundFn getBackground=nullptr;SetBackgroundFn originalBackground=nullptr,publicBackground=nullptr;CloseControllerFn originalClose=nullptr;};
static Boundary boundaries[std::size(browserPins)];
Expand Down Expand Up @@ -203,7 +204,7 @@ static BOOL CALLBACK DiscoverPreviewOwner(HWND window,LPARAM) {
wchar_t exe[32768]{};DWORD length=std::size(exe);
try{
if(QueryFullProcessImageNameW(lifetime,0,exe,&length)&&length<std::size(exe)
&&DigestFile(exe,"34ac55b23b6d840cc9fa8304c0149b8bb026d817b39610728092878d634a61eb")&&CachePreviewOwner(process,lifetime))return TRUE;
&&DigestFile(exe,"eee089fe6f927c7f0d51b0abd9d70c094157e33673ad760713ec7b1cea18ee11")&&CachePreviewOwner(process,lifetime))return TRUE;
}catch(...){} // Native notifications must retain fallback after allocation failure.
CloseHandle(lifetime);return TRUE;
}
Expand Down Expand Up @@ -556,6 +557,7 @@ static bool InstallBoundary(HMODULE module){
case 1:return HookBoundary<1>(module);
case 2:return HookBoundary<2>(module);
case 3:return HookBoundary<3>(module);
case 4:return HookBoundary<4>(module);
}
return false;
}
Expand Down
Loading
Loading