Windows下抓取程序崩溃的Dump文件 遇到的问题

在Windows环境下,程序崩溃的时候抓取Dump文件,经测试在本机的开发环境下及Win 7环境下
抓取都没有问题,而在Xp和Windows 2003下抓取到的Dump文件都是0KB,这是怎么回事,
有哪位仁兄有这方面经验的还请赐教!

要看你的API是如何生成dump的,可能是用到了win7 OS以后的版本,所以XP,2003不能支持

贴代码 抓取DUMP的代码如下:
#pragma once

#include

#include

#include

#pragma comment(lib, "dbghelp.lib")

inline BOOL IsDataSectionNeeded(const WCHAR* pModuleName)
{
if(pModuleName == 0)
{
return FALSE;

}
WCHAR szFileName[_MAX_FNAME] = L"";
_wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);
if(wcsicmp(szFileName, L"ntdll") == 0)
return TRUE;
return FALSE;

}

inline BOOL CALLBACK MiniDumpCallback(PVOID pParam,

                                  const PMINIDUMP_CALLBACK_INPUT   pInput,

                                  PMINIDUMP_CALLBACK_OUTPUT        pOutput)

{

if(pInput == 0 || pOutput == 0)

    return FALSE;



switch(pInput->CallbackType)

{

case ModuleCallback:

    if(pOutput->ModuleWriteFlags & ModuleWriteDataSeg)

        if(!IsDataSectionNeeded(pInput->Module.FullPath))

            pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);

case IncludeModuleCallback:

case IncludeThreadCallback:

case ThreadCallback:

case ThreadExCallback:

    return TRUE;

default:;

}



return FALSE;

}

inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR strFileName)
{

CTime tm;
tm=CTime::GetCurrentTime();
TCHAR szFileName[255];
_snwprintf(szFileName,sizeof(szFileName),TEXT("GameMatch -%d-%d-%d %d-%d-%d.dmp"),tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond());
MessageBox(NULL,szFileName,NULL,NULL);
HANDLE hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,


    0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);



if((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))

{

    MINIDUMP_EXCEPTION_INFORMATION mdei;

    mdei.ThreadId           = GetCurrentThreadId();

    mdei.ExceptionPointers  = pep;

    mdei.ClientPointers     = FALSE;

    MINIDUMP_CALLBACK_INFORMATION mci;

    mci.CallbackRoutine     = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;

    mci.CallbackParam       = 0;

    MINIDUMP_TYPE mdt       = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |

        MiniDumpWithDataSegs |

        MiniDumpWithHandleData |

        0x00000800 /*MiniDumpWithFullMemoryInfo*/ |

        0x00001000 /*MiniDumpWithThreadInfo*/ |

        MiniDumpWithUnloadedModules);

    MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),

        hFile, mdt, (pep != 0) ? &mdei : 0, 0, &mci);



    CloseHandle(hFile);

}

}