Windows 11 WHEA ErrorSource control via WMI is broken

%3CLINGO-SUB%20id%3D%22lingo-sub-2800573%22%20slang%3D%22en-US%22%3EWindows%2011%20WHEA%20ErrorSource%20control%20via%20WMI%20is%20broken%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2800573%22%20slang%3D%22en-US%22%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20WMI%20call%20to%20disable%20a%20WHEA%20ErrorSource%20is%20broken%20in%20Windows%2011%20while%20it%20works%20properly%20on%20Windows%2010.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fwindows-hardware%2Fdrivers%2Fwhea%2Fdisabling-an-error-source%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Ehttps%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fwindows-hardware%2Fdrivers%2Fwhea%2Fdisabling-an-error-source%3C%2FA%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fwindows-hardware%2Fdrivers%2Fddi%2Fntddk%2Fnc-ntddk-pshed_pi_disable_error_source%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Ehttps%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fwindows-hardware%2Fdrivers%2Fddi%2Fntddk%2Fnc-ntddk-pshed_pi_disable_error_source%3C%2FA%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThis%20is%20an%20example%20C%23%20code%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3Epublic%20int%20DisableSource(ManagementScope%20scope%2C%20int%20ErrorSourceId)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ManagementObject%20obj%20%3D%20new%20ManagementObject()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ManagementPath%20path%20%3D%20new%20ManagementPath(scope.Path%20%2B%20%22%3AWHEAErrorSourceMethods.InstanceName%3D'WHEA_WMI_PROVIDER0'%22)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj.Path%20%3D%20path%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj.Get()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ManagementBaseObject%20inParams%20%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj.GetMethodParameters(%22DisableErrorSourceRtn%22)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inParams%5B%22ErrorSourceId%22%5D%20%3D%20Int32.Parse(ErrorSourceId.ToString())%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ManagementBaseObject%20outParams%20%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj.InvokeMethod(%22DisableErrorSourceRtn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inParams%2C%20null)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WHEAservice.WHEAService.EventMsg(%22Status%3D%22%20%2B%20outParams%5B%22Status%22%5D.ToString())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj.Dispose()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20int.Parse(outParams%5B%22Status%22%5D.ToString())%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%20(ManagementException%20e)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23if%20DEBUG%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WHEAservice.WHEAService.EventErr(%22Failed%20DisableSource%20for%20%22%20%2B%20ErrorSourceId%20%2B%20%22%2C%20WMI%20exception%20thrown%3A%20%22%20%2B%20e.ToString())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23endif%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%20(Exception%20e)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WHEAservice.WHEAService.EventErr(%22Failed%20DisableSource%20(this%20can%20be%20normal)%20for%20%22%20%2B%20ErrorSourceId%20%2B%20%22%2C%20exception%20thrown%3A%20%22%20%2B%20e.ToString())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2800573%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EDevice%20management%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Regular Visitor

 

The WMI call to disable a WHEA ErrorSource is broken in Windows 11 while it works properly on Windows 10.

 

https://docs.microsoft.com/en-us/windows-hardware/drivers/whea/disabling-an-error-source

 

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/nc-ntddk-pshed_pi_disable_error_...

 

The Sources accept the command and are changing status to Stopped but they still log errors as if they aren't stopped.

 

This is an example C# code:

 

 

 

public int DisableSource(ManagementScope scope, int ErrorSourceId)
        {
            try 
            {
                ManagementObject obj = new ManagementObject();
                ManagementPath path = new ManagementPath(scope.Path + ":WHEAErrorSourceMethods.InstanceName='WHEA_WMI_PROVIDER0'");

                obj.Path = path;
                obj.Get();

                ManagementBaseObject inParams =
                    obj.GetMethodParameters("DisableErrorSourceRtn");

                inParams["ErrorSourceId"] = Int32.Parse(ErrorSourceId.ToString());

                ManagementBaseObject outParams =
                        obj.InvokeMethod("DisableErrorSourceRtn",
                        inParams, null);

                WHEAservice.WHEAService.EventMsg("Status=" + outParams["Status"].ToString());
                
                obj.Dispose();
                
                return int.Parse(outParams["Status"].ToString());

            }
            catch (ManagementException e)
            {
                #if DEBUG
                    WHEAservice.WHEAService.EventErr("Failed DisableSource for " + ErrorSourceId + ", WMI exception thrown: " + e.ToString());
                #endif
                return 5;
            }
            catch (Exception e)
            {
                WHEAservice.WHEAService.EventErr("Failed DisableSource (this can be normal) for " + ErrorSourceId + ", exception thrown: " + e.ToString());
                return 5;
            }
        }

 

 

 

 

 

0 Replies