PDA

View Full Version : [C o JAVA]creazione di un disco in risorse


Frank1962
19-02-2008, 02:18
Su che librerie mi devo appoggiare, in java o c, per poter creare un disco virtuale che si veda come se fosse un vero e proprio disco "reale" nelle risorse del computer di windows?
Il programmino che devo fare alla fine non è un gran chè, un file di una decina di MB che, per necessità, sono costretto a far vedere come se fosse un disco....
qualcuno ha già tentato a far qualcosa del genere?

ciao e grazie
Frank

71104
19-02-2008, 13:48
non è semplice manco per niente, e volendo fare le cose in maniera esaustiva (leggasi: se vuoi creare l'emulazione di un vero hard disk, visibile anche agli altri programmi) il tutto potrebbe venirti a costare tempo (calcola almeno un anno per l'apprendimento del WDM, Windows Driver Model) e pure denaro (il WDK, Windows Driver Kit, non sempre viene distribuito gratuitamente; potresti doverlo comprare). ovviamente scordati Java, va fatto tutto in C.

fatta questa premessa, esistono due possibili strade, ciascuna coi pro e i contro:


estendere il namespace della shell: http://msdn2.microsoft.com/en-us/library/bb776813(VS.85).aspx

pro - è facile (relativamente)
contro - non ne sono del tutto sicuro, ma temo non ci sia modo di far puntare dei path verso i files di questa cartella virtuale; in altre parole la pseudocartella risultante sarà un vero hard disk solo per explorer e non per tutti gli altri programmi. inoltre, dovendo leggere un file che suppongo sia l'immagine di un hard disk con tanto di filesystem, non puoi affidarti ai FSD (File System Drivers) di Windows, ma devi scrivere il tuo codice di interpretazione del filesystem, il quale se è NTFS allora rinuncia direttamente e passa alla strada successiva.


scrivere un driver: http://msdn2.microsoft.com/en-us/library/aa972908.aspx
per l'esattezza un bus driver che emuli la presenza di un bus virtuale che crei un PDO (Physical Device Object) virtuale sul quale poi Windows monterà il suo driver per gli hard disk e il suo filesystem.

