¿Cómo programar las funciones API de Windows?
lo que se ocupa directamente del hardware es el WINDOWS DDK (kit de desarrollo de controladores de dispositivos)
que se ocupa del hardware.
Para obtener más información, consulte CSDN:
Por ejemplo: /article/80266.shtm
Programa API VxD
VxD proporciona programas API en modo V86 y en modo protegido que permiten que las aplicaciones y otro software que se ejecuta en una máquina virtual accedan a la funcionalidad VxD. Para que estos procedimientos opcionales sean válidos, VxD debe definirlos como argumentos para la macro Declare_Virtual_Device; si estos procedimientos no están definidos, VMM asumirá que VxD no tiene procedimientos API.
Las aplicaciones u otro software que se ejecuta en una máquina virtual pueden obtener la entrada de un programa API de máquina virtual específico configurando el registro BX en el identificador VxD y llamando a la función de obtención de dirección de entrada del dispositivo (función INT 2FH 1684H) La dirección que VMM devolverá para que la aplicación pueda llamar indirectamente al programa API.
Cuando la aplicación llama a la dirección de entrada, el VMM guardará el registro de la aplicación y llamará al programa API VxD correspondiente. El programa guardará el identificador de la VM actual en el registro BX y guardará la dirección de la. Estructura Client_Reg_Struc al registro EBP.
Los programas API deben detectar el valor del registro del cliente (usando la estructura Client_Reg_Struc) para determinar qué llamada API se está ejecutando.
Normalmente, la mayoría de los programas API utilizan el registro AH para especificar el número de función principal, el registro AL para especificar el número de función secundaria y otros registros de clientes para especificar parámetros adicionales. El programa API devuelve el valor modificando el registro del cliente.
El siguiente ejemplo proporciona un procedimiento almacenado API: VSAMPLED_API_Get_Version:
BeginProc VSAMPLED_API_Get_Version
movzx eax , [ebp.Client_AX] ;Tome el número de función
o eax, eax
jnz Undefinido
Get_Version:
mov [ebp.Client_AX], 030AH.Client_AX], 030AH ;Devuelve el valor en el registro del cliente AX
y [ebp.Client_Flags], NO CF_Mask; borre la bandera del feed
ret
Indefinido:
o [ebp.Client_Flags], CF_Mask ;Establecer el indicador de alimentación
ret
EndProc VSAMPLED_API_Get_Version