ManagedSpy
ManagedSpy copied to clipboard
Access denied error while running as Administrator
I have run the x86 released exe as administrator and got:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ComponentModel.Win32Exception (0x80004005): Access is denied
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.ProcessManager.GetModuleInfos(Int32 processId)
at System.Diagnostics.Process.get_Modules()
at Microsoft.ManagedSpy.Desktop.IsManagedProcess(UInt32 processID) in d:\x-files\projects\managedspy\managedspylib\commands.cpp:line 114
at Microsoft.ManagedSpy.Desktop.GetProxy(IntPtr windowHandle) in d:\x-files\projects\managedspy\managedspylib\commands.cpp:line 166
at EnumCallback(HWND__* handle, Int32 arg) in d:\x-files\projects\managedspy\managedspylib\commands.cpp:line 60
at EnumWindows(IntPtr , Int32 )
at Microsoft.ManagedSpy.Desktop.GetTopLevelWindows() in d:\x-files\projects\managedspy\managedspylib\commands.cpp:line 67
at ManagedSpy.MainForm.RefreshWindows() in D:\X-Files\Projects\ManagedSpy\ManagedSpy\MainForm.cs:line 45
at ManagedSpy.MainForm.MainForm_Load(Object sender, EventArgs e) in D:\X-Files\Projects\ManagedSpy\ManagedSpy\MainForm.cs:line 33
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4341.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
ManagedSpy
Assembly Version: 1.2.2.0
Win32 Version: 1.2.2.0
CodeBase: file:///C:/Users/Kevin/Downloads/ManagedSpy_x86_1.2.2/ManagedSpy.exe
----------------------------------------
ManagedSpyLib
Assembly Version: 1.2.2.0
Win32 Version:
CodeBase: file:///C:/Users/Kevin/Downloads/ManagedSpy_x86_1.2.2/ManagedSpyLib.DLL
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4341.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4300.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4341.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
I have the same problem. I'm assuming there are only some processes that can cause this error, maybe system process or such, could you update it so that a process that's inaccessible is just skipped instead of crashing the whole program?
Well, I was able to reproduce the "Access denied" issue and even fix it, but I have to admit that the program doesn't really work for me anymore (after the start, if just sits there consuming 33 MiB of memory, no windows and no anything is shown, no exceptions either) :(
You're free to pick up the fix from the branch bugfix/23.access-denied
, and see if you can make it work 😅
Well, it works, but it is very, very slow in both refreshing the internal top level window list and the UI, and the control proxy list has 958 entries...
I only need this to look at one specific process - I don't really know C++/CLI, could you help me adding something super basic that would allow me to specify a process ID in the command line and then if one is given you would do GetWindowThreadProcessId
in EnumCallback
and only call Desktop::topLevelWindows->Add(Desktop::GetProxy((System::IntPtr)handle));
if the PID matches?
Try this dirty hack I did (pushed to the same branch).