Le fonctionnement de Windows 9x en mode sans échec

Ce mode est mis en oeuvre :

Les séquences du démarrage sont les suivantes :

  1. Windows ignore la BDR, AUTOEXEC.BAT et CONFIG.SYS
  2. Chargement de HIMEM.SYS puis de ifshlp.sys
  3. Récupération des chemins dans MSDOS.SYS
  4. Si les fichiers de Windows sont trouvés, lancement de la commande win /D:m (qui démarre Windows en mode sans échec) et COMMAND.COM est ignoré
  5. Si les fichiers de Windows ne sont pas trouvés, COMMAND.COM est lancé
  6. Quand win /D:m est lancé, Windows cherche le fichier SYSTEM.CB dans le répertoire de Windows. Si ce fichier n'existe pas, il est alors créé. Ce fichier charge les pilotes de périphériques virtuels (VxD) suivants :
mouse=*vmouse
device=*configmg
device=*vwin32
device=*vfbackup
device=*vshare
device=*vcomm
device=*ifsmgr
device=*ios
device=*vfat
device=*vcache
device=*vcond
device=*int13
device=*vxdldr
device=*vdef
device=*dynapage
device=*reboot
device=*vsd
device=*parity
device=*biosxlat
device=*vmcpd
device=*vkd
device=*vdd
device=*ebios
device=*vtdapi
device=*vmpll
woafont=dosapp.fon
  1. Une fois que tous ces VxD sont chargés, et juste avant le chargement du "shell" (habituellement c'est "explorer.exe"), le fichier SYSTEM.CB est détruit et le fichier initial SYSTEM.INI est restauré.
  2. Windows utilise les paramètres initiaux de la BDR ainsi que les fichiers WIN.INI et SYSTEM.INI (sections [boot] et [386Enh])
  3. Le shell redimensionne le bureau en 640x480

Redémarrer Windows sans redémarrer la machine

On peut redémarrer uniquement Windows 95 sans redémarrer entièrement le PC en utilisant la commande Arrêter du menu Démarrer.
Sélectionner l'option Redémarrer l'ordinateur, cliquer sur le bouton Oui tout en maintenant enfoncée la touche Maj.

Le fichier MSDOS.SYS (Windows 95 /98)

Windows 95 (98) comprend un fichier système nommé MSDOS.SYS placé dans la racine de la partition de boot.
Il possède les attributs Lecture seule, Système et Caché (RHS).
Bien que possédant l'extension SYS, affectée habituellement à des fichiers binaires (système d'exploitation, drivers), c'est un fichier texte, possèdant une structure analogue aux fichiers .INI de configuration de Windows (disparaissant peu à peu au profit de la Base de Registres)
Il est composée de 2 sections, contenant chacune les définitions de certains paramètres :

