Download VxD

Document related concepts
Transcript
Controlador de Dispositivo Virtual
(VxD)
Antecedentes
 Windows 95 es un sistema operativo multitarea que
corre en el anillo cero.
 Todas las demás aplicaciones lo hacen en el anillo tres.
 GDI32, Kernel32 y USER32 son tres componentes
importantes del sistema que corren en el anillo 3.
 El sistema operativo está bajo el control de la VMM
(Virtual Machine Manager) y los VxD (Virtual Device
Drivers).
Problemática
 Los
programas DOS y
dramáticamente diferentes.
de
Windows
DOS
Windows
•Pueden hacer uso de
instrucciones privilegiadas del
CPU, del puerto de E/S
directamente.
•Tienen acceso directo a los
recursos del sistema: CPU,
memoria, teclado, disco, etc.
•Restringidos respecto a lo
que pueden hacer en el
sistema.
•Trabajan bajo el esquema del
multitareas cooperativo. i.e.
deben compartir el control
con otros programas por
medio del uso de mensajes
(GetMessage o Peek
Message).
son
Solución
Programas de DOS
Programas de Windows
Corren en una máquina virtual Corren en una máquina virtual
8086.
llamada SVM (System Virtual
Machine).
¿Qué es una VMM?
 Es una máquina creada por medio de software.
 Reacciona como una máquina real.
 Los programas desconocen que corren en una máquina
virtual.
 Como una VMM responde exactamente igual como
una máquina real, puede ser tratada de la misma
manera.
 La interface entre la máquina y su software es un tipo
de API (interrupciones, llamadas al BIOS, y puertos de
E/S).
¿Qué es una VMM en Windows?
 Es un programa dedicado a coordinar y supervisar las
VM’s.
 Es un programa de 32 bits en modo protegido.
 Es responsable de crear, correr y terminar la ejecución
de las VM’s.
 Es una de las muchas VxD’s que están guardadas en el
archivo VMM32.VXD en la carpeta del sistema.
Secuencia de Arranque de
Windows 95
1.
2.
3.
4.
5.
6.
7.
8.
9.
IO.SYS es cargado en la memoria.
CONFIG.SYS y AUTOEXEC.BAT son procesados.
WIN.COM es llamado.
WIN.COM corre VMM32.VXD que es actualmente un archivo DOS
EXE.
VMM32.VXD carga la VMM en la memoria extendida haciendo uso
del controlador de XMS.
VMM se inicializa a si misma junto con otros controladores de
dispositivos por omisión.
VMM cambia la máquina al modo protegido y crea la máquina
virtual del sistema.
Virtual Shell Device, el cual es cargado al final, inicia Windows en la
máquina virtual del sistema corriendo el archivo krnl386.exe
KRNL386.EXE carga el resto de los archivos, culminando con el shell
de Windows 95.
Consideraciones
 La VMM es el primer VxD cargado en la memoria.
 Crea la máquina virtual del sistema e inicializa otros
VxD’s.
 También provee varios servicios a esos VxD’s.
 La VMM y los VxD’s trabajan en un modo latente la
mayoría del tiempo.
 Mientras los programas de aplicación corren, los VxD’s
están inactivos. Son activados cuando interrupciones u
otros eventos demandan su atención.
Controlador de Dispositivo Virtual
(VxD)
 Donde x asume el nombre del dispositivo tal como el
controlador de teclado virtual, del ratón, etc.
 Es la clave para la virtualización satisfactoria del
hardware.
 Representa un soporte de entrada para los programas
de DOS hacia los dispositivos reales.
Controlador de Dispositivo Virtual
(VxD)
 Es específico de Windows 9x. No pueden corren en
Windows NT.
 Es la entidad más poderosa del sistema porque pueden
hacer todo en él.
 Hay dos tipos de VxD bajo Windows 95:
 VxD Estática
 VxD Dinámica
Controlador de Dispositivo Virtual
(VxD)
Estática
Dinámica
•Cargada durante la
inicialización del sistema.
•Se mantiene cargada en
memoria hasta que el sistema
de cierra.
•Proviene desde Windows 3.x
•Sólo está disponible para
Windows 9.x
•Puede ser cargado o
descargado cuando sea
necesario.
•Muchos de ellos controlan
dispositivos Plug and Play.
Controlador de Dispositivo Virtual
(VxD)
Comunicación entre VxD’s
Las VxD’s, incluyendo la VMM, se comunican entre sí a
través de tres mecanismos:
1. Mensajes de control
2. API’s de servicio
3. Callbacks
Controlador de Dispositivo Virtual
(VxD)
Mensajes de Control
•La VMM envía mensajes de control de sistema a todos los
VxDs cargados en el sistema cuando ocurre algo importante.
•Todo VxD tiene una función que recibe y trata con
mensajes de control llamada procedimiento de control de
dispositivo (device control procedure)
Controlador de Dispositivo Virtual
(VxD)
API’s de Servicio
•Un VxD, usualmente exporta un conjunto de funciones
públicas que pueden ser llamadas por otros VxDs. Esas
funciones se llaman servicios VxD.
•Todo VxD que exporta servicios VxD debe tener un número
de ID único.
•El ID es un número de 16 bits que identifica únicamente un
VxD.
Ejemplo:
UNDEFINED_DEVICE_ID
EQU 00000H
VMM_DEVICE_ID
EQU 00001H
DEBUG_DEVICE_ID
EQU 00002H
VPICD_DEVICE_ID
EQU 00003H
VDMAD_DEVICE_ID
EQU 00004H
VTD_DEVICE_ID
EQU 00005H
Controlador de Dispositivo Virtual
(VxD)
Callbacks
•Son funciones que existen en las VxD para ser llamadas por
otros VxDs.
•No son lo mismo que los servicios VxD.
•Las callbacks no son públicas como los servicios. Son
funciones privadas de las que un VxD da sus direcciones a
otros VxDs en situaciones específicas.
Hardware Virtual
 Virtualización del Software.- Mecanismos que
