Форум программистов, компьютерный форум CyberForum.ru

Вывести информацию о драйверах - C++

Восстановить пароль Регистрация
 
verona
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 31
18.12.2010, 21:01     Вывести информацию о драйверах #1
Определить драйверы, резидентные в памяти компьютера на своем рабочем месте.
вот есть прога..но она не выдаёт правильно инфу...помогите исправить...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*--------------"Просмотр списка драйверов."--------------*/
#include <dos.h>
#include <conio.h>
/*-----------------------Константы----------------------- */
#define byte unsigned char
#define word unsigned int
#define ATR(x,z) if(drv->attr&x){cprintf("     %s\n\r",z);y++;}
#define DA(x,y) (struct DR_HEAD *)MK_FP(x,y);
#define VSEG 0xb800       /* Сегментный адрес видеопамяти */
#define byte unsigned char
#define word unsigned int
#define Enter 13
#define rx 50
#define ry 13
int xk,yk;
word cc;
byte bm[rx][ry][2];
8struct DR_HEAD { /* заголовок драйвера */
   struct DR_HEAD *next;
   word attr, strat_addr, intr_addr;
   char name[8];
   } *drv;  /* адрес текущего драйвера */
struct DR_HEAD *clock, *con;  /* Адреса CLOCK$ и CON */
union REGS rr;
struct SREGS sr;
int i, y, y1;
/*---------------------------------------------------*/
void clrbuf(void)
{
 while(kbhit()) getch();
}
/*--------------Чтение символа из видеопамяти-------------*/
byte GetSym(x1,y1)
int x1,y1;
{
 return(peekb(VSEG,y1*160+x1*2));
}
/*-------------Чтение атрибута из видеопамяти-------------*/
byte GetAtr(x1,y1)
int x1,y1;
{
 return(peekb(VSEG,y1*160+x1*2+1));
}
/*-------------Запись символа в видеопамять---------------*/
void PutSym(x1,y1,sym)
int x1,y1;
byte sym;
{
 pokeb(VSEG,y1*160+x1*2,sym);
}
/*-------------Запись атрибута в видеопамять--------------*/
void PutAtr(x1,y1,atr)
8int x1,y1;
byte atr;
{
 pokeb(VSEG,y1*160+x1*2+1,atr);
}
/*--------------------------------------------------------*/
void MemW(x,y,xr,yr)
int x,y,xr,yr;
{
 int i,j;
 for (j=y;j<(y+yr);j++)
  for (i=x;i<(x+xr);i++)
   {
    bm[i][j][0]=GetSym(i,j);
    bm[i][j][1]=GetAtr(i,j);
   }
}
/*--------------------------------------------------------*/
void RmmW(x,y,xr,yr)
int x,y,xr,yr;
{
 int i,j;
 for (j=y;j<(y+yr);j++)
  for (i=x;i<(x+xr);i++)
   {
    PutSym(i,j,bm[i][j][0]);
    PutAtr(i,j,bm[i][j][1]);
   }
}
/*--------------------------------------------------------*/
void ClrW(x1,y1,x2,y2,s,a)
int x1,y1,x2,y2;
byte s,a;
{
 int i,j;
 for (j=y1;j<y2;j++)
  for (i=x1;i<x2;i++)
   {
    if (s!=0) PutSym(i,j,s);
    PutAtr(i,j,a);
   }
}
/*--------------------------------------------------------*/
void FlDrv(void)
{
 int xm,ym;
 xm=wherex();
 ym=wherey();
 MemW(0,1,rx,ry);
 ClrW(1,2,rx,ry,0,7);
 ClrW(0,1,rx-2,ry-2,32,16);
 gotoxy(1,2);
 textattr(15+16*3);
 cprintf("***         Атрибуты драйвера %5u          ***",cc);
 gotoxy(1,3);
 textattr(15+16);
 if (drv==clock) cprintf("     активный CLOCK$");
 if (drv==con) cprintf("     активный CON");
 gotoxy(1,4);
 textattr(14+16);
 if (drv->attr&0x8000)
 {
  ATR(1,"консоль ввода")
  ATR(2,"консоль вывода")
  ATR(4,"нулевое устройство")
  ATR(8,"CLOCK$ (часы)")
  ATR(0x2000,"поддерживает OUB")
 }
 else
 {
  ATR(2,"32-байтный адрес сектора")
  ATR(0x2000,"читает media FAT")
 }
 ATR(0x40,"поддерживает функции DOS 3.2")
 ATR(0x800,"поддерживает Open/Close")
 ATR(0x4000,"поддерживает IOCTL")
 gotoxy(1,12);
 textattr(15+16*3+128);
 cprintf("***          Нажмите любую клавишу...        ***");
 if (getch()==0) getch();
 RmmW(0,1,rx,ry);
 gotoxy(xm,ym);
}
/*--------------------------------------------------------*/
main() {
  int c;
  /* получение адреса CVT */
  rr.h.ah=0x52; intdosx(&rr,&rr,&sr);
  /* адрес драйвера часов */
  clock=DA(peek(sr.es,rr.x.bx+10),peek(sr.es,rr.x.bx+8));
  /* адрес драйвера консоли */
  con=DA(peek(sr.es,rr.x.bx+14),peek(sr.es,rr.x.bx+12));
  /* адрес NUL-драйвера */
  textattr(10);
  clrscr();
  cprintf("---------------");
  cprintf("              Лабораторная работа N11             ");
  cprintf("---------------");
  cprintf("---------------");
  cprintf("             Просмотр списка драйверов.           ");
  cprintf("---------------");
  drv=DA(sr.es,rr.x.bx+34);
  textattr(7);
  gotoxy(8,3);
  cprintf("Нажимайте <SpaceBar> ,а для рассмотрения атрибутов",
           "драйвера <Enter>.");
  textattr(12);
  gotoxy(28,4);
  cc=1;
  cprintf("Список драйверов устройств :\n\r");
  while(FP_OFF(drv)!=0xffff) {
    textattr(15);
    cprintf("%5u",cc);
    textattr(14);
    cprintf("  Адрес - %Fp    ",drv);
    textattr(11);
    cprintf(" атрибуты - %04X   ",drv->attr);
    textattr(13);
    if (drv->attr&0x8000)
      for (i=0;i<8; cprintf("%c",drv->name[i++]));
    else cprintf("блочный - %d",drv->name[0]);
      cprintf("\n\r"); y=0;
    while ((c=getch())==Enter)FlDrv();
    if (c==0) getch();
    drv=drv->next; /* адрес след.драйвера */
    cc++;
  }
  textattr(12+128);
  cprintf("Конец списка.     Нажмите любую клавишу...\n");
  getch();
  textattr(7);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2010, 21:01     Вывести информацию о драйверах
Посмотрите здесь:

C++ Вывести информацию
Вывести информацию о самой молодой команде C++
Вывести информацию в виде таблицы C++
Вывести информацию о лучшем форварде C++
C++ Вывести информацию о каждом файле
Вывести информацию о студенте из списка структур C++
C++ Dev C++ Вывести информацию о себе
C++ Вывести информацию по заказу

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
maxik42
 Аватар для maxik42
4 / 19 / 3
Регистрация: 22.03.2010
Сообщений: 131
18.12.2010, 21:14     Вывести информацию о драйверах #2
Извеняюсь! а где можно взять такие лабы похожые на одну из етой? я бы хотел потренироватся!!!
verona
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 31
18.12.2010, 21:27  [ТС]     Вывести информацию о драйверах #3
Цитата Сообщение от maxik42 Посмотреть сообщение
Извеняюсь! а где можно взять такие лабы похожые на одну из етой? я бы хотел потренироватся!!!
приходите к нам в универ))

попробуйте на этой...


кста...где можно найти подробное описание функции использованных библиотекой dos.h?
maxik42
 Аватар для maxik42
4 / 19 / 3
Регистрация: 22.03.2010
Сообщений: 131
18.12.2010, 22:39     Вывести информацию о драйверах #4
Цитата Сообщение от verona Посмотреть сообщение
приходите к нам в универ))

попробуйте на этой...


кста...где можно найти подробное описание функции использованных библиотекой dos.h?
в досовской оболочке Borland TurboC++ version 3.0 есть вся документация правда на англицком!)
verona
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 31
19.12.2010, 12:44  [ТС]     Вывести информацию о драйверах #5
Цитата Сообщение от maxik42 Посмотреть сообщение
в досовской оболочке Borland TurboC++ version 3.0 есть вся документация правда на англицком!)
а можно ссылочку??

Добавлено через 13 часов 41 минуту
может хоть кто-то поможет???
плиз....посмотрите...хоть совет дайте
Yandex
Объявления
19.12.2010, 12:44     Вывести информацию о драйверах
Ответ Создать тему
Опции темы

Текущее время: 16:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru