Overlayicons Shell Extension Explorer由于静态变量而崩溃

我在项目中扩展了图标覆盖。它是ATL COM DLL。当前有五个图标有其自己的类,该类已在各个类中实现了接口方法。 我使用了一些静态变量,例如临界区对象池。 工作正常。但是,在进行验证时,我每10分钟重启一次机器,并每5分钟重启一次浏览器。 我发现崩溃指向静态变量。我猜想静态变量会在任何正在进行的线程完成之前被销毁,或者可能是未初始化的关键部分。

例如我有五个类,如CmyoverlayIcon1 .... CmyoverlayIcon5     类ATL_NO_VTABLE CmyoverlayIcon2:     public CComObjectRootEx<CComSingleThreadmodel>,     public CComCoClass<CmyoverlayIcon2,&CLSID_myoverlayIcon2>,     public IDispatchImpl<ImyoverlayIcon2,&IID_ImyoverlayIcon2,     &LIBID_OverlayIconLib,/*wMajor =*/ 1,/*wMinor =*/ 0>,     public IShellIconOverlayIdentifier

I am maintaining the object pull of five and guarding static object with the help of static critical section.

struct INIT
{
    INIT()
    {
        InitAll();//Initializes CS
    }

    ~INIT()
    {
        DeInitAll();//Deletes CS.
    }
};

//Just to init/deinit critical section.
static struct INIT temp;

EnterCriticalSection(&s_obCS);  

if (LocateFreeObject(iter))
{
}

After ~8-9 hours it gives me crash with below call stack

PROBLEM_CLASSES: 

ID:     [0n292]
Type:   [@accESS_VIOLATION]
Class:  Addendum
Scope:  BUCKET_ID
Name:   Omit
Data:   Omit
PID:    [Unspecified]
TID:    [0x1408]
Frame:  [0] : ntdll!RtlpWaitOnCriticalSection

ID:     [0n265]
Type:   [INVALID_POINTER_WRITE]
Class:  Primary
Scope:  BUCKET_ID
Name:   Add
Data:   Omit
PID:    [Unspecified]
TID:    [0x1408]
Frame:  [0] : ntdll!RtlpWaitOnCriticalSection

ID:     [0n290]
Type:   [NULL_CLASS_PTR_WRITE]
Class:  Primary
Scope:  DEFAULT_BUCKET_ID (Failure Bucket ID prefix)
        BUCKET_ID
Name:   Add
Data:   Omit
PID:    [0xebc]
TID:    [0x1408]
Frame:  [0] : ntdll!RtlpWaitOnCriticalSection

BUGCHECK_STR:APPLICATION_FAULT_NULL_CLASS_PTR_WRITE_INVALID_POINTER_WRITE

PRIMARY_PROBLEM_CLASS:APPLICATION_FAULT

LAST_CONTROL_TRANSFER:从00007ff90393b5f6到00007ff9039272a6

