Delen via


[Nieuwsbrievenarchief ^] [< Volume 1, Getal 1] [Volume 1, Getal 3 >]

The Systems Internals Newsletter Volume 1, Number 2

http://www.sysinternals.com


15 mei 1999 - In dit probleem:

  1. WAT IS ER NIEUW IN INTERNE SYSTEMEN

    • SDelete
    • Win2K-update voor BlueScreen Screen Saver
    • "Linux en de Enterprise"
    • "Binnen NT Utilities"
    • Mijn mei Windows NT Magazine Column
    • Niet zo nieuw spul
  2. INTERN NIEUWS

    • Dr. GUI's Poor Bedside Manners
    • WinDev '99 Oost
    • Numega Driver Works Release Binnenkort
    • Bèta 3 DDK uitgebracht
    • Win2K-spinlocks in wachtrij
  3. WAT KOMT ER AAN DE DAG?

    • Win2K System File Protector (SFP)

SPONSOR: WINTERNALS SOFTWARE

De Systems Internals Newsletter wordt gesponsord door Winternals Software, op het web op http://www.winternals.com. Winternals Software is de toonaangevende ontwikkelaar en provider van geavanceerde systeemhulpprogramma's voor Windows NT/2K. Winternals Software-producten omvatten FAT32 voor Windows NT 4.0, ERD Commander (opstartschijfmogelijkheid voor Windows NT) en NTRecover.

Hallo allemaal,

Welkom bij de tweede editie van de nieuwsbrief Systems Internals. De nieuwsbrief heeft momenteel 2700 abonnees, met abonnementen die nog steeds sterk gaan.

Sinds de laatste nieuwsbrief heeft Microsoft Officieel Windows 2000 Beta 3 uitgebracht. Het buildnummer van de Bèta 3-kernel is 2031, terwijl dat van de eerste release-kernel van NT 4.0 1381 was en NT 3.51 een buildnummer van 1025 had. . Wat ik oneven (en enigszins vervelend) vind, is dat Microsoft het buildnummer telkens wanneer ze een volledige build van het besturingssysteem uitvoeren (elke werkdag), maar het gerapporteerde buildnummer van de kernel weerspiegelt dat van de eerste openbare release. Hoewel het werkelijke buildnummer van de NT 4.0 Service Pack 5-kernel bijvoorbeeld veel hoger is dan 1381, rapporteert de kernel nog steeds 1381 als buildnummer.

De bèta 3-versie van Windows 2000 is bedoeld als wakeup-oproep voor de ontwikkelaarscommunity. Microsoft heeft aangekondigd dat Windows 2000 in oktober zal worden verzonden en dat Beta 3 de functie-volledige versie van wat zal worden verzonden, zodat ontwikkelaars nieuwe producten kunnen gaan schrijven zonder bang te zijn dat dingen veranderen van onder hen.

Windows 2000 wordt geleverd met een aantal nieuwe API's, gelaagde services en kernelverbeteringen. Een wijziging die vooral zichtbaar is voor ontwikkelaars van apparaatstuurprogramma's is dat het BSOD (Blue Screen of Death) is gewijzigd. In eerdere versies van NT toont het BSOD informatie over de koppelingstijd en laadadres voor alle stuurprogramma's op een systeem, evenals een dump van de stack zoals deze bestaat op het moment van de crash. In Windows 2000 worden alleen de stopcode en de bijbehorende adreslijnen (adreslijnen vertalen een of meer van de stopcodeparameters naar locaties binnen apparaatstuurprogramma's) samen met een uitgebreid bericht. Het ondersteuningsbericht stelt voor dat u de instellingen van uw BIOS en harde schijf controleert en het defragmenteren van software en virusscanners uitschakelt om te voorkomen dat de crash opnieuw op gang komt. Microsoft Premier Support Services (PSS) heeft vastgesteld, op basis van hun ervaring en op feedback van klanten, dat de NT 4-stijl BSOD niet nuttig is om de oorzaak van een crash te bepalen.

