У роботі TN3270 порушення прав доступу до ntdll! RtlFreeHeap


Причини


Microsoft SNA Server 3.0 TN3270 Server може виникнути несподівано порушення прав доступу. Якщо 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. DLL, було встановлено на комп'ютері Windows NT, де виконував TN3270 сервера. MSVCRT40. Бібліотека DLL, підтримує "С" виконання функції, яка може використовуватися і розповсюджується програми Windows NT третіх сторін, створені з використанням Microsoft Visual C++. Якщо встановити MSVCRT40 до програми сторонніх виробників. DLL та замініть на на комп'ютері інстальовано версію Windows NT 4.0 (або SNA Server 3.0), це може призвести до порушення прав доступу TN3270 вище.


До таких Microsoft VC + + DLL відправлені Windows NT 4.0 (і SNA Server 3.0). "Базовий" і "Версія файлу" можна переглянути за допомогою програми "ЗАЛЕЖИТЬ" або програми, клацніть правою кнопкою на кожному DLL, у Windows NT 4.0 "Мій комп'ютер".


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 Server виявлена під час наступних 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. Виконання команди "шлях", щоб перевірити поточний шлях системи.
  2. Знайдіть вище DLL, що існують всі екземпляри, у шляху до системи (Зверніть увагу, що системний шлях може становлять кілька дисків).
  3. Запустіть програму для в ЗАЛЕЖНОСТІ від цих DLL і перевірте їх версій зі списком зазначену вище (який список версій, які входять до складу Windows NT 4.0)
  4. Перейменуйте всі версії "старі", може існувати на комп'ютері, і застосування версії Windows NT 4.0 на їх місце. Якщо ж DLL копій у системний шлях, перейменуйте всі копії і залишити в одному екземплярі в каталозі \system32 < ntroot >.

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених на початку цієї статті.