View Full Version : [.NET] Librerie per l'accesso a partizioni, mbr, flag di boot, ecc...
Dopo aver tentato di fare in Java un programma che renda botabili le chiavette USB con alcune feauture aggiuntive sono giunto alla conclusione, anche grazie al vostro aiuto che Java non è adatto per tale compito.
Ho deciso dunque di vedere se riesco con .NET.
Chiedo allora a voi: sapete se vi sono librerie (ufficiali o meno) che permettano:
- creazione di partizioni
- settaggio dei flag delle partizioni
- modifica del MBR
- ecc...
Sto cercando in giro ma per il momento non riesco a trovare nulla di utile.
Ho letto che per rendere la partizione avviabile occorre settarla attiva con boot flag settato (mi pare sia il valore 0x80 all'inizio della partizione), però comunque come posso fare?:help: :help: :help:
Ringrazio chiunque riesca a darmi una mano:) :)
!k-0t1c!
03-05-2010, 23:01
Ricerca disperata, direi.
La CLR (Common Language Runtime) opera strettamente in user mode (ring 3) e quel che vuoi fare richiede accesso esclusivo in scrittura, che puoi ottenere solo in kernel mode (ring 0).
Non troverai niente in .NET ma se scrivi (o trovi già scritto) un driver puoi creare un'interfaccia .NET che tramite chiamate P/Invoke a DeviceIoControl manda messaggi al tuo driver controllandone le azioni. Naturalmente se vuoi far qualsiasi cosa sul disco di windows la questione diventa delicatissima, preparati ad abbandonare ogni idea di .NET e, se non hai vasta esperienza in materia, preparati un'immagine Ghost perché ti risparmierà tanto tempo...
nuovoUtente86
04-05-2010, 00:28
Non puoi farlo in .Net nativo, ma sfruttando il concetto di path UNC messo a disposizione nelle API win32, puoi trattare ogni dispositivo di storage come fosse un file. Per integrarle nella tua applicazione .net devi utilizzare un bridge interop.
Ricerca disperata, direi.
La CLR (Common Language Runtime) opera strettamente in user mode (ring 3) e quel che vuoi fare richiede accesso esclusivo in scrittura, che puoi ottenere solo in kernel mode (ring 0).
Non troverai niente in .NET ma se scrivi (o trovi già scritto) un driver puoi creare un'interfaccia .NET che tramite chiamate P/Invoke a DeviceIoControl manda messaggi al tuo driver controllandone le azioni. Naturalmente se vuoi far qualsiasi cosa sul disco di windows la questione diventa delicatissima, preparati ad abbandonare ogni idea di .NET e, se non hai vasta esperienza in materia, preparati un'immagine Ghost perché ti risparmierà tanto tempo...
Non puoi farlo in .Net nativo, ma sfruttando il concetto di path UNC messo a disposizione nelle API win32, puoi trattare ogni dispositivo di storage come fosse un file. Per integrarle nella tua applicazione .net devi utilizzare un bridge interop.
Vi ringrazio entrambi per le risposte! :D
Come immaginavo non si tratta di un compito facile vedo. La mia intenzione era quella di operare su drive USB, non sui dischi di sistema (non sia mai che succede un disastro :Prrr:)
cambia qualcosa? Escluderei di scrivere un driver cosa di cui non sono assolutamente capace :(
x nuovoUtente:
Non ho capito invece moltissimo di quanto dici :( se le tratto come un file cosa riesco a fare?
Volevo fare un appunto inoltre:
quando ho provato con java ho tentato di agganciarmi a diskpart, tool da linea di comando di windows che opera queste feature ma da linea di comando il livello comprensione riguardante su quale disco si sta operando (sopratt per l'utente medio) è abbastanza basso e si rischia di fare casini anche grossi.
L'idea che mi è stata data è di lanciare diskpart, agganciare gli stream di I/O e usare quelli per pilotarlo da una gui più comprensibile :)
Ho però riscontrato problemi (con java, non so con altri linguaggi) per il sistema UAC di Vista e 7, che non fa runnare diskpart in quanto richiede privilegi di amministratore e quindi al momento di far lanciare il programma da java ottengo un'eccezione che mi dice che sono richiesti privilegi elevati.
Ora volevo sapere l'idea è applicabile con .NET?:)
!k-0t1c!
04-05-2010, 09:26
Se tratti il drive come un file scrivi direttamente sui settori nello stesso modo che useresti per un file, quindi aperto il disco come file scriveresti direttamente all'inizio del disco.
L'operazione (astuta, non mi era venuta in mente) che ti ha suggerito nuovoUtente richiede comunque privilegi amministrativi su Vista e 7 e potrebbe essere inoltre flaggata da alcuni HIPS come maligna (anni fa ebbi l'MFT di un hard disk distrutto da un virus che usava la tecnica descritta ma poi gli HIPS sono diventati più furbi e questo comportamento oggi viene rilevato).
Comunque in C/C++ quel che ti ha suggerito nuovoUtente si fa con CreateFile, ReadFile e WriteFile. Non credo che il wrapping di queste funzioni in System.IO faccia al caso tuo, quindi preparati a usare un po' di P/Invoke :)
nuovoUtente86
04-05-2010, 10:42
ecco una serie di limitazioni introdotte in Vista/S2008/Seven che non possono essere rimosse neppure con i diritti amministrativi.
http://support.microsoft.com/kb/942448
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.