Ik heb persoonlijk de lijst met geladen stuurprogramma's gevonden, en met name de stackdump, om nuttig te zijn bij het ophalen van foutenrapporten van stuurprogramma's van gebruikers, het is veel eenvoudiger en sneller om deze informatie te verkrijgen dan dat gebruikers een crashdump met meerdere megabyte moeten verzenden. Ik heb de oorzaak van crash vaak geïsoleerd op basis van de stackdump en geverifieerde stuurprogrammaversies die gebruikers hebben geladen op basis van de versie-informatie die wordt weergegeven in de lijst met stuurprogramma's. Ik ben benieuwd wat u denkt: wilt u de NT 4-stijl BSOD zien die naar Windows 2000 is overgedragen, of is de nieuwe BSOD-indeling voldoende? Stuur me een e-mail als u een mening hebt. Ik zal de resultaten van deze informele peiling in de volgende nieuwsbrief rapporteren. Hoewel ik bezig ben met BSOD's, moet u de Windows 2000-update van de ever-populaire Systems Internals BlueScreen Screen Saver bekijken, die in dit probleem wordt behandeld.

Hartelijk dank!

-Merken

WAT IS ER NIEUW IN INTERNE SYSTEMEN

SDELETE

Als onderdeel van Windows NT 4.0 die voldoet aan de beveiligingsclassificatievereisten voor C2, wordt beveiliging voor objecthergebruik geïmplementeerd. Dit betekent dat NT bestanden en geheugenbronnen toepassingen toewijst wanneer de toepassingen de resources voor de eerste keer openen. Hiermee voorkomt u dat een toepassing bijvoorbeeld een groot bestand maakt en de inhoud ervan bekijkt om te zien wat eerder op schijf is opgeslagen. Het hergebruik van objecten is echter niet van toepassing op het beveiligen van resources die toegankelijk zijn voor toepassingen die standaardresourcegerelateerde API's omzeilen of die het besturingssysteem helemaal omzeilen. U kunt bijvoorbeeld een schijfeditor, zoals de DiskProbe van de Resource Kit, gebruiken om de inhoud van niet-toegewezen delen van een schijf te onderzoeken. Hiermee kunt u gegevens zien die eerder deel uitmaken van verwijderde bestanden.

Voor veel omgevingen is een functie voor veilig verwijderen vereist. Met deze functie kunnen gebruikers gevoelige gegevens permanent verwijderen, zodat deze niet zichtbaar zijn door hulpprogramma's die beveiligingsfaciliteiten van het besturingssysteem omzeilen. De komst van efs (Encrypting File System) heeft de noodzaak van een veilige verwijderingsfaciliteit in Windows 2000 gemarkeerd. Wanneer u een eerder niet-versleuteld bestand versleutelt, wist EFS niet de inhoud van schijftoewijzingen die de niet-versleutelde gegevens van het bestand bevatten wanneer de schijftoewijzingen worden vrijgemaakt. Hoewel de actieve versie van een bestand dat u versleutelt beveiligd is, bestaat de oude versie van het bestand nog steeds in de niet-toegewezen gedeelten van een schijf totdat deze wordt overschreven door nieuwe bestandsgegevens die NTFS toewijst aan deze delen.

Om dit gat te vullen, heb ik SDelete (Secure Delete) geschreven. Het is een opdrachtregelprogramma waarmee u niet alleen standaardbestanden veilig kunt verwijderen, maar ook om eerder verwijderde gegevens die aanwezig zijn in de niet-toegewezen delen van een schijf veilig te verwijderen. Daarnaast werkt het met Windows NT/2000 gecomprimeerde, versleutelde en geparseerde bestanden, iets dat het gebruik van de defragmentatie-API vereist. SDelete voldoet aan het Ministerie van Defensie voor het wissen en opschonen van standaard DOD 5220.22-M, zodat u er zeker van kunt zijn dat wanneer u gegevens verwijdert, het voor altijd is verdwenen.

Ik geef SDelete volledige broncode en een beschrijving van hoe het werkt, zodat u kunt zien hoe deze gebruikmaakt van de defragmentatie-API en zodat u mijn claims kunt verifiëren dat uw gevoelige verwijderde gegevens niet kunnen worden hersteld.

U vindt documentatie over de Windows NT/2000-defragmentatie-API op http://www.sysinternals.com/defrag.htm. SDelete downloaden met volledige broncode op http://www.sysinternals.com/sdelete.htm.

WIN2K-UPDATE VOOR SCHERMBEVEILIGING BLUESCREEN

