Registry-specific Information

Windows NT and Windows 95 provide facilities to spawn a debugger when an application faults. Familiarity with the post-mortem debugging support on these systems is assumed in this section.

COM RPC debuggers make use of this mechanism in order to start the debugging of a client or server application that is not presently being debugged. A common scenario is that of a user wanting to step into a RPC call as she is debugging. The client side debugger is notified about the RPC call and sends debugger specific information with the packet. A DebugOrpcServerNotify() notification is raised in the server process. If the server application is already being debugged, it recognizes this as a COM RPC notification and handles it. However if the server application is not being debugged, the system will launch the debugger specified in the AeDebug entry. The debugger will then get the exception notification and handle it.

To avoid having malicious clients being able to force the debugging of a remote server, additional safeguards are required. The COM RPC system checks that the registry key DebugObjectRPCEnabled exists on the system.26. If this key does not exist, the debug notifications are disabled. Thus, debugging will only take place if explicit action has been taken on a given computer to enable it, and so a remote client cannot cause debugging (and thus denial of service) to occur on an otherwise secure computer.

The full path to this key for a Windows NT system is:


   Software\Microsoft\Windows NT\CurrentVersion\DebugObjectRPCEnabled.

For Windows 95 the path to this key is:


   Software\Microsoft\Windows\CurrentVersion\DebugObjectRPCEnabled.

The client side debugger should also ensure that the AeDebug\Debugger entry on its computer is set appropriately.

Before sending any notification, COM sets the AeDebug\Auto entry to 1 [one]. This is done in order that the system does not put up a dialog box to ask the user if she wants to debug the server application. Instead it directly launches the debugger.

The scenario where the user steps out of the server application into to a client application, which is not being debugged currently, is symmetrically identical the preceding, insofar as launch of the debugger is concerned.