permiten a los componentes en modo protegido de
Windows interactuar con los componentes en modo
real de MS-DOS y el BIOS.
 Requiere que el sistema operativo intercepte llamadas
entre los modos protegido y real.
 Cambia el modo de operación del procesador después
de ajustar adecuadamente los registros de parámetro.
Hardware Virtual
Tabla Descriptora
de Interrupciones
Tabla del Vector
de Interrupciones
INT xx
Rutina de Servicio
de Interrupción en
Modo Real
Aplicación en
Modo Protegido
VxD
Bloque de Parámetros en
Memoria Extendida
Modo Protegido
Bloque de Parámetros
en Memoria V86
Modo V86
Virtualización de Software de MS-DOS y el BIOS [Oney 96]
El API de Servicio para VxD
 Los VxDs se comunican con la VMM usando el API de
Servicio para VxD.
 Esta API provee una comunicación dinámica entre los
VxDs usando la int 20h y el conjunto de ordenes de
servicio del VxD.
 Las órdenes de servicio identifican de manera única un
VxD en particular y una función de servicio en el VxD.
El API de Servicio para VxD
Identificador VxD
Índice de
servicios
Función de Servicio
Tabla de Servicio
para un VxD
Lista de VxDs
Un identificador de Servicio para VxD [Oney 96]
Esqueleto de un VxD en Lenguaje
Ensamblador
REQUISITOS
 Se necesita el Kit de Desarrollo de Controladores de
Dispositivos para Windows 95/98 (Windows 95/98
DDK)
 Windows 98 DDK contiene el MASM versión 6.11d
 El Windows 9x DDK contiene varios archivos tipo
include esenciales no incluidos en el paquete MASM32.
Construyendo un VxD en Lenguaje Ensamblador [Oney 96]
MIVXD.ASM
VMM.INC
MASM
6.11
MIVXD.DEF
MIVXD.OBJ
(Archivo COFF 32-bit)
LINK
Archivo de mapeo
MAPSYM
MIVXD.SYM
(Archivo de
Símbolos para el
depurador)
MIVXD.VXD
(Archivo
Ejecutable
Formato LE)
Esqueleto de un VxD en Lenguaje Ensamblador
.386p
include vmm.inc
DECLARE_VIRTUAL_DEVICE PRIMERVXD,1,0, PRIMERVXD_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER
Begin_control_dispatch PRIMERVXD
End_control_dispatch PRIMERVXD
end
.386p
Indica al ensamblador el uso del set de instrucciones 80386. También puede ser .486p ó .586p
include vmm.inc
Es indispensable incluir el vmm.inc. Contiene la definición de las macros que debe tener el código fuente.
DECLARE_VIRTUAL_DEVICE PRIMERVXD,1,0, PRIMERVXD_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER
Declaración de macro de uno de los 22 miembros de la DDB (Device Descriptor Block) Estructura que contiene información vital del VxD.
Begin_control_dispatch PRIMERVXD
End_control_dispatch PRIMERVXD
Macro que define el procedimiento de control del dispositivo que es la función que la VMM llama cuando hay mensajes de control de nuestro VxD.
Ejemplo de un VxD en Lenguaje Ensamblador
l .386p
include vmm.inc
include shell.inc
DECLARE_VIRTUAL_DEVICE MENSAJE,1,0, MENSAJE_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER
Begin_control_dispatch MENSAJE
Control_Dispatch Create_VM, OnVMCreate
Control_Dispatch VM_Terminate2, OnVMClose
End_control_dispatch MENSAJE
VxD_PAGEABLE_DATA_SEG
MsgTitle db “Cuadro de dialogo de un VxD",0
VMCreated db “Una VM es creada",0
VMDestroyed db “Una VM es destruida",0
VxD_PAGEABLE_DATA_ENDS
VxD_PAGEABLE_CODE_SEG
BeginProc OnVMCreate
mov ecx, OFFSET32 VMCreated
CommonCode:
VMMCall Get_sys_vm_handle
mov eax,MB_OK+MB_ICONEXCLAMATION
mov edi, OFFSET32 MsgTitle
xor esi,esi
xor edx,edx
VxDCall SHELL_Message
ret
EndProc OnVMCreate
BeginProc OnVMClose
mov ecx,OFFSET32 VMDestroyed
jmp CommonCode
EndProc OnVMClose
VxD_PAGEABLE_CODE_ENDS
End