Warum stürzt dieser Code ab, wenn er als eingeschränkter Benutzer ausgeführt wird, aber nicht, wenn er als Administrator des Computers ausgeführt wird?Warum sollte ich in DLLMain ein GPF erhalten, wenn es als eingeschränkter Benutzer ausgeführt wird?
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance,
DWORD dwReason,
LPVOID lpReserved)
{
hInstance;
m_hInstance=hInstance;
return _AtlModule.DllMain(dwReason, lpReserved);
}
Der Code stürzt bei der Rückkehr ... und ich weiß nicht warum.
Ich erhalte:
The instruction at "0x7c90100b" referenced memory at "0x00000034".
The memory could not be "read".
Des Weiteren sieht _AtlModule.DLLMain wie folgt aus:
inline BOOL WINAPI CAtlDllModuleT<T>::DllMain(DWORD dwReason, LPVOID lpReserved) throw()
{
#if !defined(_ATL_NATIVE_INITIALIZATION)
dwReason; lpReserved;
#pragma warning(push)
#pragma warning(disable:4483)
using namespace __identifier("<AtlImplementationDetails>");
#pragma warning(pop)
if (dwReason == DLL_PROCESS_ATTACH)
{
ATLASSERT(DllModuleInitialized == false);
}
return TRUE;
#else
return _DllMain(dwReason, lpReserved);
#endif
}
Wir die ATL-DLL importieren, und versucht, statisch als auch ... kein Glück verbindet.
UPDATE
Mit ProcMon, erhalte ich einen Pufferüberlauf hier:
RegQueryValue HKU \ S-1-5-21-448539723-854245398-1957994488-1005 \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Ordner \ Cache Pufferüberlauf Länge: 144
Was bedeutet das?
Der RegQueryValue-Fehler könnte ein Red Hering sein. Es könnte der erste von zwei Aufrufen sein, wobei der dritte Parameter NULL ist. Dies geschieht, um die erforderliche Puffergröße zu erhalten. Wenn Sie einen erfolgreichen Anruf sehen, können Sie diesen Fehler wahrscheinlich ignorieren. Außerdem zeigt Ihnen ProcMon die Stack-Trace des Berichts IIRC. Versuche, mit dem Debugger dorthin zu gelangen und zu sehen, was passiert. – eran