STACK_TEXT:
00000000 0697efd0 00007ff9 0393b5f6:00000000 06f502b4 00000000 06f50000 00000000 fffffffa 00000000 07129280:ntdll!RtlpWaitOnCriticalSection + 0xa6 00000000 0697f0b0 00007ff9 0393b440:00000000 00000000 00000000 06f50f00 00000000 0622f3d0 00000000 06f50000:ntdll!RtlpEnterCriticalSectionContended + 0x1a6 00000000 0697f110 00007ff8 e8d82e87:00000000 00000050 00000000 06f50cc0 00000000 00360062 00000000 00000000:ntdll!RtlEnterCriticalSection + 0x40 00000000 0697f140 00007ff8 e8d7931c:00000000 0697f468 00000000 00000040 00000000 0000001f 00000000 71c5cc87:OverlayIcon!CShellObjFactory :: GetFCObject + 0x67 00000000 0697f2c0 00007ff8 e8d79673:00000000 00000001 00000000 05378fb0 00000000 0000000e 00007ff9 0393aa9e:OverlayIcon!IfClassTypeMatching + 0x2c 00000000 0697f4c0 00007ff9 03110e45:00000000 071270b8 00000000 05378fb0 00000000 00000030 00007ff9 0310448d:OverlayIcon!CmyoverlayIcon2 :: IsMemberOf + 0xc3 00000000 0697f550 00007ff9 03110d16:00000000 05327ce0 00007ff9 030a3315 00000000 80004005 00000000 0697f7d0:shell32!CFSIconOverlayManager :: _ GetFileOverlayInfo + 0x111 00000000 0697f630 00007ff9 011f5681:00000000 00000000 00000000 0697f6e8 00000000 0436e580 00000000 00000000:shell32!CFSIconOverlayManager :: GetFileOverlayInfo + 0x46 00000000 0697f670 00007ff9 012713b0:00000000 00000000 00000000 053c1530 00000000 00000000 00000000 00000000:windows_storage!CFSFolder :: _ GetOverlayInfo + 0x179 00000000 0697f730 00007ff9 01267342:00000000 7fffffff 00007ff9 03830000 00000000 053c29c0 00007ff9 0395fc11:windows_storage!CDesktopFolder :: GetOverlayIndex + 0x50 00000000 0697f780 00007ff9 011f014b:00007ff9 0161ea18 00000000 00000003 00000000 0547c870 00000000 00000000:windows_storage!CRegFolder :: GetOverlayIndex + 0x82 00000000 0697f7b0 00007ff9 011ef896:00000000 05376880 00000000 00000000 00000000 05376300 00000000 053b88d8:windows_storage!CIconOverlayTask :: DispatchTasks + 0xdb 00000000 0697f830 00007ff9 01260bb1:00000000 00000001 00000000 0547cb00 00000000 00000000 00000000 0436b450:windows_storage!CIconOverlayTask :: InternalResumeRT + 0x126 00000000 0697f8c0 00007ff9 012494c4:00000000 00000ebc 00000000 054d3480 00000000 054d3470 00000000 0000000d:windows_storage!CRunnabletask :: Run + 0xc1 00000000 0697f910 00007ff9 01249105:00000000 0429b390 ffffffff fffffffe 00000000 00000000 ffffffff fffffffe:windows_storage!CShellTask​​ :: TT_Run + 0x3c 00000000 0697f940 00007ff9 01248fe5:00000000 0429b390 00000000 0429b390 00000000 00000000 00007ff9 0395fc11:windows_storage!CShellTask​​Thread :: ThreadProc + 0xdd 00000000 0697f9f0 00007ff9 038626f6:00000000 00000000 00000000 00000000 0000e037 0f6ca824 00000000 00300008:windows_storage!CShellTask​​Thread :: s_ThreadProc + 0x35 00000000 0697fa20 00007ff9 0394f6d5:00000000 0541ebf0 00000000 008010e8 00000000 00000001 00000000 0000000b:SHCore!ExecuteWorkItemThreadProc + 0x16 00000000 0697fa50 00007ff9 03954634:00000000 00000000 00000000 0406d320 00007ff9 038626e0 00000000 008010e8:ntdll!RtlpTpWorkCallback + 0x165 00000000 0697fb30 00007ff9 025c7bd4:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000:ntdll!TppWorkerThread + 0x8d4 00000000 0697fef0 00007ff9 0398ced1:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000:kernel32!BaseThreadInitThunk + 0x14 00000000 0697ff20 00000000 00000000:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000:ntdll!RtlUserThreadStart + 0x21

注意:如果我评论静态DeleteCriticalSection()调用,那么它将解决我的问题。 我在一些地方走了几步,发现了破坏的顺序,并将sleep(5000)放在ATL COM的DllCanUnloadNow()中,没有发现崩溃。

非常感谢您的帮助。

supercow0000 回答:Overlayicons Shell Extension Explorer由于静态变量而崩溃

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3012891.html

大家都在问