Hi,
I am facing crash in ole32.dll and from a long time there is no clue to
me what may be causing this problem. The problem happens only on some
machines (Windows XP SP2) and only after playing VBScript 6-7 times.
The crash is always happening at the same location.
Our application is hosting VBScript the same way as described in
http://support.microsoft.com/kb/221992. If VBscript is played few times
we experience the crash in ole32.dll. Following is the information,
which I could find by analyzing process dump through WinDbg.
1) The thread, which crashes, is started when VB Script is played.
2) Call stack of ole32 thread (Normal running)
039cff1c 7c91d85c ntdll!KiFastSystemCallRet
039cff20 7c8023ed ntdll!NtDelayExecution+0xc
039cff78 7c802451 kernel32!SleepEx+0x61
039cff88 774ce31d kernel32!Sleep+0xf
039cff94 774ce3dc ole32!CROIDTable::WorkerThreadLoop+0x14
039cffa8 774ce444 ole32!CRpcThread::WorkerLoop+0x1e
039cffb4 7c80b683 ole32!CRpcThreadCache::RpcWorkerThreadEntry+0x1b
039cffec 00000000 kernel32!BaseThreadStart+0x37
3) Call stack of ole32 thread at the time of crash:
ChildEBP RetAddr
05aeff94 774ce3ee 0x0
05aeffa8 774ce456 ole32!CRpcThread::WorkerLoop+0x1e
05aeffb4 7c80b683 ole32!CRpcThreadCache::RpcWorkerThreadEntry+0x1b
05aeffec 00000000 kernel32!BaseThreadStart+0x37
This ole32 thread is created by ole32::CacheCreateThread(). The
parameter to this thread is CRPCThread object pointer. CRPCThread
object occupies 20 bytes on Process Heap. First member of this class is
some Event handle and 3rd member is the pointer to
CROIDTable::WorkerThreadLoop function.
Code of CRpcThread::WorkerLoop function, which is last on the call
stack, looks like this:
774ce3d0 mov edi,edi
774ce3d2 push esi
774ce3d3 mov esi,ecx
774ce3d5 cmp dword ptr [esi+0x4],0x0
774ce3d9 jnz ole32!CRpcThread::WorkerLoop+0x67 (774ce434)
774ce3db push ebx
774ce3dc push edi
774ce3dd mov edi,[ole32!_imp__WaitForSingleObjectEx (774b12e0)]
774ce3e3 mov ebx,0x7530
774ce3e8 push dword ptr [esi+0xc]
774ce3eb call dword ptr [esi+0x8] ===========>>> Crashing
Instruction
774ce3ee call dword ptr [ole32!_imp__GetCurrentThread (774b12e8)]
774ce3f4 push eax
Here esi points to CRPCThread Object, 0x8 offset of which contains
address of CROIDTable::WorkerThreadLoop function. When the crash
happens this entry is NULL hence the crash.
Can anyone please help me in pointing out what may be the cause for
this? Why would this entry become NULL?
Please let me know if more information is required by me.
Thanks,
- Saurabh
Archived from group: microsoft>public>vb>ole