De wijzigingen die Microsoft heeft aangebracht in het NT-opstartscherm en de BSOD-indeling (Blue Screen of Death) in Windows 2000 heeft de Systems Internals BlueScreen Screen Saver een belangrijke update vereist. Ik heb versie 2.0 van de schermbeveiliging uitgebracht om u te blijven voorzien van het uiterste in BSOD-realisme. Het weerspiegelt niet alleen de wijzigingen in de BSOD-indeling, maar ook precies nabootst het opstartscherm van Windows 2000, compleet met draaiende voortgangsstrook- en voortgangsbalkupdates. Het is zo echt dat de schermbeveiliging zelfs ervaren gebruikers en ontwikkelaars van Windows 2000 voor de gek houdt. Natuurlijk presenteert onder NT 4.0 BlueScreen Saver nog steeds de NT 4.0 BSOD en opstartschermen.

Hoe heb ik het opstartscherm van Windows 2000 zo perfect en tegelijkertijd niet in strijd met auteursrechtwetten gemaakt? Ik neem de windows 2000-opstart bitmapafbeeldingen niet op met de schermbeveiliging. In plaats daarvan gebruik ik DirectX om de grafische modus over te schakelen naar dezelfde modus die door Windows 2000 tijdens de opstartreeks wordt gebruikt, en vervolgens verwijst ik naar de bitmapbronnen van het Windows 200-kernelbestand, ntoskrnl.exe. Deze resources (u kunt ze bekijken door de resources van ntoskrnl.exe in Visual Studio te openen) zijn de resources die door de kernel worden weergegeven. Dit is een wijziging van de Windows 9x-manier om dingen te doen waarbij opstartafbeeldingen daadwerkelijk afzonderlijke bestanden zijn. Het ziet er niet uit alsof computer-OEM's de mogelijkheid krijgen om de opstartervaring in Windows 2000 aan te passen...

U kunt de schermbeveiliging van BlueScreen downloaden op http://www.sysinternals.com/bluescreen.htm. Als je een humoristisch verhaal hebt met betrekking tot het misleiden van iemand met de schermbeveiliging, geef het dan door.

In mijn kolom Windows NT Magazine NT Magazine NT Internals van december 1997, 'Inside the Blue Screen', vindt u meer informatie over hoe en waarom BSOD's zijn. Via een koppeling op de pagina Interne publicaties van systemen gaat http://www.sysinternals.com/publ.htmu naar de on-line versie van die kolom. De pagina bevat ook koppelingen naar andere on-line presentaties van artikelen en kolommen die ik heb geschreven.

"LINUX EN DE ONDERNEMING"

De enorme reactie van de Linux-community op mijn artikel in de uitgave van April van Windows NT Magazine over de schaalbaarheidsproblemen van de Linux-kernel heeft het tijdschrift gevraagd om de on-line versie van het artikel te posten op schema. U vindt een koppeling naar het artikel 'Linux en enterprise' in de sectie Artikelen op http://www.sysinternals.com/publ.htm. In het artikel worden verschillende beperkingen beschreven van de huidige release van de Linux-kernel (2.2x), waaronder een gebrek aan een efficiënt mechanisme voor gebeurteniswachtrijen, significante serialisatie van systeemaanroepen, geen asynchrone I/O, en een slechte implementatie van het sendfile (in NT its called SendFile) socket-API. De combinatie van deze beperkingen voorkomt dat Linux kop-naar-hoofd concurreren met NT en andere UNIX's, wat betreft prestaties, op bedrijfstoepassingen zoals webservers, databaseservers en e-mailservers.

"INSIDE NT UTILITIES"

Als u Filemon, Regmon of HandleEx hebt gebruikt en meer wilt weten over wat ze u vertellen en hoe ze worden geïmplementeerd, bent u geïnteresseerd in mijn kolom Windows NT Magazine van februari, 'Inside NT Utilities'. In deze kolom worden de interne kenmerken van deze hulpprogramma's beschreven en voor Regmon en Filemon krijgt u een beetje informatie over de foutcodes en aanvraagtypen die ze registreren tijdens het vastleggen van register- of bestandssysteemactiviteit. Een koppeling naar de on-line versie van dit artikel, die zojuist beschikbaar is, bevindt zich op http://www.sysinternals.com/publ.htm.

MIJN MEI WINDOWS NT MAGAZINE COLUMN

