2010-02-08 179 views
0

同一代碼中的時間函數在xp上崩潰,但在Windows 2003計算機上運行正常。有任何想法嗎?從崩潰轉儲Windows xp上的SystemTimeToTzSpecificLocalTime崩潰

TIME_ZONE_INFORMATION tzi; 

    SYSTEMTIME    stStartUTC; 

    SYSTEMTIME    stStart; 

    LPCSTR     lpszZone; 

    BOOL     bStatus; 

    FILETIME*    pFT; 

    DWORD dReturn; 

    pFT = new FILETIME; 

if (pFT) 

{ 

    pFT->dwHighDateTime = 4294967295ul; 
    pFT->dwLowDateTime = 4294962295ul; 

    if (pFT) 
    { 
     FileTimeToSystemTime (pFT, &stStartUTC); 
    } 
    else 
    { 
     GetSystemTime (&stStartUTC); 
    } 


    dReturn = GetTimeZoneInformation (&tzi); 

    bStatus = SystemTimeToTzSpecificLocalTime (&tzi, &stStartUTC, &stStart); 

} 

棧是:

0816e968 7c85a6f2 00000000 00000024 7c85a6f8 KERNEL32 __ report_gsfailure + 0xda

0816ebf8 7c85a788 0816ec10 0816ec70 0000a8f0 KERNEL32 FindRegTziForCurrentYear + 0x1a5

0816ec3c 7c85a7bd 0816ec70 0000a8f0 0816eec4 KERNEL32!CheckDynamicTimeZoneInformation + 0x29

0816ec54 7c85a834 0816ec70 0000a8f0 0816eec4 KERNEL32!GetDynamicTimeZoneInfoForTimeZone + 0×17

0816ee7c 7c83b11c 0000a8f0 00000000 0816eec4 KERNEL32!GetTimeZoneInformationForYear +將0x58

0816f020 14f27e38 0816f05c 0816f03c 0816f04c kernel32!SystemTimeToTzSpecificLocalTime + 0x3c

感謝, Mithuna

回答

2

嘗試添加GetLastError調用來檢查是否在高達每SystemTimeToTzSpecificLocalTime功能成功與否。這應該給你一些提示。

+0

GetLastError顯示FileTimeToSystemTime的返回值爲0,這是一個錯誤,並且錯誤的格式輸出顯示參數不正確。我確信參數是不正確的,但不知道是什麼導致了崩潰或堆損壞。謝謝。 – mithuna 2010-02-09 23:58:24

1

棧幀上的__report_gsfailure非常重要。這是在檢測到安全錯誤時調用的CRT功能。查看MSVC編譯器的/ GS命令行選項。最常見的原因是損壞的堆棧幀。

我看不出有什麼明顯的原因在你的代碼片段中發生這種事故,它已經深深地嵌套在Windows中。可能會導致緩衝區溢出導致註冊表損壞。您應該能夠通過使用SysInternals的ProcMon實用程序找出位置。