WDAC(Application Control): How to correctly validate WDAC Disabled:Flight Signing with a flight-signed user-mode DLL

Gagan Kumar 0 Reputation points
2026-09-06T16:27:52.3966667+00:00

I am testing WDAC/App Control for Business and need Microsoft's guidance on how to correctly test the Disabled: Flight Signing policy option.

Test environment

Host OS: Windows Server 2022 <Edition / Build>

Test OS: Windows 11 <Edition / Version / Build>

The Windows 11 installation image was obtained from UUP Dump and used to create the Windows 11 test environment.

WDAC is running in enforcement mode.

Relevant policy options:

Enabled:UMCI

Enabled:Update Policy No Reboot

Disabled:Flight Signing

Test performed

I obtained FlightTest.dll from UUP Dump and copied it to the Windows 11 test machine:

C:\Users<user>\Desktop\FlightTest.dll

I verified the DLL signature. It shows:

Publisher: Microsoft Windows

Issuer: Microsoft Development PCA 2014

Root: Microsoft Development Root Certificate Authority 2014

I created a simple .NET 8 user-mode application, FlightLoader.exe, that uses the Windows LoadLibrary() API to load FlightTest.dll.

With Disabled:Flight Signing enabled, the application reported:

Attempting to load:

C:\Users<user>\Desktop\FlightTest.dll

DLL LOAD SUCCEEDED

I checked Microsoft-Windows-CodeIntegrity/Operational, but did not find an Event 3077 indicating that FlightTest.dll was blocked.

I found that the policy initially contained the Microsoft Flight signer in the UMCI AllowedSigners. I removed that Flight signer and its corresponding AllowedSigner entry while keeping Disabled:Flight Signing enabled.

I incremented the policy version, recompiled and signed the policy, deployed it to:

C:\Windows\System32\CodeIntegrity\CiPolicies\Active\

and refreshed the policy using RefreshPolicy.exe.

After this change, the FlightLoader application itself was blocked because its FlightLoader.dll dependency was not allowed. Therefore, this second test did not reach FlightTest.dll, and I cannot use it to determine whether Disabled:Flight Signing is working as expected.

Questions

Could someone please clarify:

  1. Is FlightTest.dll obtained from UUP Dump an appropriate test binary for validating Disabled: Flight Signing?

Is using a simple user-mode application with LoadLibrary() a valid and supported method for testing this policy option against a DLL?

  1. How should I configure the test application and its .NET dependencies so that the test harness is allowed, while FlightTest.dll remains subject to the Disabled: Flight Signing check?
  2. If Disabled: Flight Signing blocks the DLL, should the expected result be Event 3077, with a correlated Event 3089 showing VerificationError = 24 ("Flight root not allowed")? Microsoft's documentation identifies 3077 as the enforcement block event and 3089 as the associated signature-information event.
  3. Is there an official Microsoft test binary or recommended procedure for reliably testing Disabled: Flight Signing?
  4. Could using a Windows 11 installation image obtained through UUP Dump affect Flight Signing or Code Integrity behaviour?

I would appreciate guidance on the Microsoft-recommended procedure for creating a reliable and reproducible test of Disabled: Flight Signing.

Windows for business | Windows Client for IT Pros | Devices and deployment | Other
0 comments No comments

1 answer

Sort by: Most helpful
  1. Allan Solomon Mejia 7,915 Reputation points
    2026-09-06T16:44:47.4266667+00:00

    Hello @Gagan Kumar

    Your general test approach is reasonable, but I would separate policy validation from validation of that particular FlightTest.dll.

    Disabled:Flight Signing is an App Control policy option that prevents binaries signed by Windows flight/preview signing authorities from being trusted. Microsoft also notes that this option is intended for organizations that want to trust released binaries rather than flight/preview-signed builds.

    A few points about your test:

    1. Verify that the intended policy is actually active first.

    Before interpreting the DLL result, confirm the deployed policy and options on the Windows 11 test system. On supported Windows 11 versions, you can use CiTool.exe to enumerate/manage active App Control policies. Also check:

    Applications and Services Logs > Microsoft > Windows > CodeIntegrity > Operational

    Event 3099 indicates that an App Control policy was loaded and includes information about its policy options.

    This matters after modifying, recompiling, signing, and refreshing the policy because you want to confirm that the policy containing Disabled:Flight Signing is the one evaluating the test.

    2. LoadLibrary() is a reasonable way to cause a user-mode DLL to be evaluated, provided UMCI is enabled.

    Your policy has Enabled:UMCI, which causes App Control to validate user-mode executables and scripts in addition to kernel-mode binaries. The test harness and all required dependencies must be allowed first; otherwise, as you observed, execution stops before FlightTest.dll becomes the binary under test.

    I would therefore explicitly allow/sign the test loader and its required runtime dependencies through normal policy rules, while not adding any allow rule for FlightTest.dll or its flight signer. That isolates the DLL as the item being evaluated.

    3. Event 3077 is the primary enforcement signal to look for.

    3076 = file would have been blocked under an Audit policy

    3077 = file failed the enforced policy and was blocked

    3089 = signature information associated with an audit/block event

    You can correlate event 3089 with the corresponding 3076/3077 event using the Correlation ActivityID.

    So if App Control rejects the DLL under your enforced policy, I would expect the investigation to start with the applicable block event and then correlate the 3089 signature event. I would not use VerificationError=24 alone as proof that Disabled:Flight Signing has been validated; the complete correlated Code Integrity events and signer information are more reliable.

    4. The existing Microsoft Flight signer in AllowedSigners is an important finding.

    If your policy explicitly allows the signer that authorizes the test DLL, that can undermine the isolation you're trying to achieve. Removing that signer, while ensuring your test harness remains independently allowed, makes for a much cleaner test.

    5. Do not use the UUP Dump image/binary as the basis for a definitive Microsoft-supported result.

    UUP Dump isn't a Microsoft distribution/support channel. Even if the binary's certificate chain appears to contain Microsoft Development/Flight certificates, that doesn't establish that Microsoft considers that particular extracted binary a supported reference artifact for testing this policy option.

    For a reproducible Microsoft-supported validation, I would repeat the test using an official Windows Insider Preview build obtained through Microsoft's Windows Insider channels, then use a flight-signed component from that environment whose signer can be verified independently.

    I haven't found Microsoft documentation that publishes a dedicated Disabled:Flight Signing test DLL or an official step-by-step test procedure. Therefore, I wouldn't claim that FlightTest.dll from UUP Dump is Microsoft's supported test binary.

    As an additional sanity check, you could initially perform the isolated test in Audit mode. Microsoft recommends Audit mode when validating new App Control policies: a binary that would be rejected should generate 3076 without actually being blocked. Once you confirm the expected signer evaluation, move the same policy/test to enforcement and verify the corresponding block behavior.

    If an officially sourced flight-signed binary still loads after you've confirmed the active policy, removed the relevant Flight signer from the allow rules, and independently allowed the test harness, capture the 3099, 3076/3077, and correlated 3089 events and raise that evidence with Microsoft Support for App Control engineering review.

    References:

    Understand App Control policy rules and file rules

    Understanding App Control event IDs

    CiTool technical reference

    Use audit events to create App Control policy rules

    Help make this community better for everyone: if this answer resolved your issue, please accept it or upvote it. If not, share more details in a comment so we can continue the discussion and find the right solution.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.