Newsgroup: it.comp.programmare.win32
Titolo: sovrascrivere API & hardware virtuale

sorry se i 2 argomenti sembrano adatti a 2 thread diversi ma io ho un
unico problema che li coinvolge entrambi.
API
supponiamo che io voglia una MessageBox(...) lievemente diversa da
quella standard. allora prendo il mio bel compilatore C? C++?
assembler? (ditemi voi) e scrivo la nuova funzione all'interno di un
vxd? dll? exe? (ditemi voi) poi faccio in modo (e qui sta in nocciolo)
che all boot venga mappata nello spazio delle varie kernel32.dll la
mia funzione ovviamente accetta gli stessi parametri d'ingresso e
produce uscite coerenti con l'api originale, solo che da questo
momento in poi qualunque programma venga caricato in memoria quando il
loader trova il riferimento a MessageBox fa in modo che venga chiamata
la mia nuova funzione. si può fare? speriamo...
HARDWARE
supponiamo che voglia far finta di avere un secondo disco rigido.
supponiamo anche che non lo tratterò come un disco normale, ad esempio
non cercherò di formattarlo a basso livello, non mi metterò ad
assegnargli risorse I/O ecc. solo un disco che mi permetta di eseguire
con successo fileopen, fileclose, read e write su file (neanche su
settori) findfirst ecc... da dove comincio?
voglio simulare quello che non ho:
o "correggo" certe api
o lo "simulo"
:) tnx a lot
Ryo

 settori) findfirst ecc... da dove comincio?
Con un ramdrive? :)
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

operativo.
poniamo un caso concreto: voglio implementare in win32 qualcosa di
simile al "mount" di unix. ho quindi bisogno di intercettare le
chiamate che interessino ad es "c:\mount\driveA\" per farle funzionare
correttamente. se un programaa di 3parti chiama una fileopen devo
controllare se apre c:\chenneso\miofile.txt e in tal caso passare il
controllo alla vecchia api, o se cerca di accedere a
c:\mount\driveA\miofile.txt e in tal caso ad es modificare il
parametro indirizzo (portandolo verso a:\miofile.txt) e poi passare il
controllo sempre alla vecchia api
e' possibile una cosa del genere?
tnx Ryo

e' possibile una cosa del genere?
sinceramente non credo sia possibile.
la gestione delle unità in windows è differente da quella di *nix, per
ogni lettera di unità carica un vdx diverso a seconda del tipo di
dispositivo (uno per il floppy, uno per l'hd...).
I modi di intercettare le chiamate a CreateFile o OpenFile sono due:
1- sostituendo la funzione originale
2- modificando il vxd di sistema
Nel modo 1 o modifichi la dll originale sull'hd o la modifichi in
memoria, con un trucco astuto (vedi sorgenti del noto RAT "Back
Orefice 2K, "process_hop.cpp"). Modificarla sull'hd è un lavoro da
vero artista e possiamo tranquillamente escluderlo (specialmente
perchè la funzione è nel kernel32.dll).
Nel modo 2 devi modificare il driver di windows e aggiungerci qualche
if. Considera che i file vxd non sono semplicissimi da imparare e
specialmente sono quasi tutti scritti in assembly (ciao assembly :-)
Non so se è possibile questo metodo perchè non so quali parametri
ricevono le sue funzioni, in ogni caso è peggio di prima.
Potresti invece aggiungere una nuova unità "montata" dove ti pare e
piace senza bisogno di riavviare, come fa lo iOmega Zip, vedi
"caricamento dinamico di vxd" (credo).
Credo che dovrai rinunciare a meno che non hai i sorgenti di windows!
(e non tentare di disassemblarlo perchè è inutile, c'ho già provato
:o)
ciauz

 correttamente.
Per quanto riguarda la semplice "intercettazione", e` sicuramente
fattibile: se vai sul sito che ti ho detto (
www.sysinternals.com
) trovi
un programmino, filemon, che ti monitorizza ogni singolo accesso a un
file/directory. Forse, dato che forniscono anche i sorgenti del driver,
si potrebbe riuscire a modificarlo (in modo che "filtri" gli accessi che
ti interessano) anche senza conoscere troppo bene il DDK.
