Скачиваний:
39
Добавлен:
01.05.2014
Размер:
2.9 Кб
Скачать
#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);
}

Соседние файлы в папке IODRV