Ã... tkomstfel i ntdll TN3270 misslyckas! RtlFreeHeap


Symptom


Microsoft SNA Server 3.0 TN3270-servern misslyckas avslutas med ett åtkomstfel. Om loggfilen DRWTSN32. EXE är konfigurerad som standard Windows NT debugger, loggas en post i < ntroot > \DRWTSN32. LOGGFILEN på följande sätt:



Application exception occurred:
App: exe\tn3servr.DBG <process ID>
When: <date / time >
Exception number: c0000005 (access violation)
Följande är exempel på olika rutiner och stackspår som får anges när problemet uppstår (Observera att alla fel visar en uppringande ntdll-rutin! 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
* eller *

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
* eller *

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
Med felsökaren NTSD kopplade kan stackspårningen bero på följande fel:


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

Orsak


Det här problemet uppstod efter en felaktig version av MSVCRT40. DLL-filen har installerats på Windows NT-dator där TN3270-Server kördes. MSVCRT40. DLL-filen stöder ”C” runtime library funktioner som kan användas och distribueras av tredje parts Windows NT-program som utvecklats med Microsoft Visual C++. Om ett program från tredje part händer att installera MSVCRT40. DLL-filen och Ersätt versionen installerad med Windows NT 4.0 (eller SNA Server 3.0), detta kan leda till TN3270 åtkomstfelen som beskrivs ovan.


Följande Microsoft VC ++ dll-filens levererades med Windows NT 4.0 (och SNA Server 3.0). ”Base” och ”filversion” kan visas med hjälp av programmet ”beroende” eller genom att högerklicka på varje DLL som använder Windows NT 4.0 ”datorn” program:


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
Åtkomstfel TN3270-Server observerades när följande MSVCRT40. DLL-filen har installerats på datorn av ett program från tredje part (med andra DLL matchande versioner ovan):


Module Date Time Size Base File Version

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

Lösning


Om en gammal version av MSVCRT40. DLL finns i systemsökvägen, ska ändras till den här versionen och standardversionen ingår i Windows NT 4.0 ska återställas. Här är en process som du använder för att lösa problemet:
  1. Kör kommandot PATH för att kontrollera aktuella systemsökvägen.
  2. Leta upp alla förekomster av den ovannämnda DLL-filer som finns i systemsökvägen (Observera att systemsökvägen kan sträcka sig över flera enheter).
  3. Kör beror program mot dessa DLL-filer och kontrollera versionerna mot listan över dokumenterade ovan (som visar en lista över versioner som ingår i Windows NT 4.0)
  4. Byt namn på alla ”gamla” versioner som kan finnas på datorn och använda Windows NT 4.0-versioner i stället. Om flera kopior av samma DLL-filen finns i systemsökvägen, byta namn på alla dubbletter och lämna en instans i katalogen \system32 för < ntroot >.

Status


Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i början av denna artikel.