Release notes and what's new in each version of Highwind.
Three things arrive together.
The Fleet portal keeps every number it had and adds a way in. Dashboard, Devices, Security posture, Firewall and App Control now open with a short strip of insight chips: a plain label, a count, how it compares with before, and one click to the exact devices behind it.
Chips are ranked, not fixed: a critical security gap or a widespread outage comes first, routine noise stays out of the way, and the order does not jump around for small changes. Each page shows only the chips it has real data for, and says so when a source could not be read.
/changes page): last 24 hours, 7 days, 30 days or your own dates, compared with the period before, across security posture, App Control, the firewall and the timeline. It says “12 more devices have a high-risk finding than yesterday”, never “+12”, and it never claims one change caused another: firewall rule changes are labelled correlated, likely related or possible, with the evidence./ask page): ask in plain words. Answers are built from your own Fleet records through the same permissions you have, so you can only be told about devices you can see. Every line is labelled Observed, Correlated, Likely related, Possible explanation, Insufficient evidence or Unknown, with links to the evidence, the time range, freshness and what is missing. It does not change anything on a device. By default no language model is involved; an administrator can opt in (Portal:Ai), and the model only ever sees the bounded evidence, its wording is rejected if it adds numbers or claims a cause, and the plain summary is shown instead.FleetPortalConfigurationEnabled), lets a device ignore the portal. Needs the new database migration ManagementRound43, the API, the portal and the agent (MSI).Highwind.AI.Core. The Client’s feedback service uses the same protocol but has not been moved onto it yet.Advanced Hunting has a new By application view next to By publisher, grouping events by application with devices, files, would-block counts, versions, hashes and the rules needed.
The App and File Scanner now honours your rule precedence in the Recommend column as soon as you change it, and files scanned through an administrative share (\\localhost\C$\…) are recognised as local protected paths, so a FilePath rule is no longer skipped in favour of a hash.
Fixed: Advanced Hunting reports a file’s folder together with its name, which made path rules end in file.dll\* and never match, so they showed as Would Still Block after Compare. Path rules are now built for the folder.
A new device box next to the day and row limits queries one or more devices instead of the whole tenant, and filters added to the query now always land in the main query rather than the signer lookups.
The application Rules window has a new Save as supplemental… option: pick the base policy and the rules are saved as a supplemental policy attached to it, with its own PolicyID; the base is not changed, and you are warned if the base does not allow supplemental policies.
The expanded application view now fills the width, popup windows can be moved, and Policy Comparison and Policy Merge are working screens where you gather policies from files, a folder or this machine and then compare or merge them.
App Control menu: Policy Comparison and Policy Merge are now one "Compare and Merge" page with three tabs (Policies, Compare, Merge), so nothing opens in a separate window. To merge, pick a master policy; the other ticked policies have their rules added to it, the master keeps the policy options (such as Audit mode), and the result is saved as a new policy with a new Policy ID.
The Policies page moved to Endpoint Tools > Local Policies, now showing policy names first.
App Control menu: "Endpoint Tools" is now Local Endpoint and sits above Investigate. Events moved into it (next to Local Policies, Device Status and CiTool). Device Status now shows the Code Integrity policy, VBS, security services and Smart App Control state instead of a placeholder.
Installed applications scan is faster: files are now read several at a time, each file is read once for both hashes, and the machine’s enforcement state is looked up once per scan instead of once per file.
The App Control page also documents the Advanced Hunting sign-in permissions: what the consent prompt asks for, where approval requests go, how to review grants and how to remove your own to repeat the sign-in.
Installed applications: products that leave no install path in the registry (for example Global Secure Access Client, .NET runtimes and agents) are now located by matching the application name to a folder under Program Files, and show "(found by name)" in the Source column. Broad vendor folders such as Adobe or Microsoft are never guessed.
Installed applications: scanning now only lists applications by default. Tick the ones you need and choose Check selected, or Check all, to read their files and work out recommended rules. Turn on Check files while scanning to keep the old all-at-once behaviour. Creating a policy checks any ticked application that has not been checked yet.
Fixed: some Windows Installer products (for example ODBC Driver 17 and System CLR Types for SQL Server) showed an install folder of C:\?\WINDOWS and "Folder missing". Placeholder paths are no longer treated as folders.
App Control menu: App and File Scanner is now first under Deploy App Control, and Block Applications and Allow Applications use its scan results when Advanced Hunting has no events loaded. Impact Scanner and Enforcement Readiness moved under Investigate, because they work from Advanced Hunting results.
Highwind Fleet: the portal is a free trial, for as long as you need up to one year, but a license file is still required (it tells us who is using the portal) and pricing may change in the future. Azure is the only supported way to host the portal and API today; an on-premises install is coming soon.
The Local File Scanner is now the App and File Scanner, since it scans folders and installed applications on this device or, through an administrative share or Scan device, on a remote one.
Block Applications and Allow Applications now also use the installed applications you have checked (previously only scanned folders showed up), list separate files of one product (for example 7-Zip’s 7z.exe and 7zFM.exe) by file name, and have a compact layout, a full-height application list and a hint while nothing is selected, matching the other App Control pages.
App and File Scanner:
Policy Comparison and Merge:
Fixed: a path rule written with the %OSDRIVE% macro never matched anything in Compare (the drive was expanded with a doubled backslash), so applications installed under Program Files kept showing as blocked. By application now shows Files blocked and Files allowed rather than event counts, and searching no longer changes which application a file belongs to.
Fleet now answers “is the firewall healthy, what is blocked, what is allowed, and why?” from the devices you already manage.
Simple first, details on demand: an Overview with three lenses (Overview, Security, Troubleshooting), a Needs Attention list, Top Blocks and Top Allows, a Rules view, a firewall section on every device and a “why was this blocked or allowed” page.
Troubleshoot, Exposure and Baseline:
All read-only; listening ports need the updated agent, and saved views need the updated database script.
auditpol commands (and the Group Policy path) to turn it on, and links to the Microsoft Learn pages. Highwind never changes audit policy. Needs an elevated session; hide or show it with the new VisibilityWfpEventsPage policy (ADMX updated).FleetFirewallReportingEnabled ADMX policy turns the collection off estate-wide.Highwind already keeps 30 days of configuration history. Now it reads that history on its own — two minutes after launch and every two hours after that — and looks for one thing: a protection that was weakened or removed from policy. Signature updates, scan counters and other routine churn are ignored.
AllowAiSecurityWatch policy (default on) turns the watch off for a whole estate. The ADMX now also has a Highwind AI folder with the existing online-lookup, model-reasoning, iteration and research-source controls, which were previously registry-only — see registry reference.Highwind now follows the Windows Text size setting and per-monitor DPI, and reacts live when either changes. The main window is capped at 150 % so dense grids stay usable; the chat and pop-out answer windows scale fully.
VersionEx is bumped, a .orig.xml backup is written, duplicates are skipped and counted, and a change-log comment records what was added. Add to Local Policy applies it on this machine with CiTool..cip is on by default.Host your own Highwind Management API and Portal. Devices running the optional Highwind Fleet Agent service register, send heartbeats, advertise what they can report, and answer approved read-only questions on demand.
Operators use the Portal or the API; every request is authorised by role and audited, and a device will only run an operation it has advertised.
FleetHealthSignalsEnabled report whole-hour counts of crashes, hangs, service failures, unexpected restarts, App Control and ASR events and failed sign-ins (counts only, never event text, users or file names; the first report already covers the last 72 hours), and an administrator can click Start observing on a saved run to have the plan’s devices report hourly for a limited time and see what normal looks like for each signal. Needs database migration ManagementRound34. For a canary, an administrator can approve the plan, record when they applied the change (for example to an Intune pilot group), and have Highwind compare the canary and matching control devices before and after from the signals already collected. By rule, a worsening comparison pauses the run (audited; you stop the rollout where you applied it, then resume after review) and a clean one lets you plan the next wider wave (5, 25, 50, 100 percent of the devices in scope, never the controls), record when you applied it and compare again. The Simulation page also takes up to five settings at once with the + button. The run report also shows a track record from this tenant’s own earlier runs of the same kind of change (older runs count less, other tenants are never used; a record, not a prediction). Highwind still does not apply the change, confirm it reached the devices, or pause or roll it back; you make changes in your own tools. See the Fleet documentation, Simulation Assurance./whatif); old /horizon?ctl= links redirect. The Device control pages take any look-back of 1 to 400 days (default 7) from a number box; longer ranges use stored history and fall back to each machine’s latest 7-day data until history fills.
DeviceControlHistoryRetentionDays) from the time the updated agent and server are both in place; older agents add nothing to it. Kernel, AI, Software and Timeline now load one page at a time with totals for the whole tenant (the timeline reaches about 4,000 recent events). Device Trust gains an “Adds to overall score” column. AI agent runtime protection (Preview) is now read and shown on the overview, scored, available to the AI assistant and reported by the Fleet agent as a baseline setting. New protections can be added through a table rather than a release. The Device control look-back needs the latest database migration; without it the pages show the last 7 days and say so. New invariants mean some existing devices will show Violated or Unknown after the update.HKLM\SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL = 1, service Sense is running or file %SystemRoot%\System32\drivers\x.sys does not exist with suggestions as you type, ready-made recipes and a did you mean? hint that fixes near-misses when you choose Yes; preview what the portal understood, save, and every device answers compliant or not in about a minute, with a compliance-by-check summary and CSV. Read-only, fenced to safe registry and file roots, re-validated on the device, and off unless the device’s policy allows it. Details.tools. Sizing guidance.CompletedMessageRetentionDays).…\DefaultEnforcement = 1 or 2, … is one of 1, 2, 3, file A exists and file B exists, service X is running or service Y is running — up to five conditions in one check. Needs the matching agent. The editor gains a full-size text box, a ✕ on every line to remove it and Clear all. Details.New-HighwindFleetGroups.ps1 creates Highwind Fleet Admins, Read Only, Operators, Device Managers, Policy Authors, Enrollment Officers and Delegated Admins with their app roles and Access assignments, so every tenant is set up the same way. Details.Fleet__RateLimiting__TenantRequestsPerMinute, default 120,000) and per caller (…CallerRequestsPerMinute, 600); previously 600 per minute applied to a whole tenant, which throttled fleets above a few hundred devices. Sizing · Protection.ManagementRound5. Details.ManagementRound7; update the agent for hashes, options and the Windows build. Details.ManagementRound8; no agent change. Details.FleetAppControlReportingEnabled (off by default). Decisions change no policy. Needs migration ManagementRound9, the new agent and ADMX. Details.DecisionEvidenceDays, 7). Needs migration ManagementRound10; no agent change. Details.ManagementRound11; settings Fleet:AppControlRules.ManagementRound12; settings Fleet:AppControlSimulation.FleetAppControlFileScanEnabled): open an application and choose Scan files. Up to 5 devices that opted in list the application’s executables, libraries, installers and scripts (version, signer, issuing certificate TBS hash, Authenticode SHA-256). The page shows every file, which block now or would be blocked when enforced, and the fewest rules that allow them in your preference order. Read only.FleetPersistenceAuditEnabled): opted-in devices report what starts with Windows or a sign-in (local administrators, non-Microsoft scheduled tasks, Run keys, Startup folder) with hash and signature state. Each item is rated Expected, Unknown, Suspicious or HighRisk with the reason shown; new and removed items appear in Recent changes; administrators can approve or deny a finding.FleetSoftwareTrustEnabled): opted-in devices report the programs running now with SHA-256, version, signature (embedded or Windows catalog) and the signing chain to the root. The portal shows who signed each program, which root, how many devices run it, other software from the same signer, other versions seen and whether App Control signer rules cover it, at Posture > Software trust and on each device. A program replaced by different content, or a new unsigned program in a user-writable folder, is recorded as a security change.FleetKernelAssuranceEnabled): opted-in devices report Secure Boot, TPM, virtualization-based security, memory integrity, Credential Guard, kernel code integrity, the driver blocklist setting and the drivers they run. The portal shows an explained Kernel Trust score (every lost point lists its evidence, reason and fix) at Posture > Kernel trust and on each device. A protection turning off, a new non-Microsoft driver or a changed driver is recorded as a security change.FleetAiSecurityEnabled): opted-in devices report AI products (desktop apps, coding agents, local runtimes, editor extensions), the MCP servers in their configuration files, local model files and AI listening ports. The portal shows an AI Asset Passport per product (shell, PowerShell, file and network reach, pre-approved commands, credential stores in reach) and an explained AI/Agent Trust score, at Posture > AI and MCP security and on each device. Administrators approve or deny each MCP server; an approval is voided if the server's command, program or reach changes. New servers and changed commands, programs, destinations or permissions are recorded as security changes./horizon) also has a fleet What if that counts how many devices a proposed value would weaken, and lists the worst. A device's Horizon page has a What if form. State up to three values (for example kernel.hvci = off) and see which invariants and dangerous states would change, with an outcome of Weakens, Strengthens, Uncertain or NoEffect. Nothing is applied. The AI containment invariant now reads the device's stored AI Security report, so it no longer stays Unknown on devices that reported./admin/horizon-policy: switch a shipped invariant off or change its severity for a tag, organisational unit or environment, and write custom invariants as conditions on reported facts (fact = value, fact = a|b, fact != value; no code, no wildcards). The result drives the timeline, What if and Remediation effect. Saves are admin-only, versioned and audited. A fact a device has not reported stays Unknown.Updates finding (Low at 2 months, Medium at 4), shown on the Posture page (with a Defender out of date tile and report view, also linked from a Devices chip), the device page and as a Dashboard attention item. A device's page offers Plan an update, a Manual hand-off remediation plan that Highwind verifies when the device reports a Defender version at or above the one you set. Highwind still sends nothing to the device. The age is read from the release month encoded in the version (26070 is 2026-07), so it works offline and in sovereign clouds, but it is an estimate, not a check against Microsoft; set Antimalware platform/engine version at least in the posture baseline for an exact minimum. The newest-in-fleet comparison now starts at two devices instead of five. Fixed: a device that had never been scanned showed a full-scan age of 4294967295 days; it now shows as unknown.FleetPolicyProvenanceEnabled): the new Last barrier view (/horizon, and per device under Horizon) shows which dangerous states (untrusted code runs, kernel access, credential theft, data exfiltration) are guarded by only one active barrier. Kernel, persistence and software state now feed the Horizon invariants (set 2026.10.2), and missing evidence stays Unknown. Opted-in devices also report where policy lives (MDM, Group Policy, Configuration Manager), reading key names and counts only, never values. Default off.ConvertFrom-CIPolicy. Highwind deploys nothing.ManagementRound14; no agent change.New-CIPolicy -Level … -Fallback … would write at every level (Hash, FilePath, FileName, LeafCertificate, FilePublisher, SignedVersion, Publisher, PcaCertificate): rules, files allowed by the level and by each fallback, whether it is too broad, what it trusts, what happens on an update, and the exact command to cross-check on a device. Worked out from the existing scan: no PowerShell runs on devices. The level order is set under Admin → App Control; the Board’s rule options name their closest level. Fix: after an approval, step 2 Pick the rule now appears (it said “Not needed for this decision”). Migration ManagementRound15.New-CIPolicy -Level X -Fallback Y,Z would write with your level order: each file gets the first level that fits, so signed files get signer rules and only what is left falls back to file paths or hashes. New default order Publisher, FilePublisher, SignedVersion, PcaCertificate, FilePath, Hash, FileName (up to 7 levels, change it under Admin → App Control). New rule kinds Publisher, Issuing CA (PcaCertificate), Publisher + version (SignedVersion), Signing certificate (LeafCertificate) and File path; packages write them exactly as New-CIPolicy does. Rules now use both the file scan and the event logs: installed files that have not run yet are included. The option lists each level it uses.ManagementRound16; no agent change.UpgradeApplicationHost.js Hash Sha256), as New-CIPolicy names them. No schema or agent change.FleetReportLastLoggedOnUser to 0 to stop it (the stored value is then cleared). Press Ctrl+K (or Search at the top) to jump to any page or search devices, users and applications; save Devices filters as named views in your browser. The Dashboard posture card shows a clean / lower findings / high finding / no answer bar. Policy sets show a compliance bar per set, an application page shows its journey (found → scanned → decided → rule → package → deployed), and App Control Needs attention lists rollouts with no progress for 7 days and recent rollbacks. Admin, Posture and Queries pages share one header with a breadcrumb. Needs the new API (migration ManagementRound17), portal and agent MSI.User.ReadBasic.All and GroupMember.Read.All on the API’s identity; otherwise paste the object ID). Devices are a tick list of tags. Picking a role ticks every permission it gives, grouped as Devices, Administration and App Control; changing a tick makes it Custom..hwlic) from Highwind, imported in Admin → License (check the file, compare its SHA-256, import). It is verified offline on your server: no internet, phone-home or hardware fingerprint. The page shows the customer, features, device limit, binding, expiry and history, and offers Check again and a support summary. A banner warns 30 days before expiry; an expired license makes the portal read-only; with no license only Admin → License opens. Devices are never affected, and the free desktop client never needs a license. After upgrading, import your license (migration ManagementRound19). Details →%LOCALAPPDATA%\Highwind\Logs\sharepoint-decisions.log. Highwind no longer hides its bookkeeping columns (DecisionKey, TenantId, SchemaVersion, DecisionScope): Microsoft Graph refuses to write hidden columns (“Field 'DecisionKey' is not recognized”). Lists created by earlier builds could be missing these columns while still validating as ready; validation now reports them, and Create or Validate List adds or unhides them.Set up and test central management →
The Enterprise pages now share one left-hand navigation and open with a short overview. New pages cover Client reporting, the Security model and Troubleshooting.
The long central management page is split into Deploy and verify, Devices, posture and access, App Control and Scale and network protection. Text diagrams are replaced with images. Old links to sections of the central management page still work from this site.
Highwind-3.7.0.msi. Install directory, detection key and policy key are unchanged.INSTALLFLEETAGENT=1 installs the HighwindFleetAgent service. It is kept across upgrades once installed. Details →HKLM\SOFTWARE\Policies\Highwind:
VisibilityAppControlBlockPage, …AllowPage, …ReadinessPage, …ImpactPage, …RuleRecommendationsPage, …LocalPoliciesPage) — default administrators only.SharePointDecisionStoreEnabled — default off.EnableDemoMode — default off; never set on production devices.Fleet* values that configure the Fleet Agent — full list, including FleetCustomChecksEnabled (default off) for custom checks.DeviceTag, OrgUnit and Environment tagging values are now also reported by the Fleet Agent for device groups and operator scopes.%LOCALAPPDATA%\Highwind\pinned-prompts.json), the Security Watch state and inbox (%APPDATA%\Highwind\highwind-watch*.json), window and grid layout, and the SharePoint profile.A maintenance release with one job: move Highwind onto .NET 10 before .NET 8 stops receiving security updates. There are no new features and no behaviour changes. If everything has gone to plan, the only thing you will notice is that the download is slightly larger.
Highwind pins the PowerShell SDK so its collectors behave identically everywhere, rather than inheriting whatever PowerShell happens to be on the machine. That pin had drifted: the SDK and the automation engine underneath it were held at different versions, which .NET 8 tolerated silently and .NET 10 refuses to build at all.
The two halves are now kept together by construction instead of by hand, so they cannot drift apart again. This is invisible in normal use, but it is the one change in this release with any real chance of affecting collector behaviour, and it is the thing worth watching if a collector reports something unexpected after upgrading.
Highwind-3.6.0.msiC:\Program Files\Highwind — unchangedHKLM\SOFTWARE\Highwind\Version = 3.6.0HKLM\SOFTWARE\Policies\Highwind — unchanged, no migration requiredmsiexec /i Highwind-3.6.0.msi /qnC:\Program Files\Highwind\ will see .NET 10 where they previously saw .NET 8. The file count in the install directory changes for the same reason. Nothing is wrong — but a scanner pinned to the old runtime will report a difference.
Four things happen in this release. The tool is renamed from MDE Toolkit to Highwind; Highwind AI becomes the fastest way to find out what is actually going on with a machine — including, for the first time, what has changed on it; remote targeting is repaired — a much bigger statement than it sounds, because until now a remote scan could quietly report the local machine instead; and App Control gains the tooling to take a rollout from audit mode to an enforceable policy.
MDE-Toolkit will need updating.
Same project, same maintainer, same licence. The old name described a Microsoft product rather than this tool, and the tool is not a Microsoft product — it is an independent project that reads Microsoft's telemetry and tells you what it says. A name that implied otherwise was doing nobody any favours, least of all the people who had to explain it in a change ticket.
HKLM\SOFTWARE\Policies\MDE-Toolkit to HKLM\SOFTWARE\Policies\Highwind before it seeds any defaults, and it never overwrites a value that is already set. GPO and Intune settings survive an in-place upgrade with no action required.%ProgramData%\MDE-Toolkit into %ProgramData%\Highwind. Without this the Exclusions tab would come up empty on an upgraded machine while the permanent exclusions it created were still live in Defender — the tool would no longer know it owned them, and the record of who excluded what would be stranded in a folder nothing reads.\MDE Toolkit\ASR Exclusion Sweep task before handing the ledger over, because two SYSTEM sweeps reverting the same rule and path from two copies of the ledger is exactly the overlapping-exclusion corruption fixed in 3.3.2. Any temporary exclusion still running is then re-adopted at startup, so nothing outlives its expiry during the handover.The reason this is handled so carefully is that the failure mode is invisible. A renamed policy key that nothing reads does not produce an error — the application starts, the UI looks healthy, and the fleet quietly runs with no upload endpoint, no tenant and default guardrails. That is worse than a crash, because nobody investigates it.
Ask a question about a machine in plain English and get an answer, instead of reading six pages of settings and working out for yourself which of them matter. “Is this machine protected?”, “why is Defender not updating?”, “what changed last week?” — Highwind reads the machine, works out which parts of it are relevant to what you asked, and explains what it found and what to do about it.
Two things make the answers worth trusting. Every fact comes from the machine itself and is shown with its source, so you can check it rather than take it on faith. And where Highwind cannot read something, it says so — it will not fill a gap with a confident guess, because a wrong answer that looks right is worse than no answer at all.
The biggest addition in this release, and the one with no equivalent elsewhere. Highwind now takes a quiet snapshot of the machine’s security configuration every few hours and keeps a rolling 30 days of history. That turns a question nobody could previously answer into an ordinary one:
“What has changed on this machine in the last 30 days?”
Being told a value moved is only half an answer. Each reported change now comes with the part you would otherwise go and look up: what the setting actually does, where it is configured in Intune and in Group Policy, the registry location, what the numbers mean, and the handful of things that realistically cause it to move — most likely first.
Highwind then checks the machine live and tells you whether anything is enforcing that value right now. That is the difference between “go and check Intune or Group Policy” and “nothing is enforcing this here, so look at who has local administrator rights.”
Where the change cannot be traced to a specific policy — which is usually, once the logs have rolled — it says so plainly and points at the places evidence may still survive, rather than inventing a culprit.
For the questions that are about Defender rather than about your machine — what a setting means, why a feature behaves the way it does — Highwind draws on a built-in knowledge base, and, if you allow it, looks things up at Microsoft Learn and other public sources. Answers carry links, so you can read the original. Your organisation can turn outside lookups off entirely by policy.
Highwind AI can write the whole thing up as a report, and you choose what it should concentrate on: a security review, or a troubleshooting investigation. The same machine, the same evidence, but the emphasis, ordering and recommendations shift to suit the reader — a summary for management is not the same document as a working list for whoever has to fix it.
The original bug report, and the one that started everything else in this release. Every keystroke in the target field triggered a synchronous UNC probe of the typed value. Typing a machine name meant firing a network round trip at every prefix of it, on the UI thread, so the window locked up for as long as the network took to give up on names that were never going to resolve.
The probe is gone from the keystroke path entirely. Reachability is established when you actually target the machine, where waiting for the network is something you asked for.
Investigating this exposed something considerably worse than a hang. Credentials were not reaching most of the remote data paths, and the code that needed them fell back to reading the local machine instead of failing.
This is the headline correctness fix. When a remote collection could not complete, several subsystems fell through to the local machine and presented the result as though it came from the target. A remote assessment could therefore describe the analyst's own workstation while naming somebody else's device at the top of the report.
That is not a cosmetic bug. It produces a confident, specific, well-formatted answer about the wrong computer, and there is nothing in the output to suggest you should not believe it. Every one of the following now reports the target or reports nothing:
The mirror image of the previous problem, and the more dangerous half. Several actions could write locally while a remote target was selected — so an operator intending to change a remote device would instead modify their own.
Device Control policy edits, ASR exclusion creation, Quick Actions and support bundle generation are all now refused rather than silently redirected when the write cannot be performed against the selected target.
The through-line of this release: where the tool does not know something, it now says so instead of producing a verdict it cannot support.
The command line and the interface had drifted apart and could produce different results from the same inputs. They now run the same code path. Batch reporting, previously CLI-only, is available in the GUI on that same shared path — so a report generated either way is the same report.
PsExec-based remote provisioning was broken and is repaired. Fetching it is now an explicit, optional, signed download rather than an assumption, and it remains disabled entirely where DisablePsExecDownload is set — a tool Defender flags as HackTool:Win32/PsExec should never arrive on a machine without someone choosing it.
The largest body of work in this release. The goal is narrow and specific: make it realistic for an administrator to go from “App Control is deployed in audit mode” to “here is the policy I am prepared to enforce” — the step most rollouts stall on.
\Users\*\, so one application stops producing one row per profile.\\?\ prefix. That is not cosmetic — a FilePath rule containing \\?\ is invalid — so the pair is merged and counted once.-context.txt records the query window, filters and policies compared against, so the file can be handed on without explanation.Advanced Hunting has a 30-day retention, a complexity limit, a response-size cap and a rate limit. On a six-figure device estate all four bite, and the previous behaviour was to quietly return less data rather than say so.
The old name sat too close to Microsoft Secure Score, an unrelated Microsoft product. This score is calculated locally by Highwind from local data and has never had any relationship to it. The score, weighting and remediation guidance are unchanged — only the label.
Numbered walkthroughs in the in-app knowledge base, and a fuller guide at App Control. The guided tour now loads policies before running the query, so results come back already compared.
Highwind-3.5.0.msi (was MDE-Toolkit-3.4.0.msi)C:\Program Files\Highwind (was C:\Program Files\MDE-Toolkit)HKLM\SOFTWARE\Highwind\Version = 3.5.0 (was HKLM\SOFTWARE\MDE-Toolkit\Version)HKLM\SOFTWARE\Policies\Highwind (was HKLM\SOFTWARE\Policies\MDE-Toolkit) — migrated automatically on upgradeHighwind Collect and Highwind Upload, with the sweep task under \Highwind\ (were MDE Toolkit Collect / MDE Toolkit Upload under \MDE Toolkit\)Highwind Collect runs as SYSTEM every eight hours and writes a configuration snapshot to %ProgramData%\Highwind, keeping a rolling 30 days. This is what the settings history and change tracking read. It stays on the machine — nothing is uploaded unless you separately configure an upload endpoint. Set EnableBackgroundCollector to 0 in the policy key to turn it off.%LOCALAPPDATA%\Highwind and %APPDATA%\Highwind, and is copied across on first launch. Cached sign-ins, export preferences, Advanced Hunting preferences and the AI user secret all carry over — nobody is asked to sign in again.%ProgramData%\Highwind, migrated by the installer. Covers the ASR exclusion ledger, the collector cache and stored reports. The old directory is left in place.\Highwind\ASR Exclusion Sweep replaces \MDE Toolkit\ASR Exclusion Sweep, which the upgrade unregisters.msiexec /i Highwind-3.5.0.msi /qnC:\Program Files\MDE-Toolkit\, and monitoring that watches for the MDE Toolkit Collect task will all stop matching. The application will be installed and healthy; only your tooling will disagree.
The headline is supply chain: release artifacts are now digitally signed, so you can verify what you downloaded before you deploy it to a fleet. Alongside that, a Smart App Control reporting bug is fixed that had been wrong in the dangerous direction, EDR onboarding moves onto the Overview page, and the application icon changes.
This release shipped under the tool’s former name, MDE Toolkit. It was renamed to Highwind in 3.5.0.
Every release artifact is signed with Azure Artifact Signing and RFC‑3161 timestamped. Until now the toolkit shipped as an unsigned MSI — an installer that requests elevation and reads your Defender configuration, with no way for you to confirm it was the file that left the build.
Timestamping matters more than usual here. Azure Artifact Signing issues short‑lived certificates by design; the RFC‑3161 countersignature is what keeps the signature valid after that certificate expires, rather than the download turning untrusted a few days later.
Verify before you deploy:
Get-AuthenticodeSignature .\MDE-Toolkit-3.4.0.msi |
Format-List Status, SignerCertificate, TimeStamperCertificate
Status should read Valid. A signed package also means SmartScreen has something to build reputation against, and that you can write WDAC or AppLocker publisher rules for the toolkit instead of hash rules that break on every update.
Two independent defects, both fixed. The second is the one worth reading.
MSFT_MpComputerStatus.SmartAppControlState is a string (On / Off / Eval), despite the name. The code ran it through int.TryParse, which always failed, so the assignment never executed and Smart App Control was silently left unset on the WMI path. The background collector read the same property correctly as a string, so a single machine could report one thing in the fleet table and something else in the interactive UI.VerifiedAndReputablePolicyState uses 1 for enforcement and 2 for evaluation; the toolkit had those the wrong way round. A device in evaluation mode — observing, not blocking — was reported as On, and the Security Score then counted it as fully protected. That is a false sense of safety rather than a cosmetic glitch, and it applied to every code path that fell back to the registry.Both the WMI and registry paths now produce the same normalised values, so the compliance check and the Security Score can no longer disagree about the same device. Thanks to Eric Lawrence for identifying the registry mapping error.
The Intune / Entra Management card gains three rows: EDR Onboarding, Sense Service and MDE Org ID. Previously this required opening a support bundle.
They are deliberately grouped separately from the enrollment rows above them, because MDM management and EDR onboarding are independent. A device can be fully Intune‑enrolled, compliant, and syncing happily while sending Microsoft Defender for Endpoint no telemetry whatsoever. Reading “Enrolled” and concluding “monitored” is exactly the mistake this is meant to prevent.
OnboardingState stays at 1 even when the Sense service is stopped or disabled, so that row on its own would read Onboarded on a machine reporting nothing. A warning badge calls out the onboarded‑but‑not‑running case explicitly.Running (Disabled) will not survive the next reboot; Stopped (Automatic) is not reporting right now. Either value on its own hides a real failure.Works against remote targets on the same terms as the rest of the Overview page.
The previous icon was Microsoft Defender’s own product icon. This is an independent open‑source project and is not a Microsoft product, so shipping Microsoft’s product iconography was not appropriate regardless of how recognisable it was.
The replacement is a telemetry trace. The choice is deliberate: a shield claims protection, and the toolkit does not protect anything — it measures, reports, and tells you what to fix. The icon is supplied at every size from 16 to 256 pixels, each rendered natively rather than scaled down, so it stays legible in the taskbar.
Microsoft.Identity.Client, Azure.Identity).MDE-Toolkit-3.4.0.msiHKLM\SOFTWARE\MDE-Toolkit\Version = 3.4.0msiexec /i MDE-Toolkit-3.4.0.msi /qnGet-AuthenticodeSignature on the downloaded MSI and confirm Status is Valid and a timestamp is present. This is worth doing on the first signed release specifically, because it is the release that establishes what a genuine artifact looks like.
A sign-in correctness release. The Highwind Upload scheduled task could open a Microsoft Edge window and ask an unattended machine to authenticate. The failure was counterintuitive enough to be worth writing down: the machines that prompted were the ones joined to the tenant that owns the Function App, and the machines that stayed silent were the ones joined somewhere else entirely.
The uploader authenticated with DefaultAzureCredential. That credential knows nothing about Entra device join and cannot use the machine’s primary refresh token — it simply walks a fixed chain of providers and returns the first token it gets. The chain ends at an interactive browser.
az login, Connect-AzAccount, or signed in to Visual Studio, the chain found a cached developer token early and returned it silently. No prompt — but also no guarantee the token was for the right tenant, or the right identity.So device join was not just unhelpful here, it was invisible to the credential. The quieter machine was the misconfigured one.
Scheduled uploads acquire tokens through the Windows broker (WAM), which is the only provider that can redeem the machine’s Entra PRT. On a joined or registered device this is silent and uses the correct identity. The interactive browser is now excluded outright from every code path the background collector uses, and automatic authentication is disabled on the broker itself, so a machine that cannot sign in silently fails and logs a reason instead of rendering a window nobody will ever see.
The previous PreferredAuthMethod = WAM setting never actually used WAM — it constructed a plain interactive browser credential with no broker attached, so it could not do silent SSO either. It now does what its name says.
The fallback path is still available for machines that genuinely rely on a signed-in Azure CLI or Azure PowerShell session, but it is now pinned to the configured TenantId, so a stale sign-in to an unrelated tenant can no longer quietly become the upload identity.
AuthClientIdBroker sign-in needs a client application to request the token as. In most deployments the toolkit can work this out on its own, so no configuration change is required to upgrade. It tries, in order:
AuthClientId, if you set it. An explicitly named registration is used on its own — falling back to a different one would hide a typo and mint tokens under an identity you did not choose.FunctionAppAudience. Where a single registration both exposes the API and acts as the public client — the usual Function App setup — this is already authorized for its own scope and simply works.Set AuthClientId (REG_SZ, under HKLM\SOFTWARE\Policies\Highwind) when your client and API are separate registrations, or to pin the choice and skip the probe. Whichever registration ends up being used needs public client flows enabled, redirect URI ms-appx-web://microsoft.aad.brokerplugin/<client-id>, and access to the scope named in FunctionAppAudience. When the probe succeeds on a fallback candidate, the log names the client ID that worked so you can pin it.
Recommended for production: set it explicitly. Optional is not the same as advisable — if the probe lands on the built-in Azure CLI client, your Function App is being accessed through Microsoft's app registration. That works, but it means anyone with the Azure CLI installed can request tokens for your API, and Conditional Access cannot be scoped to an application you control. Note that a registration used for blob upload also needs a delegated user_impersonation permission on Azure Storage; the Azure CLI client has that by default, a fresh registration of your own does not.
--auth-loginA device that is not Entra joined to the tenant that owns the Function App has no primary refresh token for it, so the broker cannot sign in silently there no matter how AuthClientId is set. Until now such machines worked only because a leftover az login session was quietly supplying every token — an unchosen dependency on a developer tool that would break the moment it expired.
Run once, as the user the upload task runs as:
"C:\Program Files\Highwind\Highwind.exe" --auth-login
This prompts once, acquires consent for every configured upload target, and saves an authentication record to %LOCALAPPDATA%\Highwind\auth-record.json. Scheduled uploads then refresh that account silently. It is the only mode in the toolkit that will ever display a sign-in window. Devices joined to the correct tenant do not need it.
Highwind-3.3.4.msiHKLM\SOFTWARE\Highwind\Version = 3.3.4msiexec /i Highwind-3.3.4.msi /qnAuthClientId is recommended for production.Azure.Identity.Broker, which ships the native msalruntime binaries alongside the application. They are included in the MSI automatically.Highwind Collect task is unchanged. It runs as SYSTEM, which has no interactive Windows account and therefore no PRT, so it continues to use managed identity or Azure CLI and never involved the broker.service.log in the cache folder (default C:\ProgramData\Highwind\cache\service.log). A silent-auth failure now names the account Windows is signed in as, the tenant a token was requested for, and the client IDs tried, rather than dumping the raw credential chain. If the signed-in account belongs to a different tenant than the Function App, that is the cause — run --auth-login once on that machine.
A telemetry honesty release. Building the fleet dashboards surfaced four fields that the enterprise collector had been reporting without ever measuring. Each was uploaded at its default value on every device, so a report reading them saw false or 0 and had no way to tell that apart from a real result — which is worse than not collecting them at all.
ExploitProtectionDepEnabled, ExploitProtectionAslrEnabled and ExploitProtectionCfgEnabled were declared on the snapshot model, never assigned anywhere, and uploaded as false. A fleet dashboard therefore reported “0% enabled” for all three across every device. They are now read from the packed MitigationOptions value under Session Manager\Kernel, decoding the per-mitigation nibble (1 = forced on, 2 = forced off, 0 = OS default). An unset nibble is reported as enabled on 64-bit Windows, because that is the platform default; if the value cannot be read at all, ExploitProtectionStatus becomes Unknown rather than leaving false to masquerade as a measurement.LocalAdminCount was never assigned and so was always 0 — impossible, since every Windows install has at least the built-in Administrator. It is now counted with NetLocalGroupGetMembers resolved through the well-known SID S-1-5-32-544, so it does not depend on the display language of the OS. Win32_GroupUser was deliberately not used: it can take tens of seconds on a domain-joined machine, and this collector runs unattended on a schedule. LocalAdminStatus now reflects the actual count rather than only whether LAPS is present.AppControlEnforcementMode was not even declared as a property, so the column was permanently empty. It now reports Enforced, Audit, Deployed or NotConfigured. Deployed is the state worth knowing about: .cip policies are present on disk but Code Integrity is not running them, so they are protecting nothing while looking, in any summary that only asks “is App Control configured”, entirely healthy.Quick and full scan times are derived from Defender’s scan age in days, and the code only recorded a timestamp when that age was greater than zero. A scan that ran today has an age of exactly zero, so the machines that had just scanned — the ones in the best shape — uploaded no scan time at all and were indistinguishable from machines that had never scanned. The test is now >= 0.
Highwind-3.3.3.msiHKLM\SOFTWARE\Highwind\Version = 3.3.3msiexec /i Highwind-3.3.3.msi /qnServiceVersion to see how far the rollout has reached, and consider deleting pre-3.3.3 rows if the false zeros would skew a fleet percentage.
A policy-surface cleanup. An audit of every value under HKLM\SOFTWARE\Policies\Highwind found nine settings that were read into the configuration object and then never used, so setting them did nothing at all. Two were worth building; seven were removed.
DisableRemoteTarget now pins the toolkit to the local machine. Enforcement sits in the TargetMachine setter rather than on the text box, because that setter is the single choke point every remote-capable service reads from — roughly thirty services branch on it. A non-local value is rejected and coerced back to localhost, so no remote path is reachable even if a future caller sets the target in code. The Target box is also disabled, with a tooltip naming the policy.DisableExportButtons now blocks every export path: report PDF/HTML, triage report, scan results, ASR event CSV, Advanced Hunting CSV and XML, supplemental and merged App Control policies, WDAC XML, firewall migration JSON, and investigation details CSV. Blocked attempts show a dialog naming the policy, so the button does not simply appear broken.Both were documented on this site and in the in-app KB while doing nothing — the same failure mode as ForceReadOnlyMode in 3.3.1. An administrator who set DisableRemoteTarget=1 reasonably believed remote access was off.
CollectFirewallRules, CollectWfpFilters, CollectDeviceControl, CollectNetworkInfo, CollectSecurityScore, DisableAiFeatures and DisableAdvancedNetworking are no longer read, no longer seeded by the installer, and are ignored if present. The five Collect* flags promised scope control over data the background collector never gathered. The two Disable* flags duplicated VisibilityAiAnalysisPage and VisibilityNetworkingPage, which are enforced — use those instead.
The six remaining Collect* flags — DefenderStatus, DefenderPolicies, FirewallStatus, AppControl, IntuneEnrollment and DeviceGuard — are genuinely honoured by the collector and are unchanged.
Highwind-3.3.2.msiHKLM\SOFTWARE\Highwind\Version = 3.3.2msiexec /i Highwind-3.3.2.msi /qnreg delete "HKLM\SOFTWARE\Policies\Highwind" /v CollectFirewallRules /f (and likewise for the other six).DisableExportButtons=1 or DisableRemoteTarget=1 expecting them to work, they will now take effect for the first time. If you set them speculatively and still want export or remote targeting, set them back to 0 before rolling out 3.3.2.
Visibility*Page value.
Attack Surface Reduction release. The ASR page becomes a two-page workspace β an overview that finally tells you what mode every rule is in and where that configuration came from, and a new Events page for investigating blocks and tuning them. Admins can create audited, expiring exclusions directly from an event.
The overview used to read rule state from a single registry key, which meant it could not see rules configured locally. Two consequences, both fixed:
Policy Manager\ASRRules (Intune/MDM), the classic Windows Defender Exploit Guard\ASR\Rules GPO key, and Get-MpPreference. On a typical managed device this recovers rules that were previously invisible.1 specifically means Block; labelling it "Enabled" was ambiguous sitting next to Audit and Warn in the same column. Action 5 ("not configured") is now decoded too.Source column β Intune / GPO, Group Policy, Local, or blank. Locally-set rules are highlighted, because they are real configuration that will not survive a rebuild and is not enforced fleet-wide.GUID column on the main grid, plus the GUID, a plain-English explanation of the source, and any per-rule exclusions in the expandable row details.Mode = Not configured.1125 and 1126 joined the existing 1121/1122/1129. Event 1126 means the user was warned and ran the content anyway β the rule fired and was defeated β which the overview card never surfaced.Add-MpPreference command and the command that will reverse it before anything is written.AttackSurfaceReductionRules_RuleSpecificExclusions) rather than the blunt all-rules form, with warnings for overly broad paths and wildcards.\Highwind\ASR Exclusion Sweep scheduled task β so they still expire when the app is closed.%ProgramData%\Highwind\asr-exclusions.json recording who, when, why, the exact commands, and expiry. Defender records none of this itself. The directory is ACL'd to SYSTEM and Administrators.Remove-MpPreference is not proof β under Tamper Protection Defender can ignore the change silently. The result is re-checked against Get-MpPreference and reported honestly if it did not stick.Remove-MpPreference matches the ASR rule ID case-sensitively β given the wrong case it exits 0, logs nothing, and removes nothing. The expiry sweep normalised the GUID to lowercase, so every temporary exclusion silently outlived its expiry. Defender keeps whatever case was originally written, so the toolkit now reads the stored ID back and echoes its exact casing. A failed revert is also retried on the next sweep instead of being stranded permanently.Get-MpPreference returns rule-specific exclusions |-separated while the registry uses >; only the latter was handled, so a rule with ten excluded paths counted as one.UCEERR_RENDERTHREADFAILURE) terminated the process mid-investigation. These are now absorbed and logged to %LOCALAPPDATA%\Highwind\diagnostics.log, falling back to software rendering only after repeated failures. Other exceptions are logged but deliberately not suppressed.NullReferenceException in ListCollectionView.PrepareLocalArray) when loading ASR data.New optional policy values under HKLM\SOFTWARE\Policies\Highwind restrict what admins may create. A device with none of them set behaves exactly as before.
AsrAllowPermanentExclusions (DWORD, default 1) β 0 forces every exclusion to expire.AsrAllowTemporaryExclusions (DWORD, default 1) β set both flags to 0 to disable exclusion creation entirely.AsrExclusionMaxHours (DWORD, default 0 = uncapped) β hard cap, applied last so it cannot be widened by the list below.AsrExclusionDurationsHours (SZ, default 4,24,168,720) β custom duration menu; unparseable entries are ignored and reported rather than silently dropped.ForceReadOnlyMode was previously documented but never enforced. It now blocks every exclusion write, creation and removal alike.Enforcement happens in the apply path, not just the dropdown, so the policy is not merely cosmetic. Temporary-only with a four-hour cap is two values: AsrAllowPermanentExclusions=0 and AsrExclusionMaxHours=4.
Highwind-3.3.1.msiHKLM\SOFTWARE\Highwind\Version = 3.3.1msiexec /i Highwind-3.3.1.msi /qnVisibilityAsrEventsPage (0 hidden / 1 admin / 2 users / 3 both). Defaults to 1, matching VisibilityAsrDashboardPage. Setting it to 3 gives standard users read-only event triage β the exclusion actions stay hidden regardless, as they are gated on elevation independently.HKLM\SOFTWARE\Policies\Highwind at its built-in default, so knobs are visible in regedit and can be edited rather than created. Existing values are never overwritten, and because each seeded value equals the code default, a fresh install behaves identically to a device with no policy key. Values with no meaningful default, and the per-page Visibility*Page values, are deliberately left unseeded.\Highwind\ASR Exclusion Sweep task is registered at runtime on first use of a temporary exclusion, so uninstall removes it explicitly along with its script. Still-active temporary exclusions are reverted first β a temporary exclusion outliving the tool that promised to expire it would be a silent security hole. Permanent exclusions are left alone and the ledger is preserved as an audit record.Visibility*Page policy values are unaffected.
Enterprise telemetry + in-app guide release. Fixes the fields that were empty or wrong in the Azure Table row, adds richer columns for Power BI, and turns the Knowledge Base into a full offline guide for both MDE and the toolkit itself. No breaking changes β drop-in over 3.2.0.
The following columns used to arrive empty, Unknown, or wrong in the storage table. All now populate with real values on every uploaded snapshot:
AntivirusEngineVersion, SignatureVersion, PlatformVersion, ServiceVersion. CIM is preferred; registry (Windows Defender\Signature Updates\AVSignatureVersion) + filesystem (ProgramData\Microsoft\Windows Defender\Platform\*, MpEngine.dll FileVersion) act as fallbacks when CIM returns blank under SYSTEM.LastQuickScanUtc, LastFullScanUtc. Derived from the CIM age (days) fields, with the Windows Defender\Scan registry as backup.LastBootTimeUtc (from Environment.TickCount64) and IpAddress (first non-loopback IPv4 from NetworkInterface).MdeOrgId from HKLM\SOFTWARE\Microsoft\Windows Advanced Threat Protection\Status\OrgId.PowerShellExecutionPolicy (machine policy β per-shell β default) and a smarter PowerShellStatus that considers execution policy, CLM, and script-block logging.SmartScreenExplorerMode now carries the raw Explorer value (RequireAdmin / Warn / Off).TpmVersion now falls back to Win32_Tpm (CIM) when the registry key is missing.AppControlStatus used to say NotConfigured on machines with 28 audit-mode .cip policies deployed. Now:
C:\Windows\System32\CodeIntegrity\CIPolicies\Active\*.cip and reports the real count in AppControlPolicyCount.Enforced / Audit / Configured (N policies, not enforced) / NotConfigured.DeviceControlStatus, ControlledFolderAccessStatus, and ExploitProtectionStatus β they now report Disabled / NotConfigured instead of falling through to Unknown.The DeviceTag, OrgUnit, and Environment values from HKLM\SOFTWARE\Policies\Highwind were already inside every uploaded JSON but the Function App wasn't writing them as table columns. The ingestion function now promotes all three to top-level, sliceable columns β Power BI slicers on DeviceTag / OrgUnit / Environment start returning values on newly upserted rows.
FunctionApp/HealthReportIngestion/run.ps1 now maps every new field above to a typed Table Storage column.DeviceTag, OrgUnit, Environment, PlatformVersion, AntivirusEngineVersion, SignatureVersion, MdeOrgId, LastQuickScanUtc, LastFullScanUtc, LastBootTimeUtc, IpAddress, AppControlPolicyCount, AppControlEnforcementMode, PowerShellExecutionPolicy, SmartScreenExplorerMode.ReportJson slim logic β existing deployments upgrade cleanly.The Knowledge Base page (left-nav β book icon) has been refreshed to serve as the primary in-app guide for both learning MDE and learning the toolkit. Everything is available offline β no external calls required.
<Option> in the WDAC schema with description, recommendation level (Recommended / Conditional / NotRecommended / Required), a worked example, and the exact Set-RuleOption / -Delete PowerShell to apply or remove it.Doubles as the tool's own How to use Highwind guide. Each Components article calls out which pages in the toolkit surface that pillar and what a "healthy" result looks like β for example, the ASR component explains which cards on the Defender Policies and Advanced Hunting pages to check. New operators can open the KB, read a component article, and immediately know which page to open in the app.
AuthorityHostOverride, CollectWfpFilters, CollectNetworkInfo, DisableAdvancedNetworking, and an entire new Logging section (LogLevel, LogFilePath, MaxLogSizeMb). Added a New Table Columns reference table.run.ps1 sample matches the tested production script; the Data Destination Reference now lists all ~100 columns grouped by category.js/copy-code.js; no per-page markup changes required.Highwind-3.2.1.msiHKLM\SOFTWARE\Highwind\Version = 3.2.1msiexec /i Highwind-3.2.1.msi /qnrun.ps1 to pick up the new columns. Azure Table Storage is schemaless per row β existing rows keep their original columns; newly upserted rows carry the new fields.App Control Deep-Dive: six new workflow features and a completely rebuilt ticket-attachment export pipeline. This is the biggest App Control release since 3.1.0.
.cip is actually signed.*.json snapshot next to the report(s) β useful when Tier III wants to re-analyze the collection.%LocalAppData%\Highwind\export-prefs.json).Single self-contained .html file β no frameworks, no external assets, no CDN references. Same "attach it to a ticket, no assets folder" story as the PDF.
scroll-margin-top so anchors don't land under the sticky nav).<details> β WDAC policies collapse by default so a 20-policy machine still opens on one screen.prefers-color-scheme.The Triage Report's HTML output now uses the same visual language as the Export Report β dark-mode, sticky TOC, verdict banner, collapsible sections, sortable tables, in-page search. The Save-File dialog now defaults to HTML with Markdown as the second option. Markdown output is unchanged for pasting into ticket bodies (still renders natively in ServiceNow, Azure DevOps, GitHub, Confluence).
The silent-mode App.xaml.cs handlers are now rewired through the same ExportReportAsync pipeline the GUI uses. Everything the dialog offers is exposed as a flag:
--export-html <file> β HTML mirror of --export-pdf.--format <pdf|html|both> β explicit format selection.--include-json β also emit the raw *.json snapshot.--redact <list> β comma list: none / all / machine / upn / ip / serial.--include-sections <list> β comma list of section names, or all / default / none.Backwards compatible: --export-pdf alone still produces exactly one PDF at the given path. Batch mode (--machines-file / --export-dir) now honours every new flag; per-host filenames get the appropriate extensions when --format both is used.
scroll-margin-top.PolicyObject.Rules for OptionType.EnabledAuditMode.MinHeight / MinWidth plus a bounded picker..cip policies.Highwind-3.2.0.msiHKLM\SOFTWARE\Highwind\Version = 3.2.0msiexec /i Highwind-3.2.0.msi /qn--collect / --upload tasks are unchanged. New export flags are additive.MainViewModel.ExportPdfAsync remains available for existing automation. New code should prefer ExportReportAsync.Focus release: the policies the Advanced Hunting page exports now actually compile and enforce. A pile of rule-quality, accuracy, and usability fixes built on top of 3.1.1.
ConvertFrom-CIPolicy for you and drops the binary .cip file next to the .xml. No more switching to PowerShell.SigningScenarios wiring that tells WDAC which rules apply to user-mode binaries vs kernel drivers, so the policy compiled but did nothing. Now every Allow / Deny / Signer is correctly wired into the right scenario (UMCI for .exe / .dll, KMCI for .sys).ConvertFrom-CIPolicy with "There is an error in XML document" or "the signer ID is incorrect". The recommender walks the next fallback level instead.<Allow> elements without any matching constraint.Highwind-3.1.2.msiHKLM\SOFTWARE\Highwind\Version = 3.1.2msiexec /i Highwind-3.1.2.msi /qnConfigCI module (built into Windows 11) or RSAT-WDAC (Windows Server). If neither is installed the toggle stays available but the export reports a clear "module not available" message and leaves the .xml for manual compilation.New App Control for Business → Advanced Hunting sub-page that pulls live WDAC events from Microsoft Defender for Endpoint, compares them against your local or custom App Control policies, and recommends the right allow rules to author β with the same -Level / -Fallback precedence semantics as PowerShell New-CIPolicy.
DeviceTvmInfoGathering, audit / enforced blocks, signing-info, script blocks) from the Microsoft Defender for Endpoint Advanced Hunting API. All four sovereign clouds are supported out of the box: Commercial, US Gov GCC, US Gov GCC High, and US Gov DoD — the right endpoint and authority host are picked automatically.Consolas so they line up.ActionType filter via regex so your custom WHERE clauses survive. Save / load .kql files to share queries with the team..cip in C:\Windows\System32\CodeIntegrity\CIPolicies\Active plus SiPolicy.p7b in one click, or browse to a folder of .cip / .p7b / .xml policies (recursive optional). Each event is evaluated as Allowed, Denied (explicit), or Would Still Block across every selected policy. Explicit Deny wins over Allow anywhere in the set, matching how WDAC merges policies at runtime.-Level / -Fallback)Hash, FileName, FilePath, SignedVersion, Publisher, FilePublisher, LeafCertificate, PcaCertificate, RootCertificate, WHQL, WHQLPublisher, WHQLFilePublisher, and PFN.-Level and the rest become -Fallback in order. A live Consolas-styled preview shows the resulting PowerShell-equivalent command. Order is persisted to %LOCALAPPDATA%\Highwind\advanced-hunting-prefs.json. (Since moved: the precedence editor now lives on the main Advanced Hunting toolbar — see Rule precedence.)New-CIPolicy. Defaults to Microsoft’s recommended FilePublisher β Publisher β SignedVersion β FileName β Hash β FilePath on first launch.<Allow> per algorithm (SHA256, SHA1, and their Authenticode variants). App Control evaluates the strongest hash first and ignores any algorithm the running kernel can’t compute, so emitting every variant maximises match rate — exactly what PowerShell New-CIPolicy -Level Hash produces.<!-- WARNING --> comment instead of an empty Hash="".%LOCALAPPDATA% is no longer flagged — Hash pins exact bytes regardless of where the file lives. The RISK badge now only appears for FilePath rules in user-writable folders, FileAttribute / FileName rules for unsigned files in user-writable folders, or anything kernel-mode (.sys)..xml exporter now emits one short section header per rule type (Publisher / FileAttribute / FilePath / Hash) instead of repeating each fragment’s own multi-line comment dozens of times. Files exported with lots of Hash recommendations are dramatically smaller while still being valid input for ConvertFrom-CIPolicy.AdvancedHuntingService built on Microsoft.Identity.Client 4.76.0 (interactive auth, FOCI client ID, per-cloud authority + resource URIs, legacy WDATP endpoint fallback).AppControlPolicyComparerService uses Microsoft.Security.CodeIntegrity 3.1.1 to parse .cip / .p7b / .xml policies; sanitises unknown <Option> values so newer Wizard-generated policies load cleanly.Highwind-3.1.1.msiHKLM\SOFTWARE\Highwind\Version = 3.1.1msiexec /i Highwind-3.1.1.msi /qn%LOCALAPPDATA%\Highwind\advanced-hunting-prefs.json stores the chosen cloud, tenant, KQL window, custom policy folder, and the rule-precedence order.Focused on scrolling quality of life across every page and grid in the app.
gpupdate /force button now uses a "document with text" icon for better visual clarity.Highwind-3.1.0.msiHKLM\SOFTWARE\Highwind\Version = 3.1.0msiexec /i Highwind-3.1.0.msi /qnFull release notes and downloads for older versions live on the GitHub releases page.