Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <malloc.h>
#include <errno.h>
#include <dos.h>
int main(void);
union REGS inregs, outregs;
struct SREGS segregs;
int main(void) {
char buf[100];
int io_handle;
unsigned count;
// ЋвЄалў Ґ¬ гбва®©бвў® б Ё¬ҐҐ¬ IODRIVER
if( (io_handle = open("IODRIVER", O_RDWR)) == - 1 ) {
// …б«Ё ®вЄалвм Ґ г¤ «®бм, ўлў®¤Ё¬
// Є®¤ ®иЁЎЄЁ
printf("ЋиЁЎЄ ЇаЁ ®вЄалвЁЁ гбва®©бвў %d",errno);
return errno;
}
// —Ёв Ґ¬ 8 Ў ©в Ё§ гбва®©бвў ў ЎгдҐа buf
if( (count = read(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ з⥨Ё Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ з⥨п %d",errno);
return errno;
}
// ‡ Єалў Ґ¬ Їа®зЁв го бва®Єг г«Ґ¬
// ¤«п Ї®б«Ґ¤го饣® ўлў®¤ дгЄжЁҐ© printf
buf[8]=0;
printf("\n±±± ‚ўҐ¤Ґ бва®Є : %s ±±±",buf);
// ‚лў®¤Ё¬ в®«мЄ® зв® Їа®зЁв лҐ ¤ лҐ
// ®Ўа в® в® ¦Ґ гбва®©бвў®
if( (count = write(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ § ЇЁбЁ Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ § ЇЁбЁ %d",errno);
return errno;
}
// Џ®«гз Ґ¬ Ёд®а¬ жЁо ®Ў гбва®©б⢥
inregs.h.ah = 0x44;
inregs.h.al = 0;
inregs.x.bx = io_handle;
intdos( &inregs, &outregs );
if(outregs.x.cflag == 1) {
// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ
printf("IOCTL error %x\n",&outregs.x.ax);
exit(-1);
}
// ‚лў®¤Ё¬ б«®ў® Ёд®а¬ жЁЁ ®Ў гбва®©б⢥ нЄа
printf("\nDevice Information: %04X\n", outregs.x.dx);
// “бв ў«Ёў Ґ¬ ў 1 ЎЁв 5 (ЇҐаҐЄ«оз Ґ¬ ¤а ©ўҐа
// ў ¤ў®Ёзл© аҐ¦Ё¬ ®Ў¬Ґ ¤ л¬Ё
inregs.x.dx = (outregs.x.dx | 0x0020) & 0x00ff;
// “бв ў«Ёў Ґ¬ б«®ў® Ёд®а¬ жЁЁ ®Ў гбва®©б⢥
inregs.h.ah = 0x44;
inregs.h.al = 1;
inregs.x.bx = io_handle;
intdos( &inregs, &outregs );
if(outregs.x.cflag == 1) {
// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ
printf("IOCTL error %x\n",&outregs.x.ax);
exit(-1);
}
// ‚лў®¤Ё¬ б«®ў® Ёд®а¬ жЁЁ ®Ў гбва®©б⢥ нЄа
printf("\nDevice Information: %04X\n", outregs.x.dx);
// —Ёв Ґ¬ 8 Ў ©в Ё§ гбва®©бвў ў ЎгдҐа buf
// ЋЎ¬Ґ ⥯Ґам Їа®Ё§ў®¤Ёвбп ў ¤ў®Ёз®¬ ०Ё¬Ґ
if( (count = read(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ з⥨Ё Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ з⥨п %d",errno);
return errno;
}
// ‡ Єалў Ґ¬ Їа®зЁв го бва®Єг г«Ґ¬
// ¤«п Ї®б«Ґ¤го饣® ўлў®¤ дгЄжЁҐ© printf
buf[8]=0;
printf("\n±±± ‚ўҐ¤Ґ бва®Є : %s ±±±",buf);
// ‚лў®¤Ё¬ в®«мЄ® зв® Їа®зЁв лҐ ¤ лҐ
// ®Ўа в® в® ¦Ґ гбва®©бвў®
if( (count = write(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ § ЇЁбЁ Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ § ЇЁбЁ %d",errno);
return errno;
}
// ‡ Єалў Ґ¬ гбва®©бвў®
close(io_handle);
exit(0);
}