Knowledge Base

BUG: RPC_E_CANTCALLOUT_ININPUTSYNCCALL Error When System Menu Is Shown in Taskbar

Article ID: 198996

Article Last Modified on 12/1/2003


APPLIES TO


This article was previously published under Q198996

SYMPTOMS

When an application tries to call a Component Object Model (COM) method while the user has displayed the system menu from the application's taskbar button, the COM call fails with RPC_E_CANTCALLOUT_ININPUTSYNCCALL.

The following list outlines in detail what occurs:
  1. A thread creates a window that has a corresponding taskbar button.
  2. The thread makes outgoing COM calls in response to posted window messages, such as WM_TIMER messages.
  3. The user right-clicks the taskbar button or sets the keyboard focus on the button. Then the user presses the SHIFT+F10 key combination or the Application key.
  4. The shell sends a message to the thread using the SendNotifyMessage function. The default message handler displays the system menu and runs a message loop to service the menu.
  5. The thread receives and processes a posted message that causes it to attempt an outgoing COM call.
  6. The COM call fails with RPC_E_CANTCALLOUT_ININPUTSYNCCALL.

CAUSE

COM does not allow normal outgoing COM method calls from a thread that is currently servicing a SendMessage request. For additional information, click the article number below to view the article in the Microsoft Knowledge Base:

131056 PRB: Synch OLE Call Fails in Inter-Process/Thread SendMessage

When the system menu is displayed in the taskbar, the thread that owns the window is servicing a SendNotifyMessage request. On Windows 95, Windows 98, and Windows NT 4.0, COM does not distinguish between SendMessage and SendNotifyMessage.

RESOLUTION

This bug was corrected in Microsoft Windows 2000. In Windows 2000, COM uses the InSendMessageEx function to detect a true SendMessage request.

To work around this problem if the application is running Windows 95, Windows 98, or Windows NT 4.0, use one of the following methods:

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

This bug was corrected in Windows 2000.

Keywords: kbbug kbfix KB198996