Newsgroup: it.comp.programmare.win32
Titolo: VxD, int 20h e API

un po di tempo fa si era parlato di come usare i "servizi" elencati nella
lista di interrupt sotto l'int 20h, all'interno di applicazioni Win32.
si era parlato di una funzione API che evitasse di inserire codice assembly.
io purtroppo finora non sono riuscito a trovare questa funzione. e
ovviamente non sono riuscito a capire come si "passano" i parametri e si
ottengono i risultati di tali funzioni dell'int 20h.
qualcuno puo darmi delucidazioni in merito? ci sono degli esempi da qualceh
parte? sull'MSDN non ho trovato niente, eppure la lista di interrupt è
riiiiiiicca di funzioni interessanti...
grazie
MarioH

DeviceIOContrl ti pò essere d'aiuto ?
oppure
db	CDh
db 	20h
dw 	ID_VXD
dd 	SERVICE
parametri........

 riiiiiiicca di funzioni interessanti...
Ad esempio? Non ho presente nessuna funzione del DOS che potrebbe avere
qualche utilita`, a parte quelle di I/O a basso livello (che sotto a
NT/2000 - e probabilmente anche nelle future versioni di Windows - si fa
gia` attraverso CreateFile e Read/WriteFile).
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/

> DeviceIOContrl ti pò essere d'aiuto ?
uhm... ora provo, acnhe se credo che avrò qualceh problema per quanto
riguarda i numeri delle funzioni, subfunzioni o come cavolo si chiamano
loro... ::))))))
MarioH

gia` attraverso CreateFile e Read/WriteFile).
guarda che noi parlavamo di VXD e int20h, non di int21h, 24h, 25h e
roba varia.....
ciao
cod

 si possono chiamare da ovunque!
Non e` vero. In protected mode a ring 3 puoi chiamare alcuni interrupt *del
protected mode*, non quelli del real mode. Se non erro l'INT20H sotto al DOS
serviva per terminare un programma, quindi quello a cui tu ti riferisci e`
un altro. Ovviamente capita che alcuni interrupt abbiano lo stesso utilizzo
sia in real che in protected mode (ad esempio mi pare che l'INT3 sia uno di
questi), ma e` solo perche` hanno fatto apposta a "mapparli" nello stesso
modo.
D'altra parte e` per questo che esiste il driver vwin32.vxd: perche` non
puoi chiamare l'INT21h del DOS direttamente da un'applicazione Windows.


puoi chiamare l'INT21h del DOS direttamente da un'applicazione Windows.
beh, fare uno scanning dello stack, e di conseguenza entrare nel
kernel di NT e riprocurarsi le api fa lo stesso :)
ciao
cod

lista di interrupt sotto l'int 20h, all'interno di applicazioni Win32.
i VxD services (quelli esposti attraverso l'interfaccia trap 20h) non
sono invocabili da codice a Ring3.. il gate ha DPL == 0 il che implica
che un  int 20h a UM (che sua PM16/32 o V86) genera inevitabilmente
un #GP, e il #GP handler di win9x non prevede meccanismi di
"emulazione" in questi casi..
puoi utilizzare come e' stato detto alcuni services di vwin32 via
DeviceIOControl oppure la i c.d. win32 VxD services attraverso
l'API undocumented di Kernel32 esportata come ordinal 1 in su
(la nota VxDCall0 che ritrovinei vari Pietrek,Shulman.ccc) ma
no way di invocare direttamente i vxd services da UM..
Saluti,
 Walker Boh

roba varia.....
credo che la sua l'osservazione fosse rivolta ad evidenziare
che i principali services del DOS/BIOS sono esposti alle 
applicazioni win32 da vvwin32 attraverso l'interfaccia DeviceIOControl
(VWIN32_DIOC_DOS_IOCTL, VWIN32_DIOC_DOS_INTx,ecc.),
senza quindi la necessita' di thunking, VxDCall o trucchi
fantasmagorici...
Saluti,
 Walker Boh