MFC 应用程序在 NTDLL.dll 中崩溃

MFC application Crashes in NTDLL.dll

我有一个基于 MFC 的应用程序。它会在几秒钟后继续寻找文件(使用基于 CreateTimerQueueTimer 的计时器)并执行一些操作。这在 XP 上总是崩溃(原因不明)。此应用程序在 windows 7 和 windows 8 上运行良好。但在 XP 上问题一直存在。

下面是未显示任何帮助的调用堆栈

反汇编截图如下:

编辑 1:

我更改了一些设置并获得了这个新的调用堆栈。但是还是没有得到线索。:

我不明白如何找出崩溃的原因。是否有任何提示或任何方式来跟踪它从反汇编中播种?或者系统的 NTDLL.DLL 文件可能有任何问题?欢迎任何帮助。

分析堆栈后,我意识到可能是定时器回调有问题。我将我的计时器(createtimerqueuetimer 函数)更改为等待线程,问题就解决了。但是仍然有问题需要回答为什么定时器回调在几次调用后崩溃?我只是在 30 秒后设置和重置回调函数中的变量。所以我不怀疑任何与指针相关的问题。

编辑1:

终于找到答案了。我需要改变

void MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)

收件人:

VOID CALLBACK MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)

问题与计时器回调函数有关。通常,CALLBACK 和 WINAPI 被定义为 stdcall,其中默认情况下正常函数使用 cdecl。