(0) 64 | path | текущий путь доступа для диска |
(+64) 2 | reserv1 | зарезервировано |
(+66) 2 | reserv2 | зарезервировано |
(+68) 1 | reserv3 | зарезервировано |
(+69) 4 | ddcb | адрес соответствующего DDCB |
(+73) 2 | cdir_clu | первый кластер текущего каталога на диске. 0 соответствует корневому каталогу, -1 - если к диску еще не обращались |
(+75) 2 | reserv4 | зарезервировано |
(+77) 2 | reserv5 | зарезервировано |
(+79) 2 | reserv6 | зарезервировано |
---------------- для DOS 4.х ----------------- | ||
(+81) 7 | reserv7 | зарезервировано |
Приводимое ниже определение типа DINFO соответствует формату MS-DOS 4.х. #pragma pack(1) typedef struct _DINFO_ { char path[64]; unsigned reserv1; unsigned reserv2; unsigned char reserv3; DDCB far *ddcb; unsigned cdir_clu; unsigned reserv4; unsigned reserv5; unsigned reserv6; unsigned char reserv7[7]; } DINFO; #pragma pack()
Как пример использования этой информации приведем программу, которая выводит содержимое массива на экран: #include <dos.h> #include <stdio.h> #include <stdlib.h> #include "sysp.h" void main(void); void main(void) { CVT far *cvt; DINFO far *dinfo; unsigned i,j,k; printf("Информация о дисковых устройствах\n" "Copyright Frolov A. (C),1990\n"); cvt=get_mcvt(); // Адрес векторной таблицы связи dinfo=cvt->drv_info; // Адрес таблицы дисковых // устройств i=cvt->num_bdev; // Количество дисковых устройств for(j=0;j<i;j++) { printf("Адрес: %Fp,путь: %Fs\n" "Первый кластер каталога: %d\n\n", dinfo, dinfo->path, dinfo->cdir_clu); dinfo = dinfo+1; } exit(0); }
На этом мы завершаем изучение векторной таблицы связи MS-DOS. Еще раз уместно напомнить, что вся приведенная выше информация отсутствует в документации и может меняться (и действительно меняется!) от версии к версии. Если вы хотите использовать описанные выше средства, вам необходимо динамически определять версию DOS и использовать соответствующие форматы управляющих блоков.