Microsoft KB Archive/259563

= Error code 0xc00e0030 or error code 0xc00e002f may be logged in the application log when you try to record Queued Components messages in a COM+ application =

Article ID: 259563

Article Last Modified on 12/5/2007

-

APPLIES TO


 * Microsoft COM+ 1.0
 * Microsoft COM+ 1.5

-



This article was previously published under Q259563



SYMPTOMS
When you try to record Queued Components messages, the following events may be logged in the application log: Event Type: Error

Event Source: COM+

Event Category: QC MSMQ Runtime

Event ID: 4216

Date: 11/30/1999

Time: 17:42:21 PM

User: N/A C

Computer:

Description: An unexpected error was returned by the MSMQ API function indicated. The following error message was retrieved from MSMQ.

MQGetSecurityContext : A cryptographic function has failed.

Server Application ID: {4657228D-FBE1-11D0-995D-00C04FD919C1}

Server Application Name: IIS Out-Of-Process Pooled Applications

Error Code = 0xc00e0030 :

COM+ Services Internals Information:

File: .\msmqrt.cpp, Line: 829

Event Type: Error

Event Source: COM+

Event Category: QC Listener

Event ID: 4216

Date: 11/30/1999

Time: 17:42:21 PM

User: N/A

Computer:

Description: An unexpected error was returned by the MSMQ API function indicated. The following error message was retrieved from MSMQ.

MQSendMessage : The internal Message Queuing certificate for the user does not exist.

Server Application ID: {4657228D-FBE1-11D0-995D-00C04FD919C1}

Server Application Name: DemoShip

Error Code = 0xc00e002f :

COM+ Services Internals Information:

File: .\lqueretry.cpp, Line: 179

Event Type: Error

Event Source: COM+

Event Category: (101)

Event ID: 4811

Date:

Time:

User: N/A

Computer:

Description: An unexpected error was returned by Message Queuing API indicated. Unable to retrieve the associated error message text. Message Queuing API return values are defined in Platform SDK file MQ.H.MQSendMessage

Server Application ID: {12345678-1234-1234-1234-123456789ABC}

Server Application Instance ID: {12345678-1234-1234-1234-123456789ABC}

Server Application Name: COM+ Sample Application

Error Code = 0xc00e0030 :

COM+ Services Internals Information:

File: c:\srvrtm\com\complus\src\comsvcs\qc\recorder\channelmanager.cpp, Line: 298



CAUSE
The Queued Components recorder is trying to load the Microsoft Message Queuing (also known as MSMQ) security context to send authenticated messages. Message Queuing cannot access the identity's certificates either because the user profile of the sender identity is not loaded, or because the Message Queuing certificate is corrupted or missing.



WORKAROUND
There are several ways to work around this problem:  You can make a Microsoft Windows 2000-based or Microsoft Windows XP-based computer load a user profile for a particular identity by giving that identity to a service. You can use Microsoft Visual C++ and Microsoft Active Template Library (ATL) to create a simple service. On Microsoft Windows NT, you can use the Instrsrv.exe and Srvany.exe utilities to create a user-defined service. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

137890 How to create a user-defined service

 If you are sure that the user profile is loaded and that certificates should be available, renew the internal certificates of Message Queuing from the Message Queuing application in Control Panel.



MORE INFORMATION
These errors may be logged even if a service is used to load the required profile if the Microsoft COM+ application is started before the service that loads the profile is started. Message Queuing uses the RegOpenCurrentUser API. The RegOpenCurrentUser API will use the default user profile when the user profile is not loaded.

For more information about the RegOpenCurrentUser API, visit the following Microsoft Developer Network (MSDN) Web site:

http://msdn2.microsoft.com/en-us/library/ms724894.aspx

To work around this problem, use the RegDisablePredefinedCache API in the Microsoft Component Object Model (COM) application as early in the code as possible. When the predefined cache is disabled, calls to find the Message Queuing certificate in the user profile will use the  registry key instead of the   registry key.

If the certificate information for the user cannot be found, information that resembles the following information may be logged in the Msmq.log file: [2]1364.18a0 03/22/2006-18:58:42.954 [certifct CMQSigCertStore::_Open] ERROR:Failed to open user certificate store in registry (Software\Microsoft\MSMQ\CertStore). 2(ERROR_FILE_NOT_FOUND) [2]1364.18a0 03/22/2006-18:58:42.954 1007 [LogMsgHR] ERROR: certifct/mqcert 90 HRESULT: 0xC00E0070 [2]1364.18a0 03/22/2006-18:58:42.954 [certifct CMQSigCertStore::Release] Info:Releasing CertStore, g_cOpenCertStore = 0 [2]1364.18a0 03/22/2006-18:58:42.954 [rt RTOpenInternalCertStore] ERROR:Failed to open user certificate store. HRESULT=C00E0070 [2]1364.18a0 03/22/2006-18:58:42.954 [rt RTGetInternalCert] ERROR:Failed to open internal certificate store. HRESULT=C00E0070 [2]1364.18a0 03/22/2006-18:58:42.954 2041 [LogMsgHR] ERROR: rt/rtcert 140 HRESULT: 0xC00E002F [2]1364.18a0 03/22/2006-18:58:42.954 [rt ShouldSignMessage] Info:RT: ShouldSignMessage = true [2]1364.18a0 03/22/2006-18:58:42.954 [rt HandleSignature] Info:RT: HandleSignature, fProtocolSrmp = 0, fProtocolMsmq = 1 [2]1364.18a0 03/22/2006-18:58:42.954 [rt CalcSignutureTypes] Info:RT: SignutureTypes, MQMSG_AUTH_LEVEL_ALWAYS(read registry): ulAuthLevelMsmq = 2 [2]1364.18a0 03/22/2006-18:58:42.954 2042 [LogMsgHR] ERROR: rt/message 164 HRESULT: 0xC00E0030 [2]1364.18a0 03/22/2006-18:58:42.954 [rt RTpSendMessage] ERROR:Failed to handle signature. HRESULT=C00E0030 Note The Msmq.log file is the log file for the MSMQ service. This file is located in the %WinDir%\Debug folder.

<div class="references_section">