Скачиваний:
39
Добавлен:
01.05.2014
Размер:
3.08 Кб
Скачать
// „ ­­ п Їа®а ¬¬  ЁбЇ®«м§гҐв ЇаҐалў ­ЁҐ 80h,
// Є®в®а®Ґ гбв ­ ў«Ёў Ґвбп ¤Ґ¬®­бва жЁ®­­л¬
// ¤а ©ўҐа®¬. „«п Їа ў«Ё«м­®© гбв ­®ўЄЁ д ©«
// CONFIG.SYS ¤®«¦Ґ­ ᮤҐа¦ вм, ­ ЇаЁ¬Ґа,
// в Єго бва®Єг ¤«п Ї®¤Є«о祭Ёп ¤а ©ўҐа :
//
// device=e:\sysprg\devdrv.sys  1 80 378 379 37a 37a
//
// —Ёб«® 80 ®§­ з Ґв ­®¬Ґа ЁбЇ®«м§гҐ¬®Ј® ЇаҐалў ­Ёп.


#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], ch;
	 int io_handle;
	 unsigned count;


	 // ЋвЄалў Ґ¬ гбва®©бвў® б Ё¬Ґ­Ґ¬ DEVDRIVR

	 if( (io_handle = open("DEVDRIVR", O_RDWR)) == - 1 ) {

		// …б«Ё ®вЄалвм ­Ґ г¤ «®бм, ўлў®¤Ё¬
		// Є®¤ ®иЁЎЄЁ

		printf("ЋиЁЎЄ  ЇаЁ ®вЄалвЁЁ гбва®©бвў  %d",errno);
		return errno;
	 }

	 // —Ёв Ґ¬ 8 Ў ©в Ё§ гбва®©бвў  ў ЎгдҐа buf

	 printf("\n‚ўҐ¤ЁвҐ 8 бЁ¬ў®«®ў б Є« ўЁ вгал\n");

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

	// ‚ў®¤Ё¬ бва®Єг IOCTL Ё§ гбва®©бвў 

	printf("\n‚ўҐ¤ЁвҐ бва®Єг IOCTL (8 бЁ¬ў®«®ў): ");

	inregs.h.ah = 0x44;
	inregs.h.al = 2;
	inregs.x.bx = io_handle;
	inregs.x.dx = (unsigned)buf;
	inregs.x.cx = 8;
	intdos( &inregs, &outregs );
	if(outregs.x.cflag == 1) {

		// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ

		printf("IOCTL error %x\n",&outregs.x.ax);
		exit(-1);
	}
	buf[8]=0;
	printf("\n±±± ‚ўҐ¤Ґ­  бва®Є  IOCTL: %s ±±±",buf);

	// ‚лў®¤Ё¬ бва®Єг IOCTL ­  гбва®©бвў  Ё§ buf

	printf("\n‚뢥¤Ґ­  бва®Є  IOCTL: ");

	inregs.h.ah = 0x44;
	inregs.h.al = 3;
	inregs.x.bx = io_handle;
	inregs.x.dx = (unsigned)buf;
	inregs.x.cx = 8;
	intdos( &inregs, &outregs );
	if(outregs.x.cflag == 1) {

		// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ

		printf("IOCTL error %x\n",&outregs.x.ax);
		exit(-1);
	}

	 printf("\n\n\nЏа®ўҐа塞 ўл§®ў ЇаҐалў ­Ёп."
			  "\n"
			  "\nЌ ¦¬ЁвҐ «оЎго Є« ўЁиг...\n\n");
	 getch();

	 printf("\nЉ®¬ ­¤  § ЇЁбЁ:\n");

	 inregs.h.ah = 0x0; /* WRITE */
	 inregs.h.bh = 0x777;
	 inregs.h.bl = 0x13;
	 int86( 0x80, &inregs, &outregs );

	 printf("\nЉ®¬ ­¤  з⥭Ёп:\n");

	 inregs.h.ah = 0x1; /* READ */
	 inregs.h.bh = 0x776;
	 int86( 0x80, &inregs, &outregs );
	 ch=outregs.h.bl;

	 printf("Џ®«г祭­®Ґ §­ зҐ­ЁҐ: %x\n",ch);

	 printf("\nЌҐЁ§ўҐбв­ п Є®¬ ­¤ :\n");

	 inregs.h.ah = 0x2; /* ??? */
	 int86( 0x80, &inregs, &outregs );

	// ‡ Єалў Ґ¬ гбва®©бвў®

	close(io_handle);

	exit(0);
}

Соседние файлы в папке DEVDRV
  • #
    01.05.20143.08 Кб39CALLDDRV.C
  • #
    01.05.2014710 б39CALLDRV.MAK
  • #
    01.05.201420.82 Кб39DEVDRV.ASM