Hebt u zich ooit afgevraagd hoe Windows NT/2000 de inhoud van het register in het geheugen of op schijf organiseert? De huidige (mei) kwestie van Windows NT Magazine bevat mijn kolom 'Inside the Registry', die u dit en meer vertelt. Ontdek bijvoorbeeld hoe het subsysteem van de Kernelmodus van Configuration Manager (het subsysteem dat verantwoordelijk is voor het beheren van het register) sleutels opzoekt, waardegegevens opslaat, het zoeken optimaliseert en de integriteit van de registerbestanden op schijf beschermt. Windows NT Magazine, http://www.winntmag.comis beschikbaar bij Borders and Barnes and Nobles.

NIET ZO NIEUW SPUL

Niet lang nadat Windows 2000 Beta 2 werd uitgebracht, nam ik de checked (foutopsporing) build van het kernelinstallatiekopieënbestand (ntoskrnl.exe), deed een tekenreeks zoeken op de kernel en kwam er een lijst met de namen van bronbestanden die worden gebruikt om de kernel te bouwen. De gecontroleerde build van de NT/2000-kernel bevat talloze Assert-instructies (consistentiecontroles) met de bestandsnaam van het bestand waarin de Assert zich bevindt. Ervan uitgaande dat vrijwel elk bestand van elke significantie in de kernelbron ten minste één Assert bevat, is de lijst redelijk uitgebreid. Het dumpen van de lijst in een Java-script gaf me een mooie verkenner-achtige structuur van de mapstructuur van de Windows 2000-bronstructuur. Bekijk het op http://www.sysinternals.com/nt5src.htm.

INTERN NIEUWS

DR. GUI'S SLECHTE BEDSIDE MANIEREN