pro - non devi scrivere codice ne' per il riconoscimento ne' per l'interpretazione del filesystem perché ci pensa già Windows; inoltre sarà come se esistesse un vero hard disk con tanto di partizioni cartelle e files; verrà creata una lettera d'unità e tutti i programmi potranno accedere normalmente al contenuto dell'hard disk.
contro - è difficile e forse pure costoso (non ho controllato come sia la situazione attuale circa l'acquisizione di un WDK).

wisher
19-02-2008, 14:02
Ci sarebbe anche la soluzione semplicissima di mappare una normale cartella come se fosse un disco.
Tutto dipende da cosa devi farci con quel file

variabilepippo
19-02-2008, 14:15
Il programmino che devo fare alla fine non è un gran chè, un file di una decina di MB che, per necessità, sono costretto a far vedere come se fosse un disco....


71104 ha perfettamente ragione, non è un programma banale, per farti una vaga idea di cosa ti ritroveresti a dover implementare da' un'occhiata al codice di FileDisk (http://www.acc.umu.se/~bosse/) ed a quelli di Virtual Disk Driver (http://chitchat.at.infoseek.co.jp/vmware/vdk.html) e ImDisk (http://www.ltr-data.se/opencode.html#ImDisk).

Se ti interessa mappare un percorso in un drive allora puoi usare il comando subst (http://en.wikipedia.org/wiki/Subst).

Frank1962
19-02-2008, 16:11
Inanzitutto grazie per le vostre più che esaurienti risposte ...quello che voglio fare è poter "creare" una cartella o un disco che posso utilizzare come se fossero residenti sul disco fisso del computer ma che in realtà visualizzando e utilizzano i file in remoto presenti su un altro computer su internet (insoma un cosa molto vicina a samba o nfs, ma su internet).
Ho cercato n rete, con virgilio search engine, ma non ho trovato programmi che facessero una cosa simile e quindi ho pensato di implementarmi io qualche cosa....

Frank

gugoXX
19-02-2008, 16:46
Dovrebbe essere sufficiente mappare un drive di rete allora. (MyNetworkPlace -> Tools -> Map network drive)
Oppure usare l'istruzione NET USE, che e' quasi lo stesso.

Frank1962
19-02-2008, 16:54
Dovrebbe essere sufficiente mappare un drive di rete allora. (MyNetworkPlace -> Tools -> Map network drive)
Oppure usare l'istruzione NET USE, che e' quasi lo stesso.
questo funziona in una intranet ....a me serve che funzioni per internet

gugoXX
19-02-2008, 17:17
Ah si, scusa, e' solo un pezzo allora.
Lo so fare per una servizio ftp remoto, se ti serve. Puo' essere che funzioni anche per una http, ma non sono sicuro.
Fai un fischio se ti serve.

Frank1962
19-02-2008, 17:37
Ah si, scusa, e' solo un pezzo allora.
Lo so fare per una servizio ftp remoto, se ti serve. Puo' essere che funzioni anche per una http, ma non sono sicuro.
Fai un fischio se ti serve.

si lo so fare anche io ...però non c'è quella funzionalità che mi server in primis, cioè doppio click sul file e lo apro, come se fosse presente fisicamente sul pc; con un servizio tipo ftp o http è vero che li vedo come se fossero file sul computer però quando vado ad aprirli mi apre il brows1er per scaricarli completamente, cosa che a me proprio non interessa! ...considerando che poi, mediamente, sono tutti file testuali .....tutti da scaricare prima di aprire, troppo noioso!

71104
19-02-2008, 18:19
Inanzitutto grazie per le vostre più che esaurienti risposte ...quello che voglio fare è poter "creare" una cartella o un disco che posso utilizzare come se fossero residenti sul disco fisso del computer ma che in realtà visualizzando e utilizzano i file in remoto presenti su un altro computer su internet (insoma un cosa molto vicina a samba o nfs, ma su internet). :wtf: è molto diverso da quello che avevi chiesto nel primo post...
in questo caso allora è molto più semplice, dovresti poter risolvere con WebDAV.

Frank1962
19-02-2008, 18:56
:wtf: è molto diverso da quello che avevi chiesto nel primo post...
in questo caso allora è molto più semplice, dovresti poter risolvere con WebDAV.
si in effetti sono colpevole di non aver spiegato bene il "fine diretto" di quello che volevo fare, ero già nella "mentalità" di come scrivere l'applicativo e mi mancava il riuscire a farlo vedere come cartella/disco.
Di una cosa sono perplesso però, ma webdav mi permette di potere aprire veramente una file come se fosse locale? ...non vorrei che fosse come per il protocollo dell'ftp che mi fa scaricare per intro ogni singolo file che voglio aprire....

Frank1962
20-02-2008, 01:34
:wtf: è molto diverso da quello che avevi chiesto nel primo post...
in questo caso allora è molto più semplice, dovresti poter risolvere con WebDAV.
ho provato a installare in locale questo webdav però mi sembra molto un cvs/svn ....cioè semplicemente mi collego e vedo i file presenti ma senza poterli utilizzare come se fossero in una cartella locale, per esempio, mi visualizza tutti i file testali presenti nelle cartelle condivise ma per aprirli devo comunque sempre prima scaricarli ....stessa cosa per un video .avi, prima lo devo scaricare tutto e poi lo posso aprire: e siamo punto a capo con con ftp e similari :(

...o forse ho sbagliato io a installare/usare questo webdav...

71104
20-02-2008, 02:34
be', non so quale software tu abbia installato ma a dir la verità dal lato client già Windows di per se' offre supporto per cartelle webdav. comunque al mio precedente post ancora non avevo capito che hai la necessità di avere una sorta di cache locale, temo che un client webdav non possa esserti d'aiuto.

riassumendo, tu praticamente hai la necessità di avere una cartella o pseudo-tale in locale dove tu accedi a dei files che la prima volta vengono scaricati da internet mentre le volte successive ne esistono delle copie in locale, giusto?

sinceramente non so come potresti fare, l'unica che mi viene in mente è appunto cvs o svn: non va bene?

inoltre non capisco come mai ti serve per forza la visuale sotto forma di cartella, pseudocartella, drive, o pseudo-drive. in parole povere qual è il tuo obiettivo finale? cosa devi fare?

Frank1962
20-02-2008, 16:20
Su internet cercando però ho trovato questo:


Webdav is a protocol. It enhances http, and works thru http, so you only need to open port 80 (or 443 if https)

It allows you to work with remote files asif they were on your machine.

Example... Ftp, for you to edit a txt file on an ftp server, you need to download the file, edit, and upload the revised file.

Webdav allows you to work with the file, from the server, without downloading.

It also allows for "locking" of files, which means, multiple users can work with a file at the same time, but only 1 at a time can make changes.

Wedav is also secure because it works along side ntfs permissions, and can be used over https, so everything is encrypted.

With FTP you'd have to setup a vnp connection to the ftp server, and enable IPsec policies over that vpn.

Besides that.... Webdav allows you to pipe multiple transfers, as opposed to ftp opening a new connection for every transfer.

It is more efficient, and nativley support by windows (webfolders IS webdav)and ultimatly more secure than FTP, and the fact that when working with xp, every app sees the file as if it were local, makes it a much more efficient webmastering/file transfering solution.

It means less ports to open on your firewall, and a smaller attack zone for hackers, cause it works from port 80 with http

sembra che questo WEBDAV allora faccia al caso mio, però evidentemente non riesco a farlo funzionare perchè la view dei file e solo come una lista di link ai file e alle cartelle; per rispondere al tua domanda 71104 mi trovo troppo spesso a lavorare su computer differenti su molti file di progetto testuali, mediamente grandi, che apro con varie applicazioni a seconda di dove mi trovo, dal blocco note ad eclipse ecc... , e mi sarebbe comodissimo poter avere le totali funzionalità che ha una cartella locale ma ... con contenuto remoto :D
necessariamente a me non serve la modalità cache anche perchè i file non sono molto grandi, magari tornerebbe utile se vogli aprire un mp3 o un filmato avi

Frank

71104
20-02-2008, 16:34
ma non capisco allora che c'entrava la storia dell'hard disk virtuale... :wtf:

comunque come mai un repository svn non va bene? sono stati inventati esattamente per quello. se non va bene perché è client/server mentre a te serve qualcosa che sia peer-to-peer allora prova git.

Frank1962
20-02-2008, 16:46
ma non capisco allora che c'entrava la storia dell'hard disk virtuale... :wtf:

comunque come mai un repository svn non va bene? sono stati inventati esattamente per quello. se non va bene perché è client/server mentre a te serve qualcosa che sia peer-to-peer allora prova git.

perchè cmq qualche volta vorrei metterci qualche video e immagine da poter vedere/caricare direttamente :)

71104
20-02-2008, 16:55
perchè cmq qualche volta vorrei metterci qualche video e immagine da poter vedere/caricare direttamente :) embe'...?

Frank1962
20-02-2008, 18:15
embe'...?

embè non voglio che me carichi tutti e 70mega e rotti video della partenza dello shuttle in HD per poi farmelo vedere ....deve aprirse subito! :D (cosa che csv/svn mica fanno)

variabilepippo
20-02-2008, 18:35
Non ho letto tutta la discussione, mi sono fermato al messaggio #5, ma mi sembra di capire che tu voglia accedere a dei contenuti, di vario tipo (testi, video, etc), pubblicati su un server (di qualche tipo) Internet come se fossero presenti in una rete locale e senza averli precedentemente scaricati. Giusto?

Frank1962
20-02-2008, 19:43
Non ho letto tutta la discussione, mi sono fermato al messaggio #5, ma mi sembra di capire che tu voglia accedere a dei contenuti, di vario tipo (testi, video, etc), pubblicati su un server (di qualche tipo) Internet come se fossero presenti in una rete locale e senza averli precedentemente scaricati. Giusto?

http://gaming.ngi.it/forum/images/ngismiles/approved.gif

wingman87
20-02-2008, 19:44
embè non voglio che me carichi tutti e 70mega e rotti video della partenza dello shuttle in HD per poi farmelo vedere ....deve aprirse subito! :D (cosa che csv/svn mica fanno)
Cioè, vorresti vederlo in stream?

variabilepippo
20-02-2008, 20:11
http://gaming.ngi.it/forum/images/ngismiles/approved.gif

Anche a me piacerebbe andare in Australia senza dovermi sorbire 24 di volo o vedere un film senza doverlo scaricare, però per farlo dovrò attendere che venga inventato il teletrasporto! ;)

Per vedere un video o ascoltare un file audio senza doverli scaricare per intero esiste lo streaming, latenze varie permettendo si ottiene una discreta fluidità ma siamo comunque lontani dalla bandwidth di una LAN.

Frank1962
20-02-2008, 20:25
Anche a me piacerebbe andare in Australia senza dovermi sorbire 24 di volo o vedere un film senza doverlo scaricare, però per farlo dovrò attendere che venga inventato il teletrasporto! ;)

