TN3270 ntdll에서 액세스 위반으로 인해 실패! RtlFreeHeap


증상


Microsoft SNA Server 3.0 TN3270 서버 액세스 위반이 함께 예기치 않게 실패할 수 있습니다. 경우 DRWTSN32. EXE Windows NT 기본 디버거로 구성 된 < ntroot >에 기록 되는 항목, \DRWTSN32. 다음과 같이 로그 파일:



Application exception occurred:
App: exe\tn3servr.DBG <process ID>
When: <date / time >
Exception number: c0000005 (access violation)
다음은 다양 한 루틴 및 스택 추적 될 수 있는 몇 가지 표시 (노트 모든 실패의 ntdll 호출 루틴을 나타냅니다!이 문제가 발생 하는 경우 RtlFreeHeap).


function: RtlpCoalesceFreeBlocks
FAULT ->77f7cf1b 8908 mov [eax],ecx

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0c09ff14 77f64c12 01450000 0099a2e8 0c09ff40 00000000 ntdll!RtlpCoalesceFreeBlocks
0c09ff44 10201ba4 01450000 00000000 0099a2f0 762b1da9 ntdll!RtlFreeHeap
* 또는 *

function: RtlDestroyHeap
FAULT ->77f7d0d8 8908 mov [eax],ecx

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0bfaff14 77f64c12 01450000 00a71638 0bfaff40 00000000 ntdll!RtlDestroyHeap
0bfaff44 10201ba4 01450000 00000000 00a71640 762b1da9 ntdll!RtlFreeHeap
* 또는 *

function: RtlpInsertUnCommittedPages
FAULT ->77f642fb 8b4d00 mov ecx,[ebp]

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
00e5fcac 77f64ea7 00000000 00ec4000 00066000 00c50000 ntdll!RtlpInsertUnCommittedPages
00e5fcec 77f64c3a 00c50000 00ec3370 0000cf00 001425f8 ntdll!RtlpDeCommitFreeBlock
00e5fd18 0041ad47 00c50000 00000000 00ec3378 0041b22a ntdll!RtlFreeHeap
첨부 된 NTSD 디버거를 사용 하 여 스택 추적 다음과 같은 오류를 나타낼 수 있습니다.


NTSD: access violation
eax=00000000 ebx=00000000 ecx=0ce83040 edx=01450548 esi=0099fea0 edi=01450000
eip=77f64cfe esp=0c09ff2c ebp=0c09ff44 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00010246 ntdll!RtlFreeHeap+0x168:
77f64cfe 8908 mov [eax],ecx ds:0023:00000000=????????

0:013> kb
ChildEBP RetAddr Args to Child
0c09ff44 10201ba4 01450000 00000000 0099fec0 ntdll!RtlFreeHeap+0x168
0c09ffec 00000000 0101b2c0 00000000 00000000 Image@10200000!free+0x17

원인


이 문제의 원인이 MSVCRT40의 일치 하지 않는 버전입니다. TN3270 서버를 실행 하는 Windows NT 컴퓨터에 DLL 설치 되었습니다. MSVCRT40입니다. DLL 사용 되 고 타사 Windows NT 응용 프로그램을 Microsoft Visual C++ 사용 하 여 개발 하 여 분배 하는 'C' 런타임 라이브러리 기능을 지원 합니다. 타사 응용 프로그램을 설치할 MSVCRT40 경우. Windows NT 4.0 (또는 SNA Server 3.0) 버전 설치 DLL 및 바꾸기, 위에서 설명한 TN3270 액세스 위반이 발생할 수 있습니다.


다음 Microsoft VC + + DLL의 Windows NT 4.0 (및 SNA Server 3.0)에 의해 제공 됩니다. "기본" 및 "파일 버전" "종속" 프로그램을 사용 하 여 볼 수 또는 프로그램을 마우스 오른쪽 단추로 클릭 하면 Windows NT 4.0을 사용 하는 각 DLL에 "내 컴퓨터".


Module Date Time Size Base File Version

MSVCRT.DLL 10/14/96 02:38a 267,536 0x779F0000 4.20.0.6201
MSVCRT40.DLL 10/14/96 02:38a 65,024 0x779D0000 4.2000.0.6172
MFC40.DLL 10/14/96 02:38a 924,432 0x762B0000 4.1.0.6139
MSVCIRT.DLL 10/14/96 02:38a 74,752 0x780A0000 4.20.0.6201
TN3270 서버 액세스 위반이 때 관찰 된 다음 MSVCRT40. DLL (일치 하는 다른 DLL 위에 나열 된 버전)는 타사 응용 프로그램이 시스템에 설치 된:


Module Date Time Size Base File Version

MSVCRT40.DLL 9/16/96 07:50a 312,832 0x10200000 4.0.0.5270

해결 방법


하는 경우 이전 버전의 MSVCRT40. DLL 시스템 경로에 있는지,이 버전의 이름을 바꿀 수 있어야 및 Windows NT 4.0에 포함 된 표준 버전은 다시 적용 해야 합니다. 이 문제를 해결 하는 데 프로세스 다음과 같습니다.
  1. 현재 시스템 경로 확인 하려면 PATH 명령을 실행 합니다.
  2. 시스템 경로 (참고 시스템 경로 여러 드라이브에 걸쳐 있을 수 있습니다)에 위의 DLL의 존재의 모든 인스턴스를 찾습니다.
  3. 종속 대상 이러한 DLL에 대 한 프로그램 목록에 대해 버전을 확인 하 고 실행 앞에 제시 된 (나열 하는 Windows NT 4.0에 포함 된 버전)
  4. "이전" 버전을 컴퓨터에 존재 하 고 대신에서 Windows NT 4.0 버전에 적용할 수 있는 이름을 변경 합니다. 시스템 경로에 동일한 DLL 복사본을 여러 개 있으면 모든 중복 복사본 이름을 바꾸고 단일 인스턴스 < ntroot > \system32 디렉터리에 둡니다.

상태


Microsoft는 이 문서의 시작 부분에 나열한 제품에서 문제인지 확인했습니다.