# Re: elencare i dischi di sistema

**URL:** <https://www.ruby-forum.com/t/re-elencare-i-dischi-di-sistema/107059>\
**Category:** IT\
**Created:** [June 17, 2007, 12:44pm UTC](https://www.ruby-forum.com/t/re-elencare-i-dischi-di-sistema/107059 "2007-06-17T12:44:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 17, 2007, 12:44pm UTC](https://www.ruby-forum.com/t/re-elencare-i-dischi-di-sistema/107059/1 "2007-06-17T12:44:57Z")

</div>

grazie ragazzi, siete MITICI!! era proprio quello di cui avevo bisogno,  
il  
passo successivo sarebbe stato distinguere i dischi removibili da quelli  
fissi… non mi resta che fare delle prove 🙂

p.s.  
…che cacchio è WMI?  
Daniele, dove posso trovare documentazione in merito?

grazie.

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 17, 2007, 2:42pm UTC](https://www.ruby-forum.com/t/re-elencare-i-dischi-di-sistema/107059/2 "2007-06-17T14:42:14Z")

</div>

On 6/17/07, Fabio P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> grazie ragazzi, siete MITICI!! era proprio quello di cui avevo bisogno, il  
> passo successivo sarebbe stato distinguere i dischi removibili da quelli  
> fissi… non mi resta che fare delle prove 🙂

Utilizzando il modulo windows-pr puoi sfruttare la funzione  
GetDriveType per ottenere il tipo dell’unitÃ . Espando il primo esempio  
che ho fatto giusto per darti piÃ¹ idee su come potresti utilizzare nel  
caso questo modulo, poi la sperimentazione Ã¨ tutta tua 🙂

require ‘windows/volume’  
include Windows::Volume

def get\_drive\_letters  
buffer = " " \* 1024  
length = GetLogicalDriveStrings(buffer.length, buffer)  
buffer[0…length].split(0.chr)  
end

def get\_drive\_type(root\_path\_name)  
GetDriveType(root\_path\_name)  
end

def drive\_types\_hash(drives)  
get\_drive\_letters.inject({}) do |hash, drive|  
hash[drive.delete(‘:\’)] = get\_drive\_type(drive)  
hash  
end  
end

p drive\_types\_hash(get\_drive\_letters)  
#=\> {“A”=\>2, “C”=\>3, “D”=\>3, “E”=\>5, “F”=\>5, “G”=\>2, “H”=\>2}

Aprendo lib\windows\volume.rb puoi trovare all’inizio la definizione  
delle costanti che rappresentano il tipo di volume, comunque sono:

DRIVE\_UNKNOWN = 0  
DRIVE\_NO\_ROOT\_DIR = 1  
DRIVE\_REMOVABLE = 2  
DRIVE\_FIXED = 3  
DRIVE\_REMOTE = 4  
DRIVE\_CDROM = 5  
DRIVE\_RAMDISK = 6

Se invece intendi usare l’ultimo esempio, quello con WMI, per  
recuperare _tutti_ i tipi di unitÃ , come nell’esempio di windows-pr,  
ti basta modificare la query in:

SELECT \* FROM Win32\_LogicalDisk

e poi iterando sul set di risultati controlli il valore di  
device.DriveType per risalire al suo tipo. I valori sono gli stessi  
delle costanti che hai visto sopra, comunque c’Ã¨ tutta la  
documentazione estesa sulla classe WMI Win32\_LogicalDisk all’indirizzo

> **[Win32\_LogicalDisk class - Win32 apps](https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logicaldisk?redirectedfrom=MSDN)**
>
> Represents a data source that resolves to an actual local storage device on a computer system running Windows.

> p.s.  
> …che cacchio Ã¨ WMI?  
> Daniele, dove posso trovare documentazione in merito?

WMI Ã¨ l’acronimo di Windows Management Instrumentation ed Ã¨  
un’infrastruttura per la gestione di dati e operazioni in sistemi  
Windows attraverso un’interfaccia pesantemente semplificata (piÃ¹  
astratta e generica), torna molto utile per automatizzare operazioni  
e/o task di amministrazione oppure per ricavare eventi o informazioni  
di sistema, il tutto da computer locale o da postazioni remote.

Sempre su MSDN trovi tutte le informazioni che vuoi su WMI partendo da  
qui: [Windows Management Instrumentation - Win32 apps | Microsoft Learn](http://msdn2.microsoft.com/en-US/library/aa394582.aspx)

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 17, 2007, 3:25pm UTC](https://www.ruby-forum.com/t/re-elencare-i-dischi-di-sistema/107059/3 "2007-06-17T15:25:19Z")

</div>

On 6/17/07, Daniele A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

err, ovviamente:

> def drive\_types\_hash(drives)  
> get\_drive\_letters.inject({}) do |hash, drive|

in realtÃ dovrebbe essere:

> def drive\_types\_hash(drives)  
> drives.inject({}) do |hash, drive|

😃
