1. Windows-käyttöjärjestelmä ja Win32-ohjelmointirajapinta

Tässä luvussa esitellään lyhyesti Windows-käyttöjärjestelmä ja WIn32 API ohjelmoijan näkökulmasta. Luku luo perustan seuraaville luvuille, jotka keskittyvät Win32 APIin esteettömyyden näkökulmasta.

Microsoftin Windows on ylivoimaisesti suosituin käyttöjärjestelmä IBM PC-pohjaisissa, X86-yhteensopivissa mikrotietokoneissa. Alkujaan se oli vain graafinen käyttöliittymä, joka tarvitsi toimiakseen Microsoftin MS-DOS-käyttöjärjestelmän. Version 3 tienoilla Windowsin kehitys haarautui Windows 3.1:een perustuvaan 9X-linjaan (95, 98, ME) ja uuteen NT-linjaan (muut 32-bittiset Windowsit). Eroina 9X- ja NT-linjoissa ohjelmoijan kannalta ovat NT-puolen lisäykset, kuten unicode-merkistön tuki ja turvallisuus (mm. muistinsuojaus, käyttöoikeudet ja muistin nollaaminen varattaessa).

Ohjelmistokehittäjän näkökulmasta tärkeää eivät ole niinkään Windowsien rakenteelliset erot vaan se mitä kummallakin Windows-haaralla on yhteistä. Kumpikin tukee Microsoftin C-pohjaista Win32 ohjelmointirajapintaa (engl. API). Unixista ja monista muista käyttöjärjestelmistä poiketen Win32 API ei ole suora rajapinta järjestelmäkutsuihin vaan suhteellisen muuttumattomana pysyvä, varsinaisten järjestelmäkutsujen päälle rakennettu abstraktiotaso.

Yhteinen API parantaa taaksepäin yhteensopivuutta sillä sen sisäinen toteutus voi muuttua täysin, kunhan rajapinta pysyy ulospäin muuttumattomana. Asian kääntöpuolena järjestelmäkutsuja ei pääse hyödyntämään suoraan esimerkiksi suorituskykyä optimoitaessa. 9X- ja NT-linjat toteuttavat varsinaisen WIn32 APIn hyvin eri tavalla. Petzold mainitsee Windows-kirjassaan, että 9X-linja toteuttaa WIn32 APIn Win16 API-kutsujen kautta (Petzold, 1998, APIs and Memory Models).

Tässä raportissa keskitytään pelkästään Win32 APIin, joten varsinaiset järjestelmäkutsut ja APIn päälle rakennetut oliohierarkiat, kuten MFC, jätetään huomiotta. Loppujen lopuksi MFC ja muut korkeamman tason ohjelmointirajapinnat on todennäköisesti rakennettu suoraan Win32-APIn päälle.

takaisin sisällysluetteloon