Posted By: janecek (janecek) on 'CZmsdos'
Title:     Re: Jednotky C: a D: - jak na to v ASM
Date:      Tue Nov  5 11:01:23 1996

Ahoj,

  diky za rady, ta utilitka z JAMu asi bude delat presne to, co chci.
Ale take jsem na to uz prisel sam, je to velmi jednoduche.
Kdo by chtel zdrojak v ASM, at mi napise sem na Lianu (jsou toho asi 2 KB).
Funguje to od DOSu verze 4.0+, dokonce i ve Win95.

   Jak to funguje ?  DOS si pro kazdou jednotku udrzuje tabulku informaci,
zvanou CDS (Current Directory Structure). Ta (mimo jine) obsahuje aktualni 
adresarovou cestu tak, jak je nastavena pro dany disk. Zvlastnosti je, ze 
tato cesta zacina jmenem disku (takze v tabulce pro disk C: je ulozena 
adresarova cesta napr. ve tvaru 'C:DOS'). Chceme-li disk C: vydavat za disk 
D:, staci prepsat cestu z 'C:DOS' na 'D:DOS'. Stejnym principem zmenime 
nazev disku v tabulce pro disk D: (Napr. z 'D:BORLANDC' na 'C:BORLANDC').
A mame oba disky vzajemne prohozeny. Mimochodem, podobnym zpusobem pracuje
prikaz SUBST.

   Struktura CDS je popsana v INTRLISTu, ja jsem cerpal z verze 41. Dulezite 
je, ze se tato struktura od DOSu 4.0 nezmenila. Adresu CDS v pameti je mozno
ziskat pomoci DOSovske funkce INT 21h/AH=52h (vrati adresu pole vnitrnich
struktur DOSu, jednou z polozek je prave adresa CDS). Blizsi podrobnosti viz 
INTRLIST, ja si je z hlavy nepamatuji.

Pozn: Ve Win95 to funguje jen tehdy, je-li zamena disku provedena jeste pred 
      startem vlastnich Windows, tj. napr. v AUTOEXEC.BAT.

Zdrojak zaslu na pozadani.

                                                    Janik

Search the boards