Hi everybody,
I have a customer using Win2K, MQSeries 5.2 and MQAX200.DLL from
VB.NET using interop.
I could get some crash dumps and see that MQAX200.DLL is raising
exceptions from DLLUnregisterServer function.
During analysis I could see that File Version from MQAX200 is
1.0.0.1 when clicking right mouse button and going to Properties.
However, Product Version is 5.2.
Using Dependency Walker I get it from two MQAX200.DLL components
renamed to another name:
MQAX200_MQ_CSD04_BIN.DLL TimeStamp = 11/07/00 FileVer = 1.0.0.1
ProductVer = 1.0.0.1 OS Ver = 4.0
MQAX200_MQ_BIN.DLL TimeStamp = 03/27/02 FileVer = 1.0.0.1
ProductVer = 1.0.0.1 OS Ver = 4.0
Another interesting point is that customer has several entries from
same component with different CLSID in his registry:
[HKEY_CLASSES_ROOT\TypeLib\{B3927DD1-B888-11CF-A5F7-444553540000}\5.1\0\win32]
@="d:\\program files\\mqseries\\bin\\mqax200.dll"
[HKEY_CLASSES_ROOT\CLSID\{EAD87627-BAE7-11CF-8DB7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{8DEC0536-D944-11D1-93C4-0004AC7488CF}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{0029047B-B893-11CF-A5F7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290479-B893-11CF-A5F7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290477-B893-11CF-A5F7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290473-B893-11CF-A5F7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290471-B893-11CF-A5F7-444553540000}\InProcServer32]
@="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
"ThreadingModel"="Both"
From the crash dump he have these components:
interop_mqax200 5.1.0.0 Thu May 09 16:30:30 2002 c:
files.mqax200.dll
inter_mqax200 5.1.0.0 Mon Apr 01 19:17:22 2002 c:
files.mqax200.dll
mqax200 1.0.0.1 Wed Mar 27 04:24:22 2002 d:
Files.dll
I guess mqax200 should be 5.2 as customer told me.
The stack trace during problem occurence is below. Pls, notice that
MQAX200 is raising exceptions:
ChildEBP RetAddr Caller,Callee
0012dab8 7c4ea4e1 KERNEL32!RaiseException+0x56 [D:.c:1382], calling
NTDLL!RtlRaiseException [...asm:83]
0012db00 78007108 msvcrt!_CxxThrowException+0x34, calling
KERNEL32!RaiseException [D:.c:1358]
0012db40 5f48c298 mfc42!CCmdTarget::CallMemberFunc+0x1c8
[oledisp1.cpp:1034], calling msvcrt!_CxxThrowException
0012db4c 7800925d msvcrt!_NLG_Return
0012db6c 78007226 msvcrt!_CallCatchBlock2+0x45, calling
msvcrt!_CallSettingFrame
0012db94 78006d06 msvcrt!CallCatchBlock+0x80, calling
msvcrt!_CallCatchBlock2
0012dbe8 78006c6e msvcrt!CatchIt+0x68, calling
msvcrt!CallCatchBlock
0012dc28 78006b7c msvcrt!FindHandler+0x15b, calling msvcrt!CatchIt
0012dc80 780069fb msvcrt!__InternalCxxFrameHandler+0x91, calling
msvcrt!FindHandler
0012dcb0 780071b7 msvcrt!__CxxFrameHandler+0x26, calling
msvcrt!__InternalCxxFrameHandler
0012dce8 77f8eb70 NTDLL!ExecuteHandler+0x26 [...asm:203]
0012dd0c 77f95160 NTDLL!RtlDispatchException+0x76 [D:.c:213],
calling
NTDLL!RtlpExecuteHandlerForException [...asm:97]
0012dd40 4f3de381 amqzst!rzstMQGET+0x8d1
0012dd64 4f3dea04 amqzst!rzstMQGET+0xf54, calling
KERNEL32!TlsGetValue [D:.c:1912]
0012dd94 77fa1606 NTDLL!KiUserExceptionDispatcher+0xe [...asm:218],
calling NTDLL!RtlDispatchException [D:.c:99]
0012e098 7c4ea4e1 KERNEL32!RaiseException+0x56 [D:.c:1382] ====>
Exception Code e06d7363 cxr@12ddcc exr@12ddac
0012ddb4 7c4ea4e1 KERNEL32!RaiseException+0x56 [D:.c:1382], calling
NTDLL!RtlRaiseException [...asm:83]
0012de80 7c4ea4e1 KERNEL32!RaiseException+0x56 [D:.c:1382], calling
NTDLL!RtlRaiseException [...asm:83]
0012df44 77f92b8a NTDLL!LdrGetProcedureAddress+0x17 [D:.c:875],
calling NTDLL!LdrpGetProcedureAddress [D:.c:916]
0012df5c 7c4ee6e5 KERNEL32!GetProcAddress+0x41 [D:.c:1180], calling
NTDLL!LdrGetProcedureAddress [D:.c:871]
0012df64 7c4ee6f7 KERNEL32!GetProcAddress+0x4f [D:.c:1185], calling
KERNEL32!BasepMapModuleHandle [D:.c:34]
0012df84 791ebb32 mscorwks!NDirect::NDirectGetEntryPoint+0xbb
[e:.cpp:226]
0012dfa8 791ebab4 mscorwks!NDirect::NDirectGetEntryPoint+0x38
[e:.cpp:200]
0012dfbc 77fcc780 NTDLL!RtlAllocateHeap+0x582 [D:.c:1802], calling
NTDLL!RtlpUpdateIndexInsertBlock [D:.c:7287]
0012dfc0 77fcc59d NTDLL!RtlAllocateHeap+0x73e [D:.c:1918], calling
NTDLL!RtlLeaveCriticalSection [...asm:271]
0012dfc4 77fcc5b4 NTDLL!RtlAllocateHeap+0x8af [D:.c:2160], calling
NTDLL!RtlAllocateHeap+0x89a [D:.c:2154]
0012dff8 7b3a0d70 (stub for
Microsoft.Win32.NativeMethods.CreateProcess), calling 001373d0
0012e008 77f87bdd NTDLL!RtlpFreeDebugInfo+0x52 [D:.c:203], calling
NTDLL!RtlpFreeDebugInfo+0x63 [D:.c:199]
0012e034 7c4fc20d KERNEL32!LocalFree+0x43 [D:.c:534], calling
NTDLL!RtlFreeHeap [D:.c:3091]
0012e060 77fcc780 NTDLL!RtlAllocateHeap+0x582 [D:.c:1802], calling
NTDLL!RtlpUpdateIndexInsertBlock [D:.c:7287]
0012e064 77fcc59d NTDLL!RtlAllocateHeap+0x73e [D:.c:1918], calling
NTDLL!RtlLeaveCriticalSection [...asm:271]
0012e068 77fcc5b4 NTDLL!RtlAllocateHeap+0x8af [D:.c:2160], calling
NTDLL!RtlAllocateHeap+0x89a [D:.c:2154]
0012e08c 77fcc780 NTDLL!RtlAllocateHeap+0x582 [D:.c:1802], calling
NTDLL!RtlpUpdateIndexInsertBlock [D:.c:7287]
0012e090 77fcc59d NTDLL!RtlAllocateHeap+0x73e [D:.c:1918], calling
NTDLL!RtlLeaveCriticalSection [...asm:271]
0012e0a8 7c4ea4e1 KERNEL32!RaiseException+0x56 [D:.c:1382], calling
NTDLL!RtlRaiseException [...asm:83]
0012e0c0 5f402518 mfc42!CString::AllocBuffer+0x29 [strcore.cpp:97],
calling mfc42!CFixedAlloc::Alloc [fixalloc.cpp:45]
0012e0d8 5f403910 mfc42!CString::AssignCopy+0x1a [strcore.cpp:316],
calling msvcrt!memcpy [intel.asm:109]
0012e0f0 78007108 msvcrt!_CxxThrowException+0x34, calling
KERNEL32!RaiseException [D:.c:1358]
0012e130 5f48cbad mfc42!AfxThrowOleDispatchException
[oledisp1.cpp:1578], calling msvcrt!_CxxThrowException
0012e154 4f571199 mqax200!DllUnregisterServer+0x1c03, calling
mfc42!AfxThrowOleDispatchException [oledisp1.cpp:1571]
0012e2d0 4f58765a mqax200!DllUnregisterServer+0x180c4, calling
NTDLL!RtlEnterCriticalSection [...asm:85]
0012e2d4 4f5876a5 mqax200!DllUnregisterServer+0x1810f, calling
NTDLL!RtlLeaveCriticalSection [...asm:271]
0012e2e4 4f58644d mqax200!DllUnregisterServer+0x16eb7, calling
mqax200!DllUnregisterServer+0x180d2
0012e30c 4f57165d mqax200!DllUnregisterServer+0x20c7, calling
mqax200!DllUnregisterServer+0x1ba2
0012e32c 4f57de58 mqax200!DllUnregisterServer+0xe8c2, calling
mqax200!DllUnregisterServer+0x2062
0012e368 5f418c24 mfc42!_AfxDispatchCall+0x10 [olecall.cpp:43]
0012e378 5f418974 mfc42!CCmdTarget::CallMemberFunc+0x133
My questions are:
1- Why file version from MQAX200 is 1.0.0.1?
2- How can I have sure that MQAX200 is version 5.2?
3- Is there a known bug about MQAX200 related to the stack above?
One possibility I consider is that customer could have been
installing MQSeries SDK over a MQSeries Server installation, replacing
MQAX200.DLL version. Another possibility is some kind of
incompatibilities in resource file from MQAX200 v5.2.
Anyway, my first idea is to proof that customer is using two
different versions from MQAX200 as Dependency Walker showed me and I
want to have sure about MQAX200.DLL version that customer is using.
Tks a lot,
Roberto
Dino Chiesa [MSFT] - 28 Aug 2003 20:21 GMT
MQAX200.DLL is distributed by IBM. they ought to be the source.
Here's what I know.
initially, MQAX200.DLL was delivered as a "supportpac" by IBM. The number
of the supportpac was MA7B.
http://www-3.ibm.com/software/integration/support/supportpacs/product.html
At some point the function offered by MA7B "graduated" into being part of
the MQSeries product. I am not sure if this was v5.1. It certainly
happened no later than MQ v5.2. Check the release notes of the product to
be sure. At some time, MA7B was withdrawn - you now can only get this
function on the MQSeries CD.
I *believe* the MQAX200.DLL retained its 1.0.0.1 version number through at
least MQ V5.2. Remember, at this point, MQAX200.DLL is part of the MQSeries
product.
The MQAX200.DLL I have with MQ v5.2 has the same timestamp as yours. It has
this for an md5sum:
52d7272c87e9c4bf703b14e36175525
I don't understand the exception you are getting.
When and how do you generate this exception?
Do you have a small test case?
-Dino
<Microsoft/>
> Hi everybody,
>
[quoted text clipped - 16 lines]
> Another interesting point is that customer has several entries from
> same component with different CLSID in his registry:
[HKEY_CLASSES_ROOT\TypeLib\{B3927DD1-B888-11CF-A5F7-444553540000}\5.1\0\win3
2]
> @="d:\\program files\\mqseries\\bin\\mqax200.dll"
[HKEY_CLASSES_ROOT\CLSID\{EAD87627-BAE7-11CF-8DB7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{8DEC0536-D944-11D1-93C4-0004AC7488CF}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{0029047B-B893-11CF-A5F7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290479-B893-11CF-A5F7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290477-B893-11CF-A5F7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290473-B893-11CF-A5F7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{00290471-B893-11CF-A5F7-444553540000}\InProcServer
32]
> @="d:\\PROGRA~1\\mqseries\\bin\\mqax200.dll"
> "ThreadingModel"="Both"
[quoted text clipped - 118 lines]
> Tks a lot,
> Roberto