In het probleem van maart/april van Microsoft Developer Network News Dr. GUI wordt een vraag gesteld van een lezer waarin wordt gevraagd hoe een stuurprogramma de threads kan affinitiseren (forceren om een specifieke CPU te gebruiken). Dr. GUI reageert dat er geen manier is om het aantal processors op een systeem te bepalen vanaf een stuurprogramma en dat een stuurprogrammathread niet kan zien op welke processor deze wordt uitgevoerd. Helaas heeft Dr. GUI deze diagnose geblazen (misschien moet Dr. GUI zich aan GUI's houden).

De NT-kernel (ntoskrnl.exe) exporteert een variabele met de naam KeNumberProcessors die is gedefinieerd in NTDDK. H als:

extern PCCHAR KeNumberProcessors;

Dit kan rechtstreeks in een stuurprogramma worden verwezen als volgt:

CHAR    i;

for( i = 0; i < *KeNumberProcessors; i++ ) {

    // do processor specific stuff
}

Als u wilt bepalen op welke processor een stuurprogrammathread wordt uitgevoerd, gebruikt u KeGetCurrentProcessorNumber(), een andere kernelexport die niet alleen is gedefinieerd in NTDDK. H, maar is eigenlijk gedocumenteerd in de DDK!

Dr. GUI heeft de verkeerde medicatie voorgeschreven voor deze aandoening, dus laat ik de Dr. beleefd weten via een beleefde e-mail. Verrassend genoeg heeft Dr. GUI het e-mailbericht nooit bevestigd. We zullen zien of de goede Dr. zich verkeert aan de fout in het volgende probleem...

WINDEV '99 OOST

De editie 1999 East Coast van de premier conferentie voor Windows-ontwikkelaars nadert snel. WinDev '99 East vindt plaats op 14-18 juni in de Boston Cambridge Marriot. Een aantal grote namen in Windows-ontwikkeling spreken, waaronder Jeff Richter, Jeff Prosise en Don Box. Ik ben er met Jamie Hanrahan en Brian Catlin in de baan van de apparaatstuurprogramma. Mijn presentaties bevatten een dagelijkse zelfstudie over interne NT-functies, evenals een zelfstudie over het schrijven van Stuurprogramma's voor Windows NT/2K-bestandssysteem en één over geavanceerde problemen met het ontwikkelen van apparaatstuurprogramma's. Kom en zeg hallo!

NUMEGA DRIVER WORKS RELEASE AANSTAANDE

Compuware NuMega Labs staat aan de rand van het vrijgeven van een krachtige nieuwe Windows 9x/NT/2K device driver development kit, DriverStudio. DriverStudio combineert alle bestaande hulpprogramma's voor apparaatstuurprogramma's van NuMega, waaronder DriverAgent, DriverWorks, SoftICE en VtoolsD, en voegt de nieuwe BoundsChecker toe voor stuurprogramma's en FieldAgent (alleen Windows NT/2K).

De versie van het apparaatstuurprogramma van BoundsChecker biedt uitgebreide bewaking van elke kernel-API die uw stuurprogramma gebruikt en u kunt deze gebruiken om de interacties van het stuurprogramma met elk ander apparaatstuurprogramma op het systeem te bewaken. Met FieldAgent kunt u de stuurprogrammaversie van BoundsChecker implementeren op clientsystemen, zodat clients traceringen voor u kunnen verzamelen die u kunt analyseren. Binnenkort beschikbaar als een gratis update voor Klanten van DriverStudio TrueTime voor stuurprogramma's en TrueCoverage voor stuurprogramma's, hulpprogramma's waarmee u uw apparaatstuurprogramma's eenvoudig kunt afstemmen en dekking kunt testen.

Dit pakket is de ultieme driver development kit en ik raad het hartelijk aan (ik ben in het Bèta-programma). Meer informatie vindt u op http://www.numega.com.

BÈTA 3 DDK UITGEBRACHT

In combinatie met de release van Windows 2000 Beta 3 heeft Microsoft gratis de Windows 2000 Beta 3 DDK (Device Driver Kit) beschikbaar gesteld. U kunt de DDK pakken op http://www.microsoft.com/ddk/ddk2kb3.htm. Ik hoop dat de SDK binnenkort zal volgen, omdat er een aantal Win32-API's in bèta 3 zijn die niet zijn gedocumenteerd vanaf de editie van april van MSDN.

WIN2K-SPINLOCKS IN WACHTRIJ

Windows 2000 maakt gebruik van een nieuw type spinlock genaamd een 'in de wachtrij geplaatste spinlock' voor de globale vergrendelingen. De globale vergrendelingen in Windows 2000 zijn hetzelfde als die voor Windows NT 4.0, en omvatten:

  • KiDispatcherLock: de scheduler-databasevergrendeling
  • KiContext-SwapLock: de vergrendeling voor het wisselen van gelezen vlakken
  • MmPfnLock: de databasevergrendeling van het fysieke paginaframe
  • MmSystemSpaceLock: de adresruimtevergrendeling in de kernelmodus
  • CcMasterSpinLock: de globale spinlock van Cache Manager
  • CcVacbSpinLock: de toewijzingsmatrixvergrendeling van CacheBeheer

Op een uniprocessor werken spinlocks precies zoals normale spinlocks. In de multiprocessor-build van NT zijn echter spinlocks in de wachtrij aanzienlijk anders. Net als standaard spinlocks worden spinlocks in de wachtrij geïmplementeerd in de HAL. De kernel roept de HAL-functie KeAcquireQueuedSpinlock aan om een spinlock in de wachtrij te verkrijgen en wordt aangeroepen KeReleaseQueuedSpinlock om een spinlock in de wachtrij vrij te geven. KeAcquireSpinlock en KeReleaseSpinlock, de HAL-functies die de kernel gebruikt voor het verkrijgen en vrijgeven van standaard spinlocks, vereisen het adres van de opgegeven spinlock als parameter. De spinlockfuncties in de wachtrij nemen daarentegen het indexnummer van een globale spinlock. De kernel initialiseert de globale spinlocks in een matrix, waarbij elke spinlock een vooraf gedefinieerd indexnummer heeft dat de kernel gebruikt om ze te identificeren bij de HAL. Daarom kunnen spinlocks in de wachtrij niet worden gedefinieerd en gebruikt door apparaatstuurprogramma's, omdat er geen manier is om de globale spinlockmatrix in de wachtrij te verbeteren.

In Windows 2000 heeft elke processorbesturingsregio (PCR) in een SMP (er is één PCR voor elke processor) een matrix met zoveel vermeldingen daarin als er spinlocks in de wachtrij staan. Elke matrixvermelding bevat twee velden: een aanwijzer naar de spinlock in de wachtrij die overeenkomt met (het veld spinlock) en het veld 'wachtrij'. In de volgende beschrijving, wanneer ik naar de spinlock- en wachtrijvelden verwijst, heb ik het over de velden die zijn gekoppeld aan de matrixvermelding voor de spinlock die wordt verkregen of vrijgegeven.

KeAcquireQueuedSpinlock werkt als volgt: de functie probeert de spinlock te verkrijgen met behulp van de CPU-instructie voor een ingesloten uitwisseling om het adres van de PCR van de huidige processor in de spinlock te plaatsen. Als de spinlock wordt vastgehouden, heeft de functie, als onderdeel van de uitwisselingsbewerking, het adres van de PCR van een andere processor. Vervolgens identificeert de functie zichzelf als 'wachten' door de lage bit van het spinlockveld in een eigen PCR te schakelen. Vervolgens wordt het eigen PCR-adres in het wachtrijveld van de PCR geplaatst dat het uit de spinlock heeft opgehaald. Ten slotte wacht het in een drukke lus totdat de lage bit wordt uitgeschakeld in het spinlockveld wanneer de bit is uitgeschakeld, de huidige processor de spinlock heeft gekregen en het terugkeert naar de aanroeper van de acquire-functie.

Nadat een processor een spinlock in de wachtrij heeft gekregen en de verwerking heeft voltooid die het wilde doen tijdens het vasthouden van de vergrendeling, roept KeReleaseQueuedSpinlockhet aan. KeReleaseQueuedSpinlock kijkt naar het wachtrijveld voor de opgegeven spinlock in de PCR van de huidige processor. Als het wachtrijveld niet nul is, heeft een andere processor daar de PCR in de wachtrij geplaatst. KeReleaseQueuedSpinlock wist de lage bit van het spinlockveld voor de wachtende PCR en wist vervolgens zijn eigen wachtrijveld en retourneert. Door de lage bit in het wachtveld van PCR te wissen, heeft het net de volgende CPU in de lijn gesignaleerd dat het de vergrendeling kan hebben. Als het wachtrijveld nul was, wacht geen andere processor op de vergrendeling en KeReleaseQueuedSpinlock voert gewoon een ingesloten uitwisselingsbewerking uit om de globale spinlock te wissen.

De werking van spinlocks in de wachtrij is een waar processors "line up" wachten op een spinlock die wordt vastgehouden. Elke processor zet zichzelf in de wachtrij door de processor in de rij te vertellen dat deze wacht. Dit biedt een deterministische volgorde voor het verkrijgen van een in de wachtrij geplaatste spinlockprocessors verkrijgen de spinlock in de volgorde waarin ze het aanvragen. Voor standaard spinlocks bestaat er geen dergelijke volgorde. Spinlocks in wachtrij hebben nog een aanzienlijk voordeel. Als processor draait het wachten op het spinlockveld om het lage bit leeg te maken, het draait op geheugen privé naar zijn eigen processor. Wanneer een processor bezet wacht op een standaard spinlock, draait het op de globale spinlock zelf, die wordt gedeeld door alle processors. Spinlocks in de wachtrij hebben dus betere multiprocessorbuskenmerken omdat er geen gedeelde cachelijntoegang is tijdens de drukbezette wachttijd. Bovendien zijn er vanwege de wachtrij-aard van in de wachtrij geplaatste spinlocks doorgaans minder busvergrendelingsbewerkingen dan voor standaard spinlocks wanneer een vergrendeling onder conflicten van verschillende processors valt.

Spinlocks in de wachtrij zijn een van de verschillende verbeteringen die Microsoft heeft aangebracht in de schaalbaarheid van Windows 2000 voor meerdere processen.

WAT KOMT ER AAN DE DAG?

Windows 2000 bevat talloze functies die het toleranter maken voor operatorfouten en verkeerd gemanageerde toepassingen. Een van hen is dat veel van de DLL's en stuurprogramma's onder de %systemroot%\system32 en %systemroot%\system32\drivers directory worden beveiligd door een watchdog genaamd de System File Protector (SFP). U kunt het bestaan ervan controleren door naar die system32 map te gaan en de naam ervan ntoskrnl.exete wijzigen. De watchdog wordt wakker en informeert u dat er manipulatie is gedetecteerd met een beveiligd systeembestand en dat deze wordt hersteld. Als u de map opnieuw controleert, is ntoskrnl.exe deze op magische wijze vervangen. Volgende keer vertel ik je hoe dit werkt.


Bedankt voor het lezen van de systems Internals Newsletter.

Gepubliceerd zaterdag 15 mei 1999 1999 17:15 door ottoh

[Nieuwsbrievenarchief ^] [< Volume 1, Getal 1] [Volume 1, Getal 3 >]