
			   	   WSTEP DO VxD
				Writeln by [CoxoC]


Zaczne od tego ze VxDki dziela sie na STATIC i DYNAMICALLY-LOADABLE.

Na wstepie przytaczam znalezione przeze mnie opisy segmentow VxDkow STATYCZNYCH :

VxD_CODE	- jest to protected-mode code segment. Ten segment zawiera 
		  procedure kontrolna urzadzenia , callback procedury ,
		  serwisy, i API procedury . Ten segment jest rowniez nazywany
		  _LTEXT . W kodzie uzywa sie makr :

		VxD_CODE_SEG
		;kod
		VxD_CODE_ENDS

VxD_DATA	- jest to protected-mode data segment. Ten segment zawiera
		  device descriptor block, service table i globalne dane
		  wirtualnego urzadzenia.Inna nazwa to _LDATA. Przyklad:

		VxD_DATA_SEG
		;dane
		VxD_DATA_ENDS

VxD_ICODE	- Segment inicjalizacyjny trybu chronionego. Ten segment 
		  przewaznie zawiera procedury i serwisy potrzebne do inicjacji
		  urzadzenia . Virtual manager (VMM) odlacza ten segment po
		  odbiorze komunikatu Init_Complete. Inna nazwa to _ITEXT

		VxD_ICODE_SEG
		;kod
		VxD_ICODE_ENDS

VxD_IDATA	- Podobnie jak segment _ITEXT jest odlaczany przez VMM po
		  odbiorze kominukatu Init_Complete. Sluzy on do przechowywania
		  danych procedur inicjalizacyjnych . inna nazwa to _IDATA.

		VxD_IDATA_SEG
		;dane
		VxD_IDATA_ENDS

VxD_REAL_INIT	- jest to real-mode inicjalizacyjny segment. Zawiera on real-mode
		  procedure inicjalizacyjna oraz dane. VMM wywoluje ta procedure
		  przed wgraniem reszty kodu Virtual device i odlacza ten segment
		  wtedy gdy procedura zakonczy swoje dzialanie. Ten segment wystepuje
		  tylko w statycznych VxDkach ! .Makra

		VxD_REAL_INIT_SEG

		VxD_REAL_INIT_ENDS

		  definiuja poczatek i koniec tego segmentu. Inna nazwa to _RTEXT

Caly kod i segmenty danych z wyjatkiem real-mode initialization segmentu sa 32-bitowe,
flat model i protected mode. Znaczy to ze te segmenty posiadaja 32bitowe offsety i nalezy
uzywac makra OFFSET32 zamiast OFFSET.Virtual devices nie moga uzywac CS , DS , ES i SS
rejestrow za to moga uzywac FS i GS rejestrow.



Jezeli nasz VxD nazywa sie : "PIERWSZY" i jest DYNAMICALLY-LOADABLE to przykladowy 
szkielet powinien wygladac nastepujaco :

;============================================================================
;                                 I N C L U D E S
;============================================================================

    .486p

    .xlist
    include    vmm.inc			;Przykladowa lista
    include    vwin32.inc
    include    shell.inc
    include    vkd.inc
    include    ifsmgr.inc
    include    vmd.inc
    include    debug.inc
    include    minivdd.inc

    .list


;============================================================================
;     C Z E S C    I N I C J A L I Z A C Y J N A   U R Z A D Z E N I A
;============================================================================

VXD_Icode_Seg

BeginProc      PIERWSZY_Device_Init


      clc
      ret

EndProc     PIERWSZY_Device_Init

VXD_Icode_Ends

;============================================================================
;             D E K L A R A C J A   U R Z A D Z E N I A
;============================================================================

VXD_Locked_Code_Seg


Declare_Virtual_Device    PIERWSZY,0,1,PIERWSZY_Control,Undefined_Device_ID, \
                          Undefined_Init_Order,,


;----------------------------------------------------------------------------
;
; Procedura kontrolna urzadzenia dla VxD
;
;----------------------------------------------------------------------------

BeginProc   PIERWSZY_Control

      Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, PIERWSZY_Device_Init
      Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, PIERWSZY_Device_Exit
      Control_Dispatch W32_DEVICEIOCONTROL,     PIERWSZY_ioctl

      clc
      ret

SWAPPAGE_Control  ENDP

BeginProc      PIERWSZY_ioctl
      mov      ecx,[esi].dwIoControlCode
      xor      eax, eax
      clc
      ret
EndProc        PIERWSZY_ioctl


;----------------------------------------------------------------------------
;
; Procedura konczaca
;
;----------------------------------------------------------------------------
BeginProc	PIERWSZY_Device_Exit

	clc
	ret
EndProc		PIERWSZY_Device_Exit
;============================================================================
;                            	D A N E 
;============================================================================
dana1	db	0

;============================================================================
;                       C Z E S C    G L O W N A
;============================================================================
BeginProc	Procedurka

	clc
	ret
EndProc		Procedurka

VXD_LOCKED_CODE_ENDS

end	
;=========================== K O N I E C   K O D U ==========================


Teraz nasuwa sie pytanie w jaki sposob nalezy ten kod skompilowac ... Odsylam 
do tutoriali Iczeliona.

