PDA

Visualizza la versione completa : [C/C++] GetFileSizeEx non lavora sui device


daniele_dll
22-05-2006, 13:01
GetFileSizeEx mi restituisce errore e non funziona sui device

Quale funzione devo usare al posto di quella? Devo utilizzare DeviceIOControl per acquisire la dimensione del disco?

In pratica con createfile accedo a \\.\PhysicalDriveX e poi svolgo le mie operazioni per non posso acquisire la dimensione del disco usando GetFileSizeEx

qualche idea? :stordita:

alka
22-05-2006, 14:01
Il linguaggio di programmazione probabilmente andato perso con le modifiche.
Si tratta di C++? :)

daniele_dll
22-05-2006, 14:01
per gli interessati

esiste uno IOCTL da usare con DeviceIOControl per leggere la dimensione del device ... in pratica ritorna la geometria del disco

lo IOCTL
IOCTL_DISK_GET_DRIVE_GEOMETRY

e vuole questa struttura in uscita
DISK_GEOMETRY

senza nessuna struttura in entrata

daniele_dll
22-05-2006, 14:21
Originariamente inviato da alka
Il linguaggio di programmazione probabilmente andato perso con le modifiche.
Si tratta di C++? :)

avevo messo C/C++

comunque l'uno o l'altro indifferente ... tanto entrambi usano le stesse chiamate allo stesso modo :D

andbin
22-05-2006, 15:06
Originariamente inviato da daniele_dll
GetFileSizeEx mi restituisce errore e non funziona sui deviceCome dice il nome stesso della funzione, credo proprio che lavori solamente su handle a file.

daniele_dll
22-05-2006, 15:19
Originariamente inviato da andbin
Come dice il nome stesso della funzione, credo proprio che lavori solamente su handle a file.

anche ReadFile, WriteFile e SetPointerFileEx lavorano su handle di file ... ma funzionano perfettamente su quel file speciale

e comunque ho appositamente postato per sapere delle soluzioni alternative non per avere detto che GetFileSizeEx non funzionava con i device dato che lo avevo scritto come prima cosa ...

andbin
22-05-2006, 16:06
Originariamente inviato da daniele_dll
e comunque ho appositamente postato per sapere delle soluzioni alternative non per avere detto che GetFileSizeEx non funzionava con i device dato che lo avevo scritto come prima cosa ... S, scusa ... non volevo essere scortese, ovviamente! :)

Guarda ... dovrei fare delle prove ma la butto l: una volta che hai aperto il device con CreateFile usando "\\.\PhysicalDriveX", potresti provare a fare un seek alla fine con SetFilePointer e vedere poi "dove" ti trovi.
Non ne sono sicuro al 100% ... se non giusto, chiedo scusa. ;)

oregon
22-05-2006, 16:44
Scusa daniele ma non mi e' chiaro *tutto* il problema ...

Parli di un disco e di acquisire la sua grandezza e dici che non puoi usare la GetFileSizeEx (giustamente dico io, dato che quella si occupa di file ...) ...

Forse mi sono perso qualcosa, ma non credo che il problema sia stato enunciato chiaramente ... per esempio ... di quale device stiamo parlando?

oregon
22-05-2006, 17:01
Forse e' questo (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/calling_deviceiocontrol.asp) quello che cerchi ?

daniele_dll
22-05-2006, 18:35
Originariamente inviato da andbin
S, scusa ... non volevo essere scortese, ovviamente! :)

Guarda ... dovrei fare delle prove ma la butto l: una volta che hai aperto il device con CreateFile usando "\\.\PhysicalDriveX", potresti provare a fare un seek alla fine con SetFilePointer e vedere poi "dove" ti trovi.
Non ne sono sicuro al 100% ... se non giusto, chiedo scusa. ;)

eheheh non ti preoccupare :D

allora, innanzi tutto grazie per il consiglio per purtroppo SetFilePointerEx la seconda cosa che ho provato proprio per vedere se impostando l'offset su zero e il posizionamento partendo dalla fine potevo leggere la dimensione dal valore di ritorno ma purtroppo non gli proprio piaciuto


Originariamente inviato da oregon
Scusa daniele ma non mi e' chiaro *tutto* il problema ...

Parli di un disco e di acquisire la sua grandezza e dici che non puoi usare la GetFileSizeEx (giustamente dico io, dato che quella si occupa di file ...) ...

Forse mi sono perso qualcosa, ma non credo che il problema sia stato enunciato chiaramente ... per esempio ... di quale device stiamo parlando?

Il problema lo avevo gi risolto, per questo avevo postato il discorso del DeviceIOControl

cmq grazie comunque

Loading