Change la Taille d'un Bloc de Mémoire Linéaire
![[1.0]](../1.0.gif)
Change la taille d'un bloc de mémoire precedemment allou‚ avecl
la fonction Alloue Bloc de Mémoire Linéaire(Int
31H Fonction 0504H).
Appel avec

AX = 0505H
ESI = handle du bloc de mémoire
ECX = nouvelle taille du bloc (octets, doit être non-nulle)
EDX = flags
Bit | Signification |
0 | 0 = cr‚e pages non engag‚es |
1 = cr‚e pages engag‚es |
1 | 0 = ne met pas à jour les descripteurs |
1 = mise à jour du descripteur requise |
2-31 | reserv‚, doit être z‚ro |
et, si le bit 1 de EDX est pos‚ (=1):
ES:EBX = selecteur:offset d'un buffer contenant un tableau
de selecteurs, 1 mot (16 bits) par selecteur
EDI = nombre de selecteurs dans le tableau
Retourne

si la fonction réussit
Carry flag = 0
EBX = nouvelle adresse linéaire du bloc de mémoire
ESI = nouveau handle du bloc de mémoire
si la fonction échoue
Carry flag = 1
AX = code d'erreur
8001H | fonction non supportée (hôte 16-bit) |
8012H | mémoire linéaire indisponible |
8013H | mémoire physique indisponible |
8014H | backing store indisponible |
8016H | handle indisponible |
8021H | valeur invalide (ECX = 0) |
8023H | handle invalide(in ESI) |
Notes
- Un hôte DPMI 1.0 qui est uniquement 16-bit ne supportera pas
cette fonction.
- Un client 16-bit d'un hôte DPMI 32-bit 1.0 peut utiliser
cette fonction.
- Au retour de cette fonction, le pr‚c‚dent handle du bloc de mémoire
est invalide et ne doit pas être utilis‚.
- Si cette fonction ‚choue, la taille du bloc et son adresse
ne sont pas modifi‚s.
- Si la taille du bloc est augment‚e , les nouvelles pages sont engag‚es
ou non engag‚es conform‚ment à la valeur du bit 0 dans EDX, et l'adresse
linéaire du bloc peut changer. Si la taille du bloc est diminu‚e,
les pages à la fin du bloc sont lib‚r‚es, et l'adresse de base du bloc
reste inchang‚e.
- Si l'adresse linéaire du bloc est chang‚e par cette fonction,
et que la fonction a ‚t‚ appel‚e avec le bit 1 de EDX pos‚ (=1), l'hôte DPMI
met à jour les descripteurs pour chacun des segments dans la liste de mise à jour
qui tombent dans le bloc. Les descripteurs des segments qui ne tombent pas
dans le bloc ne sont pas modifi‚s. Les segments agrandis tombent dans
le bloc si la base du segment est dans le bloc. Les segments r‚tr‚cis
tombent dans le bloc si ( base du segment + the limit - 1) est dans le bloc.
Dans tous les cas , la base du segment
est modifi‚e par la distance que le bloc parcours, et la limite du segment
n'est pas chang‚e. Le mouvement du bloc de mémoire et la mise à jour
des descripteurs est men‚e atomiquement; c.a.d. que l'hôte ne passe aucune
interruptions mat‚rielle au client pendant la mise à jour.
- L'Int 31H Fonction 0503H,qui change ‚galement
les blocs de mémoire linéaire ,n'aligne pas n‚cessairement
les blocs à la page et ne peut cr‚er de pages non engag‚es ou mettre à jour
les descripteurs.