Toegangsfout in ntdll TN3270 mislukt! RtlFreeHeap


Symptomen


Microsoft SNA Server 3.0 TN3270 Server kunnen onverwacht worden afgebroken met een toegangsfout. Als DRWTSN32. EXE is geconfigureerd als standaard foutopsporingsprogramma Windows NT, wordt een vermelding geregistreerd in het < ntroot > \DRWTSN32. LOGBOEKBESTANDEN als volgt:



Application exception occurred:
App: exe\tn3servr.DBG <process ID>
When: <date / time >
Exception number: c0000005 (access violation)
Hier volgen voorbeelden van verschillende routines en stacktraces die kunnen worden aangegeven wanneer dit probleem zich voordoet (Let erop dat alle fouten een het aanroepen van routine van ntdll geven! 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
* of *

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

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
Met de bijgevoegde NTSD foutopsporing kan de stacktrace duiden op de volgende fout:


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

Oorzaak


Dit probleem werd veroorzaakt na een verkeerde versie van MSVCRT40. DLL-bestand is geïnstalleerd op de Windows NT-computer waarop de TN3270 Server is uitgevoerd. MSVCRT40. DLL-bestand ondersteunt 'C' runtime library functies die kunnen worden gebruikt en gedistribueerd door derden Windows NT-toepassingen die zijn ontwikkeld met Microsoft Visual C++. Als een toepassing van derden gebeurt MSVCRT40 installeren. DLL-bestand en vervangen de versie moet worden geïnstalleerd door Windows NT 4.0 (of SNA Server 3.0), dit kan leiden tot toegangsfouten TN3270 hierboven beschreven.


De volgende Microsoft VC ++ DLL's worden geleverd door Windows NT 4.0 (en SNA Server 3.0). 'Base' en 'Versie' kan worden weergegeven met behulp van het programma "Afhankelijk" of programma door met de rechtermuisknop op elk dll-bestand met behulp van de Windows NT 4.0 'Mijn Computer':


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
De toegangsfout TN3270 Server werd waargenomen bij de volgende MSVCRT40. DLL-bestand is op het systeem geïnstalleerd door een toepassing van derden (met de andere DLL overeenkomt met de bovenstaande versies):


Module Date Time Size Base File Version

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

Oplossing


Als u een oude versie van MSVCRT40. DLL-bestand bevindt zich in het systeempad, deze versie moet worden gewijzigd en de standaard opgenomen in Windows NT 4.0-versie opnieuw moet worden toegepast. Hier is het gebruik van dit probleem op te lossen:
  1. Voer de opdracht pad het systeempad van het huidige te controleren.
  2. Zoek alle exemplaren van de bovenstaande DLL's die aanwezig zijn in het systeempad (Let erop dat het systeempad meerdere schijven kan beslaan).
  3. Gedocumenteerd uitvoeren de DEPENDS.exe programmeren op basis van deze DLL's en controleert u de versies op de lijst hierboven (waarop de versies die zijn opgenomen in Windows NT 4.0)
  4. De naam van de "oude" versies die kunnen bestaan op de computer en de versies van Windows NT 4.0 op de plaats van toepassing. Als er meerdere exemplaren van dezelfde DLL bestaat in het systeempad, wijzig de naam van alle dubbele exemplaren en laat één exemplaar in de < ntroot > \system32.

Status


Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld aan het begin van dit artikel is.