Section Nom des paramètres Signification / Valeurs possibles Valeur par défaut
[Paths] HostWinBootDrv Disque de boot C
WinBootDir Répertoire de Windows
(emplacement des fichiers nécessaires à l'initialisation du système.
Répertoire indiqué
pendant l'installation
WinDir Répertoire de Windows Répertoire indiqué
pendant l'installation
[Options] Autoscan 0 = Scandisk est désactivé complètement au démarrage, même en cas d'erreur sur les disques
1 = Scandisk démarre seulement s'il y a des erreurs.
2 = identique à 1, mais en mode "silencieux" (absence de message d'invite)
1
BootDelay Temps pendant lequel le message
Démarrage de Windows apparaît à l'écran.
2 (secondes)
BootFailSafe 0 = Démarrage normal
1 = Démarrage en mode sans échec (1)
0
BootGUI 0 = Désactive le chargement de l'interface graphique
1 = Chargement de l'interface Windows
(GUI = Graphic User Interface).
1
BootKeys 0 = Désactive les touches de fonctions au démarrage
1 = Utilisation des touches (F4, F5, F6, F8).
1
BootMenu 0 = Désactive menu de démarrage (appui sur F8 pour l'avoir)
1 = Activation systématique du menu de démarrage.
0
BootMenuDefault Option par défaut du menu de démarrage. 1
BootMenuDelay Délai pour sélectionner une option du menu de démarrage 30 (secondes)
BootMulti 0 = Désactive l'option de multi-boot
1 = Active les touches de fonctions F4 et F8
0
BootWarn 0 = Désactive le message d'avertissement de mode sans échec
1 = Active le message
1
BootWin 0 = Windows 95 n'est pas le système d'exploitation par défaut
1 = Force Windows 95 à se charger au démarrage.
1
DoubleBuffer 0 = Double-buffering désactivé
1 = Double-buffering activé (pour les contrôleurs
qui le nécessite, ex: contrôleurs SCSI).
0
DBLSpace 0 = Non chargement de DBLSPACE.BIN.
1= Chargement automatique de DBLSPACE.BIN.
1
DRVSpace 0 = Non chargement de DRVSPACE.BIN.
1= Chargement automatique de DRVSPACE.BIN.
1
LoadTop 0 = Chargement COMMAND.COM / D??SPACE.BIN conventionnel
1 = Chargement COMMAND.COM / D??SPACE.BIN en haut des 640Ko.
1
Logo 0 = Logo animé de Windows95/98 désactivé
1 = Force le logo de Windows 95/98 à apparaître.
1
Network 0 = Absence d'option réseau
1 = Réseau installé. Ajoute une option "Réseau" dans le menu de démarrage
0

Configuration du panneau de configuration

Le lanceur (control.exe) du panneau de configuration de Windows 9x est une application 16 bits, qui fait appel à un fichier .ini (control.ini)
Il sert à passer le contrôle à différentes DLL (ayant l'extension .cpl) propres à un ou plusieurs matériels/fonctionnalités
Il est possible de modifier certaines options du panneau de configuration à l'aide ce fichier, comme :

Il y a plusieurs méthodes pour faire apparaitre une librairie module de configuration dans le panneau de configuration :

  1. Insertion d'une ligne dans la section [MMCPL] de CONTROL.INI :
    [MMCPL]
    .....
    ;le texte à gauche du signe "=" n'a aucune importance
    Ma librairie=d:\tools\mylib.dll
  2. Renommage de la librairie avec l'extension CPL, cette librairie étant placée dans le même répertoire que CONTROL.EXE
  3. Renommage de la librairie avec l'extension CPL, cette librairie étant placée dans le répertoire SYSTEM de Windows

Affectations des lettres de partitions sous DOS et Windows

Sous DOS et Windows 95/98, l'affectation des lettres de disques et lecteurs est TRÈS stricte et offre peu de latitude. Par exemple, un CD viendra TOUJOURS après les partitions des autres disques.

(WINDOWS NT/2000/XP sont beaucoup plus conciliants dans ce domaine)

Voici la séquence d'affectation des lettres par DOS (et Windows 95/98) :

  1. Vérification de tous les périphériques disques installés, et affectation de la lettre A au 1er lecteur de disquette physique trouvé.
  2. Si un 2ème lecteur de disquette physique est trouvé, il lui est affecté la lettre B. S'il n'existe pas, un disque logique B est créé, utilisant le lecteur de disquette physique.
  3. Indépendamment du fait qu'un second floppy existe ou non, la lettre C est affectée à la partition active (et primaire, obligatoirement) du 1er disque dur physique. Puis le système teste la présence d'un 2ème disque dur physique.
  4. Si un 2ème disque dur physique est trouvé, et qu'une partition primaire existe sur ce disque, la lettre D est affectée à cette partition. Et ainsi de suite pour les autres disques physiques éventuellement présents. (S'il existe un 3ème disque dur physique, la partition primaire - si elle existe - se verra affecter la lettre E)
  5. Puis le système retourne au 1er disque dur physique, pour affecter séquentiellement des lettres aux partitions logiques éventuelles (contenues dans une partition étendue). Ce processus est répété séquentiellement autant de fois qu'il y a de disques physiques.
  6. Une fois les partitions logiques traitées, le système retourne au 1er disque dur physique, et affecte en séquence des lettres aux autres partitions primaires éventuelles. Ce processus est répété séquentiellement autant de fois qu'il y a de disques physiques.
  7. Une fois cela effectué, des lettres sont affectées aux lecteurs définis dans le fichier CONFIG.SYS à l'aide de DRIVER.SYS [autre(s) lecteur(s) de disquette externe(s)] ou créés par RAMDRIVE.SYS [disque virtuel].
  8. Enfin, la commande SUSBST, le montage de ressources réseau et la commande MSCDEX (pour les CDROM) affecte (parmi les lettres restantes) des lettres aux répertoires, ressources réseau ou CDROM.

Exemple :
Soit la configuration suivante :

Types de périphériques Unités logiques Lettre
3 lecteurs de disquette 1er lecteur A
2ème lecteur B
3ème lecteur (étant externe, il sera défini à l'aide de DRIVER.SYS) H
2 disques durs physiques 1er disque 1 partition primaire C
1 partition étendue 1ère partition logique E
2ème partition logique F
2ème disque 1 partition primaire D
1 partition étendue 1 partition logique G
1 disque virtuel (RAMDISK) (défini à l'aide de RAMDRIVE.SYS) I
1 lecteur de CDROM (défini à l'aide de CDxxxxx.SYS) J (par défaut) à Z

Pour éviter tout problème dans le nommage des partitions,il faut et il suffit de:

Pour des informations complémentaires, veuillez vous reporter aux articles suivants du support Microsoft :

Si malgré tout vous avez absolument besoin de modifier les assignations de lettres de disque, il existe, sous Windows 9x, un excellent freeware qui permet ces réaffectations : 

Letter Assigner, conçu par Vadim Burtyansky
Il est disponible à l'adresse suivante :
 http://www.v72735.f2s.com/LetAssig/index.html

Voici une capture d'écran de cet utilitaire (prise sur le site de l'auteur) :

Qu'est que "ASPI" ?

ASPI = Advanced SCSI Programming Interface.

C'est une interface développée par ADAPTEC (mais concernant aussi d'autres fabricants) destinée à l'envoi de commandes vers des composants SCSI.

"ASPI" comprend 2 couches de composants :

  1. "ASPI Manager" : de bas niveau, dépendant du systèmed'exploitation et du matériel (p.ex., une carte AHA-1520 est très différente, au niveau électronique, d'une carte AHA-2940)
  2. "ASPI modules" : de haut niveau, indépendants du matériel (utilisés dans les applications qui doivent échanger des informations avec du matériel SCSI). Les commandes utilisées sont les mêmes, que l'on utilise une AHA-1520, une AHA-2940, ou n'importe quelle autre carte.

Par exemple, soit une application qui a besoin d'accéder à un CDROM (SCSI). On a le chainage suivant :
Application Module ASPI ASPI Manager matériel

Pour accéder depuis DOS à un périphérique SCSI, il faut donc charger (au moins) 2 drivers :

  1. ASPI4DOS.SYS ("ASPI" for "DOS" ) : c'est le ASPI Manager !!!
  2. ASPICD.SYS : comme son nom l'indique, le module de gestion du/des CD

Le ASPI Manager varie suivant la carte SCSI utilisée :

Pour être tranquille, on peut tous les inclure dans le fichier config.sys, la carte SCSI reconnaîtra le sien! C'est ce que fait d'ailleurs la disquette de secours créée automatiquement par Windows 98, qui les charge TOUS !
Voici ce qu'on trouve dans le config.sys de cette disquette :

...
device=aspi2dos.sys
device=aspi8dos.sys
device=aspi4dos.sys
device=aspi8u2.sys
device=aspicd.sys /D:mscd001

...

Tous ces fichiers, si on les a égarés, sont contenus dans un exécutable auto-extractible disponible chez ADAPTEC (il contient :ASPI2DOS.SYS, ASPI4DOS.SYS, ASPI7DOS.SYS, ASPIEDOS.SYS, ASPI8DOS.SYS, ASPI8U2.SYS, ASPICD.SYS, ASPIBUF.SYS, ASPIDISK.SYS, MA358.SYS et MCAM18XX.SYS)
Pour plus d'informations, veuillez consulter :

Configuration de plusieurs lecteurs de CD (ATAPI et/ou SCSI)

  1. Dans le fichier config.sys
    Il faut inclure autant de drivers qu'il y a de types (ATAPI ou SCSI) de lecteurs.
    En effet, un driver d'un type donné concerne TOUS les lecteurs de ce type.
    Ainsi, si on dispose sur la même machine, par exemple, de 2 lecteurs ATAPI et 3 lecteurs SCSI , il n'y aura que 2 drivers à charger, 1 pour les lecteurs ATAPI et 1 pour les lecteurs SCSI.
    Dans le cas de lecteurs SCSI, il ne faut pas oublier de charger au préalable le driver de la carte SCSI
    Exemple :
    REM Driver pour les lecteurs ATAPI
    device=oakcdrom.sys /D:CDATAPI 
    ...
    REM Driver de la carte SCSI
    device=aspi8u2.sys
    REM Driver pour les lecteurs SCSI
    device=aspicd.sys /D:CDSCSI 
    ...
  2. Dans le fichier autoexec.bat
    Le montage (affectation à une lettre) des lecteurs s'effectue à l'aide de la commande MSCDEX :
    MSCDEX /D:nom_logique1 [/D:nom_logique2] [/L:premiere_lettre]
    Exemple :
...
lh mscdex /D:CDATAPI /D:CDSCSI /L:K 
...

En reprenant l'exemple précédent, les 2 lecteurs ATAPI, désignés par le nom "CDATAPI" (totalement arbitraire) se verront affecter les lettres K: et L:, quant aux 3 lecteurs SCSI, désignés par le nom "CDSCSI" (lui aussi arbitraire) possèderont les lettres M:, N: et O:.

Le fichier VMM32.VXD (Windows 95/98)

Ce fichier, (sujet parfois de messages d'erreurs!), est situé dans le répertoire \windows\system, et est lu par win.com au moment du démarrage de Windows 95/98

C'est une "compilation" de plusieurs choses :

  1. le "loader" en mode réel
  2. le gestionnaire de machine virtuelle (VMM = Virtual Machine Manager)
  3. un ensemble de drivers virtuels statiques
    (VxD = Virtual x Driver, le "x" signifiant "n'importe quoi" : driver d'écran, de souris, de port,...)

Win.com va regarder également ce qu'il y a comme fichiers VxD présents dans le répertoire \windows\system\vmm32 et les charger. Si un fichier
de ce répertoire se trouve déja inclu dans vmm32.vxd, c'est celui du répertoire qui prime, celui de vmm32.vxd est alors ignoré (utile pour faire des mises à jour).

Les Vxd "typiques" composant le vmm32.vxd sont les suivants :

*biosxlat   *configmg  *dynapage   *ebios    *ifsmgr    *int13     *ios     *parity 
*reboot    *vcache    *vcomm       *vcond    *vdd       *vdef     *vfat    *vfbackup 
*vkd       *vmcpd      *vmouse     *vmpoll   *vsd       *vtdapi    *vwin32  *vxdldr

On retrouve d'ailleurs leurs noms dans le fichier system.ini (section [386Enh]), uniquement pour des questions de compatibilité pour les applications 16 bits (qui ignorent la Base De Registres).

Le chargement des VxD par le VMM va s'effectuer ainsi :

  1. Chargement des drivers de base définis dans la BDR, dans la branche :
    Hkey_Local_Machine\System\CurrentControlSet\Services\VxD
  2. Chargement des autres Vxd appelés par des Vxd définis dans la BDR
  3. Si VMM trouve la valeur "StaticVxD" dans une sous-clef de cette branche, il charge ce VxD et exécute sa phase d'initialisation en mode
    réel. (C'est le cas, p.ex., de DOSMGR, NDIS, SPOOLER,... mais non de WINSOCK, BIOS, ...)
  4. VMM charge les VxD spécifiés dans les lignes "device=*..." de la section [386enh] de SYSTEM.INI seulement s'ils ne figurent pas dans
    VMM32.VXD (cf remarque plus haut)

Si VMM32.VXD est corrompu ou manquant, il faut le recréer en...réinstallant Windows! (Dixit le MSDN). Désolé!

Si c'est au cours de l'installation initiale de Windows, la présence d'un appel à un batch temporaire (suwarn.bat) dans le fichier autoexec.bat va permettre d'éviter de refaire toutes les copies de fichiers.

Qu'est ce que VFAT ?

VFAT = "Virtual File Allocation Table"

Pour simplifier (il doit y avoir 80 articles à ce sujet dans le MSDN!), VFAT est un système interface qui convertit un système PHYSIQUE FAT (12, 16, 32 bits) en un seul "modèle" en mémoire exclusivement 32 bits, que les drivers (disque) soient des 16 bits mode réel ou des 32 bits mode protégé. (pour information, VFAT est apparue avec Windows For Workgroups (3.11))

hand_right.gif (969 octets)VFAT ne remplace donc pas le système de partition  FAT16 ou FAT32, qui concerne seulement la structure physique des partitions, mais au contraire s'y ajoute, en constituant une couche supérieure dans le système de fichiers !

Le système de fichiers VFAT fonctionne donc en 32 bits, avec un cache en mode protégé (VCACHE), lequel remplace l'antique SMARTDRIVE 16 bits en mode réel de DOS et Windows 3.1 (VCACHE sert aussi pour les CDROM et les disques réseau).

VFAT fait partie de l'ensemble appelé "IFS" = "Installable File System" qui se situe entre la couche basse de drivers (physiques) et la couche "noyau" de Windows.
IFS est lui-même composé de 3 couches :

VFAT 32 VCDFS 32
(CDROM)
Redirecteur
réseau

Superviseur Entrées-sorties

Driver de port
(disques (E)IDE)
Couche SCSI
Driver de miniport
(disques SCSI)

Le module VFAT est inclus dans VMM32.VXD, le "super-driver" de Windows 95/98 (sous Windows 3.11, il est constitué du fichier   driver virtuel VFAT.386)
Si Windows ne trouve pas VFAT au démarrage, cela peut vouloir dire au choix que :

Causes Remèdes
le fichier VMM32.VXD est défectueux Réinstaller Windows !
Il est fait référence, dans le fichier config.sys, à une précédente version de ifshlp.sys (Windows 3).
Windows 95 charge automatiquement sa propre version lors du démarrage. Il ne doit donc RIEN y avoir dans le config.sys à ce sujet.
Supprimer toute référence à ifshlp.sys dans config.sys
Le fichier ifshlp.sys est absent du répertoire de Windows Extraire (avec "extract") le fichier ifshlp.sys depuis un fichier .cab du CD de Windows 95/98 :
win95_19.cab pour Windows 95
win98_43.cab pour Windows 98
La section [paths] du fichier msdos.sys est erronée.
Normalement, elle doit contenir quelque chose de la forme :
[Paths]
WinDir=C:\Windows
WinBootDir=C:\Windows
HostWinBootDrv=C
Réécrire cette partie de MSDOS.SYS
Présence du fichier Winboot.ini dans la racine.
Ce fichier n'existe qu'au cours de l'installation de 95. Il est détruit par Windows ensuite.
Supprimer le fichier winboot.ini

A propos de "wininit.ini" et "wininit.exe"

Quand on installe une nouvelle application, l'installeur doit copier un certain nombre de fichiers sur le disque. Si ces fichiers ne sont pas en cours d'utilisation au moment de l'installation, il n'y a pas de problème.Mais si une librairie, un fichier de configuration, un driver, un exécutable, (système ou non), sont ouverts, la copie ne peut pas s'effectuer. De plus, certains fichiers spéciaux comme les drivers virtuels (VXD) ne peuvent être chargés qu'au démarrage de Windows, et intégrés dans le fichier  VMM32.VXD.

L'installeur crée donc le fichier \windows\wininit.ini, dans lequel il écrit tout ce qu'il n'a pas pu copier, et à la fin de la procédure, il affiche le charmant message "Veuillez redémarrer Windows".

Quand on redémarre, IO.SYS se charge, lecture de MSDOS.SYS, affichage éventuel du logo de Windows, puis presque tout de suite, lancement SYSTEMATIQUE du programme \windows\wininit.exe, qui est une application DOS 16 bits.

  1. Wininit.exe commence par chercher le fichier wininit.ini
    - s'il n'existe pas, Wininit.exe se termine
    - s'il existe : il y a affichage à l'écran (en mode texte) du message :
    "Veuillez patienter pendant la mise à jour de vos fichiers de configuration... Cela peut prendre plusieurs minutes" (pour information, ce message est à l'offset 06B9 de wininit.exe)
  2. Il effectue ensuite une lecture de la section [rename]
    Chaque ligne est de la forme "nouveau nom"="ancien nom"
    p.ex. : C:\WINDOWS\SYSTEM\IOSUBSYS\IOMEGA.VXD=C:\WINDOWS\SYSTEM\IOSUBSYS\IOMEGA.VX^
    Cela signifie que l'installeur n'a pas pu remplacer le fichier "IOMEGA.VXD", et l'a copié sous le nom "IOMEGA.VX^" (un nom de fichier qui n'existait pas auparavant)
  3. Il renomme donc "IOMEGA.VX^" en "IOMEGA.VXD" (après avoir supprimé le vieux "IOMEGA.VXD" s'il existe) (dans cet exemple, c'est un driver virtuel, qui n'est pas encore utilisé par Windows, vu l'étape à laquelle on se trouve)
  4. une fois que tout le fichier wininit.ini a été traité, il affiche le message :
    "Mise à jour des fichiers accomplie, poursuite du chargement de Windows" (ce message est à l'offset 0767 de wininit.exe)
  5. Il renomme "wininit.ini" en "wininit.bak", afin qu'au prochain redémarrage de Windows, il n'y ait pas encore le même traitement (ce qui poserait des problèmes, puisque les fichiers ont été renommés, p.ex. "IOMEGA.VX^" n'existe plus)
  6. Il se termine alors, et le démarrage de Windows se poursuit (passage en mode protégé, chargement des VXD, examen de VMM32.VXD,..)

A propos de APPLOG et des fichiers .lgx

"Applog" est une application utilisé par le défragmenteur de Windows 9x pour optimiser l'accès aux applications les plus fréquemment utilisées.
Pour cela, Windows 9x "espionne" en permanence à l'aide du processus
"Task Monitor" (\windows\taskmon.exe) toutes les applications que l'on peut lancer et crée un fichier journal ("log") pour chaque application.
De plus, "Task Monitor" :

Le nom de chaque fichier log est de la forme "application.lgn" dans lequel :

Quand on lance le défragmenteur (defrag.exe), il appelle l'utilitaire cvtaplog.exe lequel vient lire tous les fichiers contenus dans windows\applog, et construit alors un fichier Applog.dtn (un par disque n)
Ce fichier contient des informations sur l'emplacement des clusters concernés,
reprises par defrag.exe, qui va défragmenter en priorité les fichiers des applications les plus usitées, afin qu'ensuite elles démarrent plus rapidement.

En conclusion, on peut parfaitement supprimer sans crainte les fichiers .lgx, mais évidemment l'optimisation de défragmentation se fera moins bien.

Les versions de Windows 95 et 98

Nom de la version N° de version (interne) Date
Windows 95 4.00.950 11/07/95
Windows 95 SP1 4.00.950A 11/07/95
OEM Service Release 1 (OSR1) 4.00.950A 11/07/95
OEM Service Release 2 (OSR2) 4.00.1111* (4.00.950B) 24/08/96
OEM Service Release 2.1 (OSR2.1) 4.03.1212-1214* (4.00.950B) 24/08/96-27/08/97
OEM Service Release 2.5 (OSR2.5) 4.03.1214* (4.00.950C) 24/08/96-18/11/97
Windows 98 4.10.1998 11/05/98
Windows 98 Second Edition 4.10.2222A 23/04/99

Pourquoi SCANDISK est-il lancé parfois au démarrage de Windows?

Tout au début du démarrage de Windows, le programme IO.SYS vérifie des informations stockées sur le(s) disque(s) dur(s) de l'ordinateur, sous la forme de 2 bits nommés "Clean Shutdown" et "Hard Disk Error". Si au moins l'un de ces bits est "ON" (= mis à zéro, on est en logique négative), on est interrogé sur le démarrage de ScanDisk. Si on n'a pas répondu au bout de 60 secondes, ScanDisk démarre.

Ces bits "Clean Shutdown" et "Hard Disk Error" sont les 2 bits de poids faible stockés dans l'entrée de la FAT décrivant le premier cluster.

 

On peut désactiver ou modifier le lancement de SCANDISK à partir du paramètre AUTOSCAN situé dans le fichier MSDOS.SYS

A propos des Ressources Système (GDI et USER)

Principes

La notion de ressources système concerne exclusivement Windows 3.x et Windows 9x/ME, car elle n'a jamais existé sous Windows NT (toute version).
Les ressources désignent ici une réserve spéciale de mémoire (à taille limitée) que Windows alloue pour :

A l'origine (Windows 16 bits), cette mémoire était allouée dans le "heap" (tas de 2 ou 4 fois 64 ko), par la fonction "LocalAlloc" au lieu de la fonction "GlobalAlloc". , avec pour seul intérêt un accès plus rapide.

Quand une application crée une brosse, ou un pinceau (de taille, couleur, style donnés), cela prend de la mémoire dans cette zone réservée. C'est à l'application, et à elle seule, quand elle n'en a plus besoin, que revient le rôle de libérer cette mémoire utilisée. Souvent cette opération est oubliée (défaut de conception), ou ne peut pas s'effectuer (application qui se plante). Les applications 16 bits sont beaucoup plus instables que les 32 bits (les réservations ne sont pas les mêmes)

Les applications de dessin sont évidemment très gourmandes en ressources GDI. Mais elles ne sont pas les seules. Si ça se produit systématiquement, c'est que l'application est mauvaise (= mal conçue). Il n'y a pas beaucoup de remède. Certains utilitaires du type "boosters / nettoyeurs de RAM" (Rambooster p.ex) arrivent parfois (mais pas toujours) à faire un peu le ménage.

Pour oublier ces problèmes de ressources GDI, USER, système ...il faut changer de système d'exploitation, et passer à Windows NT ou 2000 par exemple! 

Les Ressources Système

Comme je l'ai dit plus haut, les mémoires (appelée "heap" = tas) USER et GDI sont des zones limitées (tailles FIXES) prélevées dans la RAM. 
Il y a plusieurs "tas" séparés, pour les applications 16 bits et pour les applications 32 bits, et dans chaque cas il y a un ou plusieurs tas USER (fenêtres et/ou menus) et un tas GDI (pinceaux, brosses, régions, polices,...)

Notation Tas Taille
U16 USER 16 bits 64 ko
G16 GDI 16 bits 64 ko
U32F USER 32 bits pour les fenêtres 2 Mo 
U32M USER 32 bits pour les menus 2 Mo
G32 GDI 32 bits 2 Mo

 (source : Knowledge Base MSDN, article Q190217)

Le pourcentage de ressources Système (affiché dans la boite de dialogue "A propos" de l'explorer de Windows), et communément appelé "Ressources Système", est :

 Exemple (sous Windows 9x) :
Tas Au démarrage
de Windows
Après lancement de
diverses applications
  Utilisation % Libre Utilisation % Libre
U16 8 ko  88% 38 ko 41%
G16 16 ko 75% 40 ko 38%
U32F 20 ko  99% 40 ko 98%
U32M 20 ko 99% 50 ko 97%
G32 24 ko 99% 212 ko 89%
Borne inférieure   75%   38%

Le pourcentage (affiché) de ressources système sera égal à 38 / 75 = 50% 
c'est la fonction 16 bits "GetFreeSystemResources" qui affiche cette valeur 
Ces limites de 64 ko ou 2 Mo sont FIXES, inhérentes à Windows 9X/ME, on ne peut RIEN y faire, c'est comme ça, fini, on ne touche pas, c'est triste! ;+)

Sous Windows NT/W2k, cette notion de ressources N'EXISTE PAS !
Ainsi, la même fonction "GetFreeSystemResources" (16 bits), utilisée EXCLUSIVEMENT par les applications 16 bits, affichera TOUJOURS sous NT/W2k 90 %  de ressources disponibles! 
Mais en fin de compte, elle ne veut rien dire. Elle existe uniquement à des fins de compatibilité pour les applications censées tourner également sous Windows 3.x ou Windows 9x . C'est par exemple ce qu'affiche mon programme SCANBIN (application 16 bits car multi plates-formes), dans la boite de dialogue "A propos".

Logo de démarrage de Windows 9x

Vu sa complexité, ce sujet fait l'objet d'un document séparé

A propos de la quantité de RAM supportée par Windows 9x...

Jamais une rumeur stupide n'a été aussi dure à faire disparaître!

Tout système d'exploitation 32 bits, tel que Windows 95, 98 et ME,
peut adresser
2 ^ 32 octets, soit  4 Go !

Or depuis la sortie de Windows 95, les informations les plus fantaisistes ont couru à propos de la quantité maximale de mémoire vive (RAM) supportée par le système. Les valeurs ont évolué au cours du temps et de la version de Windows (OSR2, 98, 98SE, ME), à savoir 64 Mo, puis 128 Mo, ..., mais dans tous les cas, ce ne sont que des rumeurs infondées.

Il y a quelques années, il existait une certaine limitation d'ordre matériel, comme l'explique Bruno "Scudo" dans la FAQ de Windows 95 (http://www.chez.com/scudo/Faq/Win95.html#64meg)

"[A l'époque] les chipsets (composants de la carte mère) des cartes Pentium (intel 430TX FX et VX) ne pouvaient [mettre en cache] que les premiers 64 Mo. [...]
Comme Windows utilise la mémoire disponible en partant de la fin, il utilisait en priorité la mémoire qui n'est pas accélérée, d'où une légère dégradation des performances."

Vraisemblablement une mauvaise interprétation de cette limitation a été à l'origine de cette légende.

Par ailleurs, des articles (en anglais) de la Base de Connaissances Microsoft ont été traduits de façon erronée.
(Articles Q184447, Q181862, Q83436, Q134503, et Q192397)
NB: le contenu de ces articles a souvent varié au cours du temps, ce qui peut entraîner un sentiment de confusion chez l'utilisateur!

"[...]
SYMPTOMS
If your computer has 1 gigabyte (GB) or more of random-access memory (RAM) installed, Windows may not start."

Toute la subtilité est dans le "may" !!!
Microsoft a écrit (je traduis pour les non-anglicistes) :

"Si votre ordinateur possède 1 Go ou plus de RAM, Windows peut ne pas démarrer"
et non pas :
"Si votre ordinateur possède 1 Go ou plus de RAM, Windows ne peut pas démarrer"

Plus loin, on trouve :

"This behavior may also occur during Windows Setup, or when you try to start Windows for the first time."

"Ce comportement PEUT survenir au cours de l'installation de Windows, ou lors du premier démarrage de Windows"

RESOLUTION
"To work around this issue, add the following line to the [386enh] section of the System.ini file:
        MaxPhysPage=40000
This limits the amount of physical RAM that Windows can access to 1 Gb."
[...]"

Là aussi certains ont cru que 1Go (anciennement c'était 768 Mo) était une limite maximale!

Dans cet article, Microsoft explique comment limiter à 1Go la mémoire utilisable, en fixant le nombre maximal de pages de 4096 octets.
La valeur du paramètre MaxPhysPage est exprimée en HEXADECIMAL
    0x40000 = 262144
    262144 x 4096 = 1073741824 octets, soit 1 Go

D'ailleurs, dans un autre article de la Knowledge Base (Q181862), Microsoft cite par contre la valeur de 960 Mo
(MaxPhysPage=3C000)

Dans l'article Q83436, Microsoft explique le rôle exact de ce paramètre :

"MaxPhysPage=<hexadecimal-page-number>
Default:
Determined by Windows based on the highest physical page number detected by the Memory Manager during initialization.

Purpose:
Specifies the maximum physical page number that the Memory Manager can manage as a useable page. This setting allows pages to be added at a physical address beyond what the Memory Manager recognized during initialization. If the value specified is less than what the Memory Manager determines, the Memory Manager will ignore several physical pages that it would normally use,  preventing the use of memory.
This is useful if you are using a hardware device that cannot recognize all of the physical memory in your computer (for example, ISA DMA Network cards cannot access physical memory above 16 megabytes.)"

La limitation à 1 Go suggérée par Microsoft est à appliquer en cas de problème.
C'est donc un conseil, et non une obligation.

Mais il est évident que vouloir installer 4Go sous Windows 95, 98 ou Millenium serait du gaspillage.

A propos de "msgsrv32.exe" ...

Il apparaît parfois sous Windows 9x/ME un message d'erreur concernant "msgsrv32.exe" ("...a causé une faute de protection générale dans ..."), ce qui peut obliger à redémarrer l'ordinateur.

L'article Q138708 de la Base de connaissance du MSDN dit ceci :

Msgsrv32.exe est un programme qui fonctionne de façon invisible sur le bureau de Windows et assure différentes fonctions en tâche de fond
nécessaires à Windows. Ces fonctions sont multiples :

Donc MSGSRV32 est un peu en quelque sorte un "surveillant" du démarrage, de l'arrêt et des modifications de Windows.
Les problèmes liés à MSGSRV32 peuvent survenir si on utilise :

Les causes sont donc très variées. La "Knowledge Base" du MSDN renvoie à un très grand nombre d'articles :

ID: Q142236 QEMM 8.0 Causes GP Fault in Safe Mode
ID: Q171977 Word Stops Responding When You Try to Quit Word
ID: Q245583 General Protection Fault When Browsing for Device Drivers
ID: Q188803 MSGSRV32.EXE Caused a General Protection Fault in...
ID: Q209321 General Protection Fault or Invalid Page Fault During Setup
ID: Q169987 Msgsrv32 Not Responding When Computer Hangs While Idle
ID: Q182567 Fatal Exception in Msgsrv32.exe When You Quit Windows 95
ID: Q222629 Msgsrv32 Caused a General Protection Fault in Module...
ID: Q138708 Function of the Windows 32-Bit Message Server
ID: Q193705 Cannot Use 11 or More Musical Instrument Device Interface Ports
ID: Q232131 Standby Mode Causes General Protection Fault in Attwave.drv
ID: Q190027 Cannot Remove ISA Network Adapter from Undocked Profile
ID: Q141597 Cannot Install Sound Blaster AWE32 Sound Card from Setup Disk
ID: Q154092 Explorer Caused an Invalid Page Fault in Kernel32.dll
ID: Q187268 SUWIN Error in Pidgen.dll During Windows 98 Setup
ID: Q187965 Explorer caused an invalid page fault in module Kernel32.dll