2010-02-08 5 views
0

동일한 코드의 시간 함수가 XP에서는 충돌하지만 Windows 2003 시스템에서는 정상적으로 실행됩니다. 어떤 아이디어? 크래시 덤프에서Windows에서 SystemTimeToTzSpecificLocalTime 충돌 xp

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 + 0x17을

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

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

,363,210

감사의 SystemTimeToTzSpecificLocalTime 개까지 모든 기능이 성공인지 아닌지 확인하기 위해 GetLastError 전화를 추가 Mithuna

답변

2

보십시오. 그것은 당신에게 약간의 힌트를 줄 것입니다.

+0

GetLastError는 FileTimeToSystemTime이 0을 반환하고 오류를 형식화 한 출력이 매개 변수가 잘못되었음을 보여줍니다. 매개 변수가 틀리다고는하지만 크래시 또는 힙 손상을 유발 한 원인이 무엇인지 궁금합니다. 감사. – mithuna

1

스택 프레임의 __report_gsfailure가 중요합니다. 이것은 보안 오류가 감지되었을 때 호출되는 CRT 기능입니다. MSVC 컴파일러의/GS 명령 줄 옵션을 검토하십시오. 가장 일반적인 원인은 손상된 스택 프레임입니다.

나는이 사고에 대한 코드 스 니펫에서 명백한 이유가 없으므로 이미 Windows 내부에 깊이 중첩되어 있습니다. 레지스트리 손상으로 인해 버퍼 오버플로가 발생할 수 있습니다. SysInternals의 ProcMon 유틸리티를 사용하여 어디에서 정보를 찾을 수 있습니까?

관련 문제