13
- для виконання функції задіюється сервер csrss, для чого йому
посилається повідомлення (крок 2a, за яким зазвичай ідуть
кроки 2b і 2c);
- даний виклик транслюється в системний сервіс (системний
виклик), який зазвичай обробляється в модулі ntdll.dll (кроки
3a і 3b). Наприклад Win32-функція ReadFile виконується за
допомогою недокументованого сервісу NtReadFile.
Деякі функції (наприклад, CreateProcess) вимагають виконання
обох останніх пунктів.
У перших версіях ОС Windows практично всі виклики Win32
API виконувалися, дотримуючись маршруту 2 (2a, 2b, 2c). Після
того, як істотна частина коду системи для збільшення продуктив-
ності була перенесена в ядро (починаючи з Windows NT 4.0), ви-
клики Win32 API, як правило, йдуть безпосередньо по 3-му (3a,
3b) шляху, минувши підсистему оточення Win32. У даний час
лише невелика кількість викликів виконується по довгому 2-му
маршруту.
Окрім перерахованих, найбільш важливих dll-бібліотек, у сис-
темному каталозі system32 є велика кількість інших dll-файлів. У
даний час кількість викликів API складає кілька десятків тисяч.
Особливості створення Windows-додатків
Розглянемо коротко відмінності ОС MS-DOS та Windows.
Операційні системи MS-DOS і Windows підтримують дві абсолю-
тно різні ідеології програмування. Програма DOS після свого за-
пуску повинна бути постійно активною. Якщо їй що-небудь необ-
хідно, наприклад, отримати чергову порцію даних із пристрою
введення-виведення, то вона сама повинна виконувати відповідні
запити до операційної системи. При цьому програма DOS працює
за певним алгоритмом, вона завжди знає, що і коли їй необхідно
робити. У Windows все навпаки. Програма пасивна. Після запус-
ку вона очікує, коли їй приділить увагу операційна система. Опе-
раційна система робить це посиланням спеціально оформлених
груп даних, які називаються повідомленнями (Messages). Повід-
омлення можуть бути різного типу, вони функціонують у системі
достатньо хаотично, і програмний додаток не знає, якого типу
повідомлення прийде наступним. Звідси випливає, що логіка по-