Per vedere un video o ascoltare un file audio senza doverli scaricare per intero esiste lo streaming, latenze varie permettendo si ottiene una discreta fluidità ma siamo comunque lontani dalla bandwidth di una LAN.
considerando un bitrate, nei casi peggiori, di 800Kbit/s se i file si trovano su un server connesso linea in up di 2Mbit/s non vedo che problema ci possa essere.... ovviamente sarebbe tutta un'altra cosa se questi files fossero "condivisi" con molte più persone, ma in questo caso servirebbe solo a me e sarei l'unico a utilizzare tale servizio

variabilepippo
20-02-2008, 21:14
considerando un bitrate, nei casi peggiori, di 800Kbit/s se i file si trovano su un server connesso linea in up di 2Mbit/s non vedo che problema ci possa essere


Hai a disposizione un server con un upstream prossimo ad 1Mbps ed immune dalla naturale congestione di Internet? Se ka risposta è sì puoi pensare di installare una delle tante piattaforme di streaming esistenti.

Frank1962
21-02-2008, 02:14
Hai a disposizione un server con un upstream prossimo ad 1Mbps ed immune dalla naturale congestione di Internet? Se ka risposta è sì puoi pensare di installare una delle tante piattaforme di streaming esistenti.

un esempio di una di queste piattaforme? :confused: