diff --git a/exports/digests.json b/exports/digests.json index c077fe36..c57f8c67 100644 --- a/exports/digests.json +++ b/exports/digests.json @@ -146,7 +146,7 @@ "exports/forms/templates.json": "sha256-k2e6tcvD0k6hUCU+l+1itDIeEGjAzxvq8bCmewl8XRg=", "exports/llms.txt": "sha256-Bzchjr9xc74FBFmz0hwbl9kjJBWCV/L8ZL/q+NvFOm8=", "exports/patterns/validation-recovery.json": "sha256-lEhLGkNYFlXf0uPnDL1o8ByPx87iuFosyhgUqEHPZag=", - "exports/port-capabilities.json": "sha256-DiXhXfk0jMz/LEwoZXv/Kc8HP19FN/ax16RFnbQFMf8=", + "exports/port-capabilities.json": "sha256-GZzHHeZ1JUrbr0zcErzYtoS9ZN29T8KNYmWY75l9lMM=", "exports/recipes/button/LICENSE.md": "sha256-vVf/G6WKJRqbyGZCppbAxMh+UAJdSzaPt5xWUujehyU=", "exports/recipes/button/README.md": "sha256-80dVa3TLTwhDpEaXVdkXftTNdzUISSIfCLjoSp/v7eU=", "exports/recipes/button/component.css": "sha256-fO1HSQ+wy0Zku8pqVotCypnOH+iDz8SAX9GxMspxA8U=", @@ -178,7 +178,7 @@ "exports/recipes/text-field/template.html": "sha256-IlSlLS7sPC3MLqIdxMRQUP4sFnn/58lwM3AFALtdY3c=", "exports/recipes/text-field/tokens.css": "sha256-zjVcq7LwtSQfrFMkCNQ3qgqOctaVyaz3bTbWiXOvDVw=", "exports/recipes/text-field/two-instances.html": "sha256-IHBsJlaIcd5hGRPnWVXegcrdrvG287OvtxoWBW+Yua4=", - "exports/task-inputs.json": "sha256-EePjcPZ9EsFyMRXJW7z8F67uMsTIIqp7f9N+CPh0Qlg=", + "exports/task-inputs.json": "sha256-ml4c4OkgkHUepI7PdC/UW2tmJQZWB7u+GAqW7HZ1iZ8=", "exports/theme.compact.md": "sha256-JSKpZk12od+qtrVK7NbrVMY/zYwpG41Wjg5CTqROl9A=", "exports/theme.full.md": "sha256-4+hWVLZNFO6kDwfKpt21CNBynAahQlsfMMEca3RkKos=", "exports/token-usage.json": "sha256-YfOuc5ZsVeTby4y2ZnmvIDA5tNLSiN2tCE2noUGu+u4=", diff --git a/exports/port-capabilities.json b/exports/port-capabilities.json index 44d82a55..271ada5e 100644 --- a/exports/port-capabilities.json +++ b/exports/port-capabilities.json @@ -3384,8 +3384,7 @@ "themeRevision": "edf3c50d768f1f8663a2e8e470c4f21a69718b0f", "profile": "default", "targetVersions": [ - "26200.9550", - "26300.9550" + "26300.9711" ], "testedVersions": [], "os": [ @@ -3395,7 +3394,7 @@ "status": "not verified", "reason": "No recorded real-import protocol bound to this subject." }, - "subjectDigest": "sha256-j4Zx21ZqIhuZlE5iMBN5g+G6xNqPuy8W9TYO5zYg7xo=", + "subjectDigest": "sha256-jQsUk69bOttnfjaxFzwgBZXiPqVZCEQIAz1Uls4bMmc=", "evidencePath": null, "surfaces": { "desktop": { @@ -3424,7 +3423,7 @@ } }, "files": [ - {"path":"dist/windows-settings.json","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/windows-settings.json","digest":"sha256-cLJ60V3vxXKp3UTIo6qym6nCVmKEtH5BVw8dLnJIUtM="}, + {"path":"dist/windows-settings.json","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/windows-settings.json","digest":"sha256-9ffHpaNZmDjh0NNE2CwU4oxLf4W0MnMPXIPE9FNzRXg="}, {"path":"dist/terminal-fragment.json","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/terminal-fragment.json","digest":"sha256-glf6am7wX5QkZ3OIDfEziT6ybDrB92Kb2mK+pxwdHwU="}, {"path":"dist/terminal-theme.json","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/terminal-theme.json","digest":"sha256-YDVCqcDc0CFBE3B3OxgxyU/ckKZlysWJryRfu/yGtiI="}, {"path":"dist/fancyzones-layouts.json","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/fancyzones-layouts.json","digest":"sha256-tBt1KjS7Azw5TOrDrDOkysIFDNwU5rnHUtMZHr9CwRI="}, @@ -3453,14 +3452,14 @@ {"path":"dist/j3w1-pin.cur","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/j3w1-pin.cur","digest":"sha256-YMoFMCRCo6hoBhSOJlEsciiYnvmGICxtErmdS0SrJeg="}, {"path":"dist/j3w1-person.cur","install":"Use the pinned ports/windows/install.ps1 lifecycle; do not overwrite whole application settings.","source":"ports/windows/dist/j3w1-person.cur","digest":"sha256-be/7eNvDKI8kadus9JedWvDVjQMqn8h+6hKTq6Q2Sas="}, {"path":"dist/runtime.cjs","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/runtime.cjs","digest":"sha256-Dd2NdFn6INxWKHvCcKMB6d+JhcbytJuyJi1cJ4qJPoc="}, - {"path":"dist/install-manifest.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/install-manifest.json","digest":"sha256-/CLpF899LZQLbvdXPnCOP8i8sOqCV/abmjC4zBTtPr0="}, - {"path":"dist/j3w1-explorer-native.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-explorer-native.wh.cpp","digest":"sha256-UZG5GVedbGyIlwZKszpZ1FJMq0L9aluZmgQJUQz0fHI="}, + {"path":"dist/install-manifest.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/install-manifest.json","digest":"sha256-y6tD9yl2Bph9z9D/1ElXyzUvevgX/ifNLTmMm/BHZRc="}, + {"path":"dist/j3w1-explorer-native.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-explorer-native.wh.cpp","digest":"sha256-lWfnRXrQSXU9FQdhcXrZ14QyAOSP23KzmdveGNLl4m4="}, {"path":"dist/j3w1-explorer-native.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-explorer-native.json","digest":"sha256-vQxo6eBftVLPu2CjGOgf5Kk8MPGCn9Z4wAMouQml8kI="}, {"path":"dist/j3w1-powertoys-preview.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-powertoys-preview.wh.cpp","digest":"sha256-qiQXD/TrtAv3itar4U49iM6/6s3iHIw5LmWccgfrt6E="}, {"path":"dist/j3w1-powertoys-preview.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-powertoys-preview.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="}, {"path":"dist/j3w1-calculator.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-calculator.wh.cpp","digest":"sha256-924taI+ovdtQqfLQWcExknj2+MdyIYfTww8+ptTbpiY="}, {"path":"dist/j3w1-calculator.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-calculator.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="}, - {"path":"dist/j3w1-powertoys-markdown.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-powertoys-markdown.wh.cpp","digest":"sha256-wa/ievAYavXJceLjXJX80be4AkQZ9ydsJFtAsoLbiaY="}, + {"path":"dist/j3w1-powertoys-markdown.wh.cpp","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-powertoys-markdown.wh.cpp","digest":"sha256-CuaLTfgl04/EUIDxDG7dVoMc76KEFA6e24mYyOx71oY="}, {"path":"dist/j3w1-powertoys-markdown.json","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/j3w1-powertoys-markdown.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="}, {"path":"dist/markdown-theme.css","install":"Use the pinned Windows lifecycle installer.","source":"ports/windows/dist/markdown-theme.css","digest":"sha256-m8FKRZq8tsK+6aALp6L8lbF2YbBI/zpVpKQzgudC4yM="}, {"path":"dist/j3w1-folder.ico","install":"Run the single pinned ports/windows/install.ps1; folder defaults are included in its saved rollback.","source":"ports/windows/dist/j3w1-folder.ico","digest":"sha256-u7se2WhFGTHeghKcgAIeJHjvMsjZ5RgvjU01oemZ81Y="}, @@ -3471,7 +3470,7 @@ {"path":"dist/j3w1-notepad-chrome.json","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-notepad-chrome.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="}, {"path":"dist/j3w1-paint-chrome.wh.cpp","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-paint-chrome.wh.cpp","digest":"sha256-3Y2Fd8lb983ueXmhjX9gxre/jhlfn3XBhj//R/IcENo="}, {"path":"dist/j3w1-paint-chrome.json","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-paint-chrome.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="}, - {"path":"dist/j3w1-terminal-chrome.wh.cpp","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-terminal-chrome.wh.cpp","digest":"sha256-ksNWouiaVIWZZzVdznl7COPlbIB1VJJueRptxjiYEXA="}, + {"path":"dist/j3w1-terminal-chrome.wh.cpp","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-terminal-chrome.wh.cpp","digest":"sha256-GKfKUvi6YU0qMGj93KeETsB1Y1RPRbmrH7M7sQB5a64="}, {"path":"dist/j3w1-terminal-chrome.json","install":"Use the single pinned ports/windows/install.ps1 lifecycle; chrome changes share its saved rollback.","source":"ports/windows/dist/j3w1-terminal-chrome.json","digest":"sha256-+lwIdlLbogmrj/YARkIQargB+Gxd4ZfFpIhE2gZtznM="} ], "rollback": "Run install.ps1 -Action Restore for original settings, or add -Latest for the previous transaction; Uninstall also removes owned theme assets.", diff --git a/exports/task-inputs.json b/exports/task-inputs.json index b1164a3c..e321cbd3 100644 --- a/exports/task-inputs.json +++ b/exports/task-inputs.json @@ -1076,7 +1076,7 @@ "exports/components/tooltip.json": "sha256-zHJOkbFWm8kVW4pUZNvO+RWzZO6o4abhNChnoK/8ePU=", "exports/components/tree.json": "sha256-vx+JXco/UlIBtpKY7l6JlQn1MY45aQ56j+l0Ur6vRC8=", "exports/components/wizard.json": "sha256-QzvuXUR2D5Xx74KpgTmlHsaq2cDmQEJ/5nh+ZDbDG1U=", - "exports/port-capabilities.json": "sha256-DiXhXfk0jMz/LEwoZXv/Kc8HP19FN/ax16RFnbQFMf8=", + "exports/port-capabilities.json": "sha256-GZzHHeZ1JUrbr0zcErzYtoS9ZN29T8KNYmWY75l9lMM=", "exports/recipes/button/component.css": "sha256-fO1HSQ+wy0Zku8pqVotCypnOH+iDz8SAX9GxMspxA8U=", "exports/recipes/button/example.html": "sha256-6Jd+ynSweVG+DO3EUHUbEUNSEbj5+6+iBzqXU4YLtIs=", "exports/recipes/button/foundation.css": "sha256-jm66ZdmdAhTyMVQIMKhzVZZm/NhB5ZbLq8g3UASzy98=", diff --git a/ports/windows/COMPATIBILITY.md b/ports/windows/COMPATIBILITY.md index 69048e3c..9a89021a 100644 --- a/ports/windows/COMPATIBILITY.md +++ b/ports/windows/COMPATIBILITY.md @@ -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 diff --git a/ports/windows/dist/install-manifest.json b/ports/windows/dist/install-manifest.json index 645f48ff..287f8514 100644 --- a/ports/windows/dist/install-manifest.json +++ b/ports/windows/dist/install-manifest.json @@ -4,7 +4,7 @@ "files": [ { "path": "dist/j3w1-explorer-native.wh.cpp", - "sha256": "5191b919579d6c6c8897064ab33a59d4524cab42fd6a5b999a0409510cf47c72" + "sha256": "9567e7457ad049753d150761717ad9d7843200e48fdb72b399dbde18d2e5e26e" }, { "path": "dist/j3w1-explorer-native.json", @@ -52,7 +52,7 @@ }, { "path": "dist/j3w1-terminal-chrome.wh.cpp", - "sha256": "92c356a2e89a54859967355dce797b08e3e56c807554926e791a6dc638981170" + "sha256": "18a7ca52f8ba614d2a3068fddca7844ec07563544f45b9ab1fb33bb100796bae" }, { "path": "dist/j3w1-terminal-chrome.json", @@ -60,7 +60,7 @@ }, { "path": "dist/j3w1-powertoys-markdown.wh.cpp", - "sha256": "c1afe27af0186af5c971e2e35c95fcd1b7b8024419f7276c245b40b282db89a6" + "sha256": "0ae68b4df825d38fc45080f10c6edd56831cefa284140e9edb8998c8ec7bd686" }, { "path": "dist/markdown-theme.css", @@ -72,7 +72,7 @@ }, { "path": "dist/windows-settings.json", - "sha256": "70b27ad15defc572a9dd44c8a3aab29ba9c2566284b47e41570f1d2e724852d3" + "sha256": "f5f7c7a5a3599838e1d0d344d82c14e28c4b7f85b432730f5c83c4f453734578" }, { "path": "dist/terminal-fragment.json", @@ -212,7 +212,7 @@ }, { "path": "host.json", - "sha256": "fa6fac6cd54202cf3127ceedd95f0c50c021d030c7240d890e80e2e150da11f9" + "sha256": "5c07a91168d2cd8ea32081cb71254bba1bb435ea6ff04885bfb2492ca950b1be" } ] } diff --git a/ports/windows/dist/j3w1-explorer-native.wh.cpp b/ports/windows/dist/j3w1-explorer-native.wh.cpp index 0e680612..3fc9fa54 100644 --- a/ports/windows/dist/j3w1-explorer-native.wh.cpp +++ b/ports/windows/dist/j3w1-explorer-native.wh.cpp @@ -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 @@ -635,8 +635,8 @@ static bool Caller(void* address) noexcept { reinterpret_cast(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(address),&retainedShell)!=FALSE; @@ -670,8 +670,8 @@ static bool Init() noexcept { auto function=(*reinterpret_cast(factory))[22];HMODULE module=nullptr; ready=GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, reinterpret_cast(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(Hook),reinterpret_cast(&originalConvert)); } if(ready){retainedFactory=factory;factory=nullptr;} @@ -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)); @@ -1206,7 +1206,7 @@ BOOL Wh_ModInit() { std::vector bytes(size); VS_FIXEDFILEINFO* version=nullptr;UINT length=0; if(!size || !GetFileVersionInfoW(executable,0,size,bytes.data()) || !VerQueryValueW(bytes.data(),L"\\",(void**)&version,&length) - || lengthdwFileVersionMS!=MAKELONG(0,10) || version->dwFileVersionLS!=MAKELONG(9549,26100)) {return FALSE;} + || lengthdwFileVersionMS!=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; diff --git a/ports/windows/dist/j3w1-powertoys-markdown.wh.cpp b/ports/windows/dist/j3w1-powertoys-markdown.wh.cpp index 7c2c25ca..03d1e019 100644 --- a/ports/windows/dist/j3w1-powertoys-markdown.wh.cpp +++ b/ports/windows/dist/j3w1-powertoys-markdown.wh.cpp @@ -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 @@ -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 ready{false};NavigateFn originalString=nullptr,originalNavigate=nullptr;GetBackgroundFn getBackground=nullptr;SetBackgroundFn originalBackground=nullptr,publicBackground=nullptr;CloseControllerFn originalClose=nullptr;}; static Boundary boundaries[std::size(browserPins)]; @@ -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(module); case 2:return HookBoundary<2>(module); case 3:return HookBoundary<3>(module); + case 4:return HookBoundary<4>(module); } return false; } diff --git a/ports/windows/dist/j3w1-terminal-chrome.wh.cpp b/ports/windows/dist/j3w1-terminal-chrome.wh.cpp index ccf6ccc1..eb102f15 100644 --- a/ports/windows/dist/j3w1-terminal-chrome.wh.cpp +++ b/ports/windows/dist/j3w1-terminal-chrome.wh.cpp @@ -2,7 +2,7 @@ // @id j3w1-terminal-chrome // @name j3w1 Terminal chrome // @description Exact-package Terminal chrome resources; document and artwork colors remain native -// @version 1.0.14 +// @version 1.0.15 // @author j3w1 // @include WindowsTerminal.exe // @architecture x86-64 @@ -439,7 +439,7 @@ static bool ReviewedPackage(){ if(GetCurrentPackageFullName(&length,nullptr)!=ERROR_INSUFFICIENT_BUFFER||length>512)return false; std::vector name(length); if(GetCurrentPackageFullName(&length,name.data())!=ERROR_SUCCESS)return false; - for(auto allowed:{L"Microsoft.WindowsTerminal_1.24.11911.0_x64__8wekyb3d8bbwe"})if(wcscmp(name.data(),allowed)==0)return true; + for(auto allowed:{L"Microsoft.WindowsTerminal_1.24.12741.0_x64__8wekyb3d8bbwe"})if(wcscmp(name.data(),allowed)==0)return true; return false; } static bool RuntimeFileDigest(std::wstring const& path,const char* expected) { @@ -476,7 +476,7 @@ static bool ReviewedRuntime(){ #else if(name.find(L"\\\\")==std::wstring::npos){runtimeStatus=-1;return false;} #endif - bool valid=RuntimeFileDigest(path,"5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905"); + bool valid=RuntimeFileDigest(path,"67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad"); #if J3W1_LEGACY_XAML auto controls=GetModuleHandleW(L"Microsoft.UI." L"Xaml.dll");if(!controls)return false; wchar_t controlsPath[32768]{};auto controlsLength=GetModuleFileNameW(controls,controlsPath,std::size(controlsPath)); @@ -2156,7 +2156,7 @@ static bool ReviewedDiagnosticsBridge(std::wstring const& path) { if(complete&&BCryptFinishHash(hash,digest,sizeof(digest),0)>=0) { constexpr char hex[]="0123456789abcdef";std::string actual; for(BYTE byte:digest){actual+=hex[byte>>4];actual+=hex[byte&15];} - valid=actual=="5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905"; + valid=actual=="67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad"; } } } diff --git a/ports/windows/dist/windows-settings.json b/ports/windows/dist/windows-settings.json index 769a1299..02c56c2c 100644 --- a/ports/windows/dist/windows-settings.json +++ b/ports/windows/dist/windows-settings.json @@ -125,9 +125,9 @@ "bundledMods": [ { "id": "j3w1-explorer-native", - "version": "1.8.5", + "version": "1.8.6", "path": "dist/j3w1-explorer-native.wh.cpp", - "sha256": "5191b919579d6c6c8897064ab33a59d4524cab42fd6a5b999a0409510cf47c72" + "sha256": "9567e7457ad049753d150761717ad9d7843200e48fdb72b399dbde18d2e5e26e" }, { "id": "j3w1-powertoys-preview", @@ -161,52 +161,36 @@ }, { "id": "j3w1-terminal-chrome", - "version": "1.0.14", + "version": "1.0.15", "path": "dist/j3w1-terminal-chrome.wh.cpp", - "sha256": "92c356a2e89a54859967355dce797b08e3e56c807554926e791a6dc638981170" + "sha256": "18a7ca52f8ba614d2a3068fddca7844ec07563544f45b9ab1fb33bb100796bae" }, { "id": "j3w1-powertoys-markdown", - "version": "1.4.1", + "version": "1.4.2", "path": "dist/j3w1-powertoys-markdown.wh.cpp", - "sha256": "c1afe27af0186af5c971e2e35c95fcd1b7b8024419f7276c245b40b282db89a6" + "sha256": "0ae68b4df825d38fc45080f10c6edd56831cefa284140e9edb8998c8ec7bd686" } ], "settingsStartup": { "sourceSha256": "7424d3b2298d06b4c8dc0e2b16a6e49011c4af2e97ec92ef28ecd2ad53bf8571", - "replacement": "// Owned startup and recovery boundary for the pinned Settings rendering adapter.\n// No window text, document data or pixels participate in admission.\n#include \nnamespace j3w1Settings {\nstatic bool DigestFile(const std::wstring& path,const char* expected) {\n HANDLE file=CreateFileW(path.c_str(),GENERIC_READ,FILE_SHARE_READ,nullptr,\n OPEN_EXISTING,FILE_FLAG_OPEN_REPARSE_POINT,nullptr);\n if(file==INVALID_HANDLE_VALUE)return false;\n BY_HANDLE_FILE_INFORMATION info{};BCRYPT_ALG_HANDLE algorithm=nullptr;\n BCRYPT_HASH_HANDLE hash=nullptr;bool ok=false;\n if(GetFileInformationByHandle(file,&info)&&!(info.dwFileAttributes&FILE_ATTRIBUTE_REPARSE_POINT)\n &&BCryptOpenAlgorithmProvider(&algorithm,BCRYPT_SHA256_ALGORITHM,nullptr,0)>=0\n &&BCryptCreateHash(algorithm,&hash,nullptr,0,nullptr,0,0)>=0) {\n BYTE buffer[65536],digest[32]{};DWORD count=0;ok=true;\n for(;;) {\n if(!ReadFile(file,buffer,sizeof(buffer),&count,nullptr)){ok=false;break;}\n if(!count)break;\n if(BCryptHashData(hash,buffer,count,0)<0){ok=false;break;}\n }\n ok=ok&&BCryptFinishHash(hash,digest,sizeof(digest),0)>=0;\n const char hex[]=\"0123456789abcdef\";char actual[65]{};\n for(size_t i=0;i<32;i++){actual[i*2]=hex[digest[i]>>4];actual[i*2+1]=hex[digest[i]&15];}\n ok=ok&&strcmp(actual,expected)==0;\n }\n if(hash)BCryptDestroyHash(hash);\n if(algorithm)BCryptCloseAlgorithmProvider(algorithm,0);\n CloseHandle(file);return ok;\n}\nstatic bool Admit() {\n wchar_t exe[32768]{},system[32768]{},modulePath[32768]{};\n const DWORD exeLength=GetModuleFileNameW(nullptr,exe,32768);\n const DWORD systemLength=GetSystemWindowsDirectoryW(system,32768);\n const HMODULE module=GetModuleHandleW(L\"Windows.UI.Xaml.dll\");\n const DWORD moduleLength=module?GetModuleFileNameW(module,modulePath,32768):0;\n HIGHCONTRASTW contrast{sizeof(contrast)};\n return exeLength&&exeLength<32768&&systemLength&&systemLength<32768\n &&moduleLength&&moduleLength<32768\n &&_wcsicmp(exe,(std::wstring(system)+L\"\\\\ImmersiveControlPanel\\\\SystemSettings.exe\").c_str())==0\n &&DigestFile(exe,\"c514b73f3b9cc38be1dc817c177d07ecf12ce4ce9e21df5d54128e7359198bba\")\n &&DigestFile(modulePath,\"5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905\")\n &&SystemParametersInfoW(SPI_GETHIGHCONTRAST,sizeof(contrast),&contrast,0)\n &&!(contrast.dwFlags&HCF_HIGHCONTRASTON);\n}\n}\n\nHWND GetCoreWnd() {\n struct Candidates { HWND window=nullptr;unsigned count=0;DWORD thread=0; };\n Candidates candidates{nullptr,0,g_targetThreadId.load()};\n EnumWindows([](HWND top,LPARAM parameter)->BOOL {\n auto& candidates=*reinterpret_cast(parameter);\n const auto admit=[&](HWND window) {\n DWORD process=0;const DWORD thread=GetWindowThreadProcessId(window,&process);\n if(!thread||process!=GetCurrentProcessId()\n ||(candidates.thread&&thread!=candidates.thread))return;\n if(window!=candidates.window){candidates.window=window;++candidates.count;}\n };\n wchar_t className[64]{};\n if(!GetClassNameW(top,className,64))return TRUE;\n if(_wcsicmp(className,L\"Windows.UI.Core.CoreWindow\")==0)admit(top);\n else if(_wcsicmp(className,L\"ApplicationFrameWindow\")==0) {\n HWND child=nullptr;\n while((child=FindWindowExW(top,child,L\"Windows.UI.Core.CoreWindow\",nullptr)))admit(child);\n }\n return TRUE;\n },reinterpret_cast(&candidates));\n // An ambiguous or missing owner cannot initialize or restore another root.\n return candidates.count==1?candidates.window:nullptr;\n}\n" + "replacement": "// Owned startup and recovery boundary for the pinned Settings rendering adapter.\n// No window text, document data or pixels participate in admission.\n#include \nnamespace j3w1Settings {\nstatic bool DigestFile(const std::wstring& path,const char* expected) {\n HANDLE file=CreateFileW(path.c_str(),GENERIC_READ,FILE_SHARE_READ,nullptr,\n OPEN_EXISTING,FILE_FLAG_OPEN_REPARSE_POINT,nullptr);\n if(file==INVALID_HANDLE_VALUE)return false;\n BY_HANDLE_FILE_INFORMATION info{};BCRYPT_ALG_HANDLE algorithm=nullptr;\n BCRYPT_HASH_HANDLE hash=nullptr;bool ok=false;\n if(GetFileInformationByHandle(file,&info)&&!(info.dwFileAttributes&FILE_ATTRIBUTE_REPARSE_POINT)\n &&BCryptOpenAlgorithmProvider(&algorithm,BCRYPT_SHA256_ALGORITHM,nullptr,0)>=0\n &&BCryptCreateHash(algorithm,&hash,nullptr,0,nullptr,0,0)>=0) {\n BYTE buffer[65536],digest[32]{};DWORD count=0;ok=true;\n for(;;) {\n if(!ReadFile(file,buffer,sizeof(buffer),&count,nullptr)){ok=false;break;}\n if(!count)break;\n if(BCryptHashData(hash,buffer,count,0)<0){ok=false;break;}\n }\n ok=ok&&BCryptFinishHash(hash,digest,sizeof(digest),0)>=0;\n const char hex[]=\"0123456789abcdef\";char actual[65]{};\n for(size_t i=0;i<32;i++){actual[i*2]=hex[digest[i]>>4];actual[i*2+1]=hex[digest[i]&15];}\n ok=ok&&strcmp(actual,expected)==0;\n }\n if(hash)BCryptDestroyHash(hash);\n if(algorithm)BCryptCloseAlgorithmProvider(algorithm,0);\n CloseHandle(file);return ok;\n}\nstatic bool Admit() {\n wchar_t exe[32768]{},system[32768]{},modulePath[32768]{};\n const DWORD exeLength=GetModuleFileNameW(nullptr,exe,32768);\n const DWORD systemLength=GetSystemWindowsDirectoryW(system,32768);\n const HMODULE module=GetModuleHandleW(L\"Windows.UI.Xaml.dll\");\n const DWORD moduleLength=module?GetModuleFileNameW(module,modulePath,32768):0;\n HIGHCONTRASTW contrast{sizeof(contrast)};\n return exeLength&&exeLength<32768&&systemLength&&systemLength<32768\n &&moduleLength&&moduleLength<32768\n &&_wcsicmp(exe,(std::wstring(system)+L\"\\\\ImmersiveControlPanel\\\\SystemSettings.exe\").c_str())==0\n &&DigestFile(exe,\"c514b73f3b9cc38be1dc817c177d07ecf12ce4ce9e21df5d54128e7359198bba\")\n &&DigestFile(modulePath,\"67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad\")\n &&SystemParametersInfoW(SPI_GETHIGHCONTRAST,sizeof(contrast),&contrast,0)\n &&!(contrast.dwFlags&HCF_HIGHCONTRASTON);\n}\n}\n\nHWND GetCoreWnd() {\n struct Candidates { HWND window=nullptr;unsigned count=0;DWORD thread=0; };\n Candidates candidates{nullptr,0,g_targetThreadId.load()};\n EnumWindows([](HWND top,LPARAM parameter)->BOOL {\n auto& candidates=*reinterpret_cast(parameter);\n const auto admit=[&](HWND window) {\n DWORD process=0;const DWORD thread=GetWindowThreadProcessId(window,&process);\n if(!thread||process!=GetCurrentProcessId()\n ||(candidates.thread&&thread!=candidates.thread))return;\n if(window!=candidates.window){candidates.window=window;++candidates.count;}\n };\n wchar_t className[64]{};\n if(!GetClassNameW(top,className,64))return TRUE;\n if(_wcsicmp(className,L\"Windows.UI.Core.CoreWindow\")==0)admit(top);\n else if(_wcsicmp(className,L\"ApplicationFrameWindow\")==0) {\n HWND child=nullptr;\n while((child=FindWindowExW(top,child,L\"Windows.UI.Core.CoreWindow\",nullptr)))admit(child);\n }\n return TRUE;\n },reinterpret_cast(&candidates));\n // An ambiguous or missing owner cannot initialize or restore another root.\n return candidates.count==1?candidates.window:nullptr;\n}\n" }, "compatibility": [ { - "build": 26200, - "ubr": 9550, - "architecture": "X64", - "explorerVersion": "10.0.26100.8117", - "startDockedVersion": "10.0.26100.9549", - "status": "candidate", "settingsVersion": "10.0.26100.9549", + "build": 26300, + "architecture": "X64", + "startDockedVersion": "10.0.26100.9711", "shellExperienceVersion": "10.0.26100.9549", - "searchVersion": "2608.25008.200.0", - "startPackageVersion": "10.0.26100.4768", "shellPackageVersion": "10.0.26100.8115", + "explorerFixedVersion": "10.0.26100.9711", "clientPackageVersion": "1000.26100.372.0", "startLayout": "redesigned", - "explorerFixedVersion": "10.0.26100.9549" - }, - { - "build": 26300, - "shellPackageVersion": "10.0.26100.8115", - "ubr": 9550, - "explorerFixedVersion": "10.0.26100.9549", - "architecture": "X64", - "startLayout": "redesigned", - "settingsVersion": "10.0.26100.9549", - "startPackageVersion": "10.0.26100.4768", "explorerVersion": "10.0.26100.8117", - "shellExperienceVersion": "10.0.26100.9549", - "startDockedVersion": "10.0.26100.9549", "searchVersion": "2608.25008.200.0", - "clientPackageVersion": "1000.26100.372.0", + "startPackageVersion": "10.0.26100.4768", + "ubr": 9711, "status": "candidate" } ], diff --git a/ports/windows/host.json b/ports/windows/host.json index bce40758..d19f7322 100644 --- a/ports/windows/host.json +++ b/ports/windows/host.json @@ -1978,35 +1978,19 @@ ], "compatibility": [ { - "build": 26200, - "ubr": 9550, - "architecture": "X64", - "explorerVersion": "10.0.26100.8117", - "startDockedVersion": "10.0.26100.9549", - "status": "candidate", "settingsVersion": "10.0.26100.9549", + "build": 26300, + "architecture": "X64", + "startDockedVersion": "10.0.26100.9711", "shellExperienceVersion": "10.0.26100.9549", - "searchVersion": "2608.25008.200.0", - "startPackageVersion": "10.0.26100.4768", "shellPackageVersion": "10.0.26100.8115", + "explorerFixedVersion": "10.0.26100.9711", "clientPackageVersion": "1000.26100.372.0", "startLayout": "redesigned", - "explorerFixedVersion": "10.0.26100.9549" - }, - { - "build": 26300, - "shellPackageVersion": "10.0.26100.8115", - "ubr": 9550, - "explorerFixedVersion": "10.0.26100.9549", - "architecture": "X64", - "startLayout": "redesigned", - "settingsVersion": "10.0.26100.9549", - "startPackageVersion": "10.0.26100.4768", "explorerVersion": "10.0.26100.8117", - "shellExperienceVersion": "10.0.26100.9549", - "startDockedVersion": "10.0.26100.9549", "searchVersion": "2608.25008.200.0", - "clientPackageVersion": "1000.26100.372.0", + "startPackageVersion": "10.0.26100.4768", + "ubr": 9711, "status": "candidate" } ], @@ -2018,7 +2002,7 @@ "Static cursor shapes preserve roles; host accessibility pointer overrides take priority." ], "nativeExplorer": { - "version": "1.8.5", + "version": "1.8.6", "background": "color.surface.canvas", "foreground": "color.text.default", "hover": "color.interaction.hover.bg", @@ -2043,9 +2027,9 @@ "nativeExplorerModules": { "FRAME": "10.0.26100.9549", "DUI": "10.0.26100.9549", - "COMCTL": "6.10.26100.9549", - "WIC": "10.0.26100.9549", - "SHELLCOMMON": "10.0.26100.9550" + "COMCTL": "6.10.26100.9711", + "WIC": "10.0.26100.9711", + "SHELLCOMMON": "10.0.26100.9711" }, "monacoPreview": { "version": "1.1", @@ -2295,7 +2279,7 @@ "buttonStyleTarget": "CalculatorApp.Controls.CalculatorButton, CalculatorApp, Version=11.2607.0.0, Culture=neutral, PublicKeyToken=null" }, "markdownPreview": { - "version": "1.4.1", + "version": "1.4.2", "hostVersion": "0.101.2362.0", "hostSha256": "d48704360aa8c8d5a3f572a055b176d50d58206f386cda49b2760beb3fd00cd9", "controlSha256": "e47fcc38944ab5920aa49a31a2d0fef212865d1f5a62a65a08012a1767bed9cc", @@ -2402,12 +2386,21 @@ "backgroundGetterRva": 364112, "backgroundSetterRva": 364304, "controllerCloseRva": 357248 + }, + { + "version": "155.0.4283.45", + "sha256": "19eec800fb666a0f939c1fc2113c3bcfc2ad352776d5ddfcb4994d15f77d9b4c", + "navigateToStringRva": 555952, + "navigateRva": 555792, + "backgroundGetterRva": 354176, + "backgroundSetterRva": 354368, + "controllerCloseRva": 347328 } ], "nativeHost": { "version": "10.0.26100.8115", "sha256": "0402afd1e3231da4841a093040f861b1af321f3dd6740c879de9d1e3d600d95e", - "explorerSha256": "34ac55b23b6d840cc9fa8304c0149b8bb026d817b39610728092878d634a61eb" + "explorerSha256": "eee089fe6f927c7f0d51b0abd9d70c094157e33673ad760713ec7b1cea18ee11" } }, "notepadNative": { @@ -2805,14 +2798,14 @@ } }, "nativeExplorerModuleDigests": { - "WIC": "ad3f960fc9d612c0289035f1b5c334dd44e423ce6c23059ab5129746cd0646f2", - "SHELLCOMMON": "410141eceecfaa5d7cccbfd7c357920988bf18fec3db7f6865eec674677c0204" + "WIC": "e82652590bce20641926956a65eade7c54e71c240557dba37335f061352b58e0", + "SHELLCOMMON": "a76a9246b16a3c237607cc3d99815e03986ef7731c2b88480cfbd6edf1ef4d3d" }, "terminalChrome": { - "version": "1.0.14", - "packageFullName": "Microsoft.WindowsTerminal_1.24.11911.0_x64__8wekyb3d8bbwe", - "runtimeSha256": "5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905", - "diagnosticsBridgeSha256": "5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905", + "version": "1.0.15", + "packageFullName": "Microsoft.WindowsTerminal_1.24.12741.0_x64__8wekyb3d8bbwe", + "runtimeSha256": "67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad", + "diagnosticsBridgeSha256": "67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad", "captionColors": {}, "controlsPackage": "Microsoft.UI.Xaml.2.8_8.2511.26001.0_x64__8wekyb3d8bbwe", "controlsSha256": "fe5f8d9d545f778e6778e31c7fb4b01227f12dd6aec4d4bfc54ef76ba920baae" @@ -2820,6 +2813,6 @@ "settingsStartup": { "sourceSha256": "7424d3b2298d06b4c8dc0e2b16a6e49011c4af2e97ec92ef28ecd2ad53bf8571", "executableSha256": "c514b73f3b9cc38be1dc817c177d07ecf12ce4ce9e21df5d54128e7359198bba", - "xamlSha256": "5b653bc535d87e7301c7ab9b4785fb7f0f6de5481ece03e7e7a89ca3e53e6905" + "xamlSha256": "67d90ad2f75bbd50607bfd7c3d73694e948eb993c135b6bb23d4965287ca4bad" } } diff --git a/ports/windows/port.json b/ports/windows/port.json index a59b78d7..1f7a7849 100644 --- a/ports/windows/port.json +++ b/ports/windows/port.json @@ -8,8 +8,7 @@ "profile": "default", "format": "windows-theme", "targetVersions": [ - "26200.9550", - "26300.9550" + "26300.9711" ], "testedVersions": [], "os": [ diff --git a/tests/windows-compatibility.test.js b/tests/windows-compatibility.test.js index 1640afe2..dabd9b72 100644 --- a/tests/windows-compatibility.test.js +++ b/tests/windows-compatibility.test.js @@ -5,6 +5,21 @@ import {FINGERPRINT_KEYS,shellCompatibility,stylerSettings} from '../ports/windo const host=JSON.parse(readFileSync(new URL('../ports/windows/host.json',import.meta.url))); const known=host.compatibility[0]; +test('26300.9711 replaces the retired 9550 hosts without admitting adjacent updates',()=>{ + const actual={build:26300,ubr:9711,architecture:'X64',explorerVersion:'10.0.26100.8117', + explorerFixedVersion:'10.0.26100.9711',startDockedVersion:'10.0.26100.9711', + settingsVersion:'10.0.26100.9549',shellExperienceVersion:'10.0.26100.9549', + searchVersion:'2608.25008.200.0',startPackageVersion:'10.0.26100.4768', + shellPackageVersion:'10.0.26100.8115',clientPackageVersion:'1000.26100.372.0',startLayout:'redesigned'}; + assert.equal(shellCompatibility(actual,host.compatibility).compatible,true); + for(const build of [26200,26300]){ + const retired={...actual,build,ubr:9550,explorerFixedVersion:'10.0.26100.9549',startDockedVersion:'10.0.26100.9549'}; + assert.equal(shellCompatibility(retired,host.compatibility).compatible,false); + } + for(const ubr of [9710,9712])assert.equal(shellCompatibility({...actual,ubr},host.compatibility).compatible,false); + // Explorer's display version did not change; its fixed version must still match. + assert.equal(shellCompatibility({...actual,explorerFixedVersion:'10.0.26100.9549'},host.compatibility).compatible,false); +}); test('every shell and package input must match; missing or changed fields fail closed',()=>{ for(const known of host.compatibility){ assert.equal(shellCompatibility(known,host.compatibility).compatible,true); diff --git a/tests/windows-folder-glyph-native.cpp b/tests/windows-folder-glyph-native.cpp index 33069f64..02d4355f 100644 --- a/tests/windows-folder-glyph-native.cpp +++ b/tests/windows-folder-glyph-native.cpp @@ -28,13 +28,13 @@ static BOOL WINAPI FixtureDraw(IMAGELISTDRAWPARAMS* request){Extended(request);a // retain their exact version and complete file-hash admission. static bool fixtureWicPins=false,fixtureWicVersion=false,fixtureWicHash=false,fixtureHookFailure=false; static unsigned fixtureVersionCalls=0,fixtureHashCalls=0,fixtureHookCalls=0; -static constexpr char fixtureWicDigest[]="ad3f960fc9d612c0289035f1b5c334dd44e423ce6c23059ab5129746cd0646f2"; +static constexpr char fixtureWicDigest[]="e82652590bce20641926956a65eade7c54e71c240557dba37335f061352b58e0"; static BOOL WINAPI FixtureQueryVersion(LPCVOID block,LPCWSTR key,LPVOID* output,PUINT size) { BOOL result=::VerQueryValueW(block,key,output,size); if(fixtureWicPins&&result&&key&&wcscmp(key,L"\\")==0&&output&&*output&&size&&*size>=sizeof(VS_FIXEDFILEINFO)) { ++fixtureVersionCalls;auto version=static_cast(*output); version->dwFileVersionMS=fixtureWicVersion?MAKELONG(0,10):0; - version->dwFileVersionLS=fixtureWicVersion?MAKELONG(9549,26100):0; + version->dwFileVersionLS=fixtureWicVersion?MAKELONG(9711,26100):0; } return result; } @@ -66,7 +66,7 @@ int main(int argc,char** argv){ // Test native hashing/version inspection independently of COM initialization, // then exercise all admission combinations with controlled API results. auto wicModule=LoadLibraryW(L"windowscodecs.dll");assert(wicModule); - bool actualReviewed=FixedModuleVersion(wicModule,MAKELONG(0,10),MAKELONG(9549,26100)) + bool actualReviewed=FixedModuleVersion(wicModule,MAKELONG(0,10),MAKELONG(9711,26100)) &&FolderBitmap::Digest(wicModule,fixtureWicDigest); assert(!FolderBitmap::Digest(wicModule,"0000000000000000000000000000000000000000000000000000000000000000")); assert(FolderBitmap::Init()==actualReviewed);FolderBitmap::Uninit(); diff --git a/tests/windows-port.test.js b/tests/windows-port.test.js index dd861ce3..d14f14b9 100644 --- a/tests/windows-port.test.js +++ b/tests/windows-port.test.js @@ -583,7 +583,7 @@ test('bundled native source is generated, pinned and rejected on tampering',t=>{ assert.equal((text.match(/CreateFileW\(/g)||[]).length,1,'Only the module digest reader opens files'); assert.match(text,/CreateFileW\(path,GENERIC_READ,FILE_SHARE_READ,nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr\)/); assert.match(text,/GetModuleFileNameW\(module,path/); - assert.match(text,/MAKELONG\(9549,26100\)/); + assert.match(text,/MAKELONG\(9711,26100\)/); fs.appendFileSync(file,'\n// changed'); const result=f.run('Apply',f.args);assert.notEqual(result.status,0);assert.match(result.stderr,/Missing verified mod source/); assert.deepEqual(f.db(),{});