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

C++

Войти
Регистрация
Восстановить пароль
 
phantom3200
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 11
#1

Определить резидентные драйверы в памяти компьютера - C++

22.06.2015, 00:37. Просмотров 441. Ответов 11
Метки нет (Все метки)

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);
}

Нужно написать программу, которая определяет драйверы, резидентные в памяти компьютера. Эта не компилируется, выдает ошибки:
Line 16: error: dos.h: No such file or directory
Line 18: error: conio.h: No such file or directory
Line 0: error: invalid suffix "struct" on integer constant
Line 0: error: invalid suffix "int" on integer constant
Line 18: error: expected unqualified-id before numeric constant
compilation terminated due to -Wfatal-errors.
Помогите пожалуйста, не понимаю почему не работает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2015, 00:37     Определить резидентные драйверы в памяти компьютера
Посмотрите здесь:

Visual C++ Как определить границы образа файла в памяти?
Класс в Visual Studio, который может определить имя компьютера и т.д. Visual C++
C++ Как определить обурудование компьютера?
C++ Builder Определить IP-адрес компьютера
C++ Представление в памяти компьютера типа double
Создать 2 целые переменные и определить «расстояние» между ними в памяти C++
Объясните задачу про представление вещественных чисел в памяти компьютера C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
22.06.2015, 00:41     Определить резидентные драйверы в памяти компьютера #2
Цитата Сообщение от phantom3200 Посмотреть сообщение
Нужно написать программу, которая определяет драйверы, резидентные в памяти компьютера.
ни че, что ДОСа уже лет десять нет? а равно и резидентных программ
Цитата Сообщение от phantom3200 Посмотреть сообщение
Эта не компилируется, выдает ошибки:
на каком компьютере компилировал? ОС? Компилятор?
Fulcrum_013
648 / 716 / 72
Регистрация: 14.12.2014
Сообщений: 5,612
Завершенные тесты: 3
22.06.2015, 00:42     Определить резидентные драйверы в памяти компьютера #3
Цитата Сообщение от phantom3200 Посмотреть сообщение
Помогите пожалуйста, не понимаю почему не работает
Каким компилятором компилируешь?
phantom3200
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 11
22.06.2015, 00:44  [ТС]     Определить резидентные драйверы в памяти компьютера #4
Компилировал на видне 7, в кодблоксе
А где нужно?
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
22.06.2015, 00:48     Определить резидентные драйверы в памяти компьютера #5
Цитата Сообщение от phantom3200 Посмотреть сообщение
А где нужно?
на машине где установлен ДОС, и компилятор типа BC3.1, или еще раньше
В музей пойдешь?
Fulcrum_013
648 / 716 / 72
Регистрация: 14.12.2014
Сообщений: 5,612
Завершенные тесты: 3
22.06.2015, 00:58     Определить резидентные драйверы в памяти компьютера #6
Цитата Сообщение от ValeryS Посмотреть сообщение
В музей пойдешь?
Зачем в музей? она еще на контроллерах пашет, правда причесанная под RT. Хот там лабы гонять точно никто не пустит.
Можешь конечно винду удалить винт форматнуть и поставить ДОС, она правда больше 2ГБ на раздел не потянет. Но лучше поищи может у кого завалялась подходящая железка. Где то в ящике с хламом валяются три материнки с процами 286, 386 и 486. так что может у кого нибудь из твоих знакомы компьютерщиков прошлого тысячелетия такой хлам тоже валяется.
А виндовый компилятор dos.h точно не знает. И под виндой эта штука тоже запускаться не будет.
phantom3200
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 11
22.06.2015, 00:58  [ТС]     Определить резидентные драйверы в памяти компьютера #7
В музей??
Fulcrum_013
648 / 716 / 72
Регистрация: 14.12.2014
Сообщений: 5,612
Завершенные тесты: 3
22.06.2015, 01:01     Определить резидентные драйверы в памяти компьютера #8
Цитата Сообщение от phantom3200 Посмотреть сообщение
В музей??
Ну да. Помнится году этак в 96-ом шарились по этой табличке и искали место чтобы антивирус не обнаружил.... в 1997-ом уже ловили за хвост функции Kernel. так что дос по большому счету в прошлом тысячелетии остался... Кстати если попробуешь ставить его на современном железе огромная вероятность что дров просто не найдешь.
phantom3200
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 11
22.06.2015, 01:05  [ТС]     Определить резидентные драйверы в памяти компьютера #9
то есть впринципе невозможно сделать на винде чтобы эта программа выводила список драйверов??
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
22.06.2015, 01:07     Определить резидентные драйверы в памяти компьютера #10
Цитата Сообщение от phantom3200 Посмотреть сообщение
то есть впринципе невозможно сделать на винде чтобы эта программа выводила список драйверов??
это разные ОСи, и драйвера у них разные
phantom3200
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 11
22.06.2015, 01:18  [ТС]     Определить резидентные драйверы в памяти компьютера #11
а сделать так чтобы она выдавала драйвера моей машины с винодвсом? так можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2015, 01:19     Определить резидентные драйверы в памяти компьютера
Еще ссылки по теме:

C++ Как определить сколько памяти выделила VirtualAlloc
C++ Builder Вывести структуру из памяти компьютера в StringGrid
Определить количество полной и свободной памяти видеокарты C++
Определить параметры компьютера на Linux C++
Определить производителя оперативной памяти C++ WinAPI

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
22.06.2015, 01:19     Определить резидентные драйверы в памяти компьютера #12
Цитата Сообщение от phantom3200 Посмотреть сообщение
она выдавала драйвера моей машины с винодвсом? так можно?
нельзя
нужно писать совершенно другую программу, а для этого нужно изучить как устроена Винда
Yandex
Объявления
22.06.2015, 01:19     Определить резидентные драйверы в памяти компьютера
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru