Infos wmi des disques durs (lien lecteur logique / lecteur physique)

Soyez le premier à donner votre avis sur cette source.

Vue 8 069 fois - Téléchargée 397 fois

Description

Encore un titre obscur... j'ai pas trouvé mieux :p

En fait, il s'agit de manipuler WMI (je ne connais que très peu WMI)
afin d'établir le lien entre lecteur logique (C: par exemple) et la classe WMI représentant le lecteur physique.

Il s'agit d'aider un peu la discussion débutée ici:
http://www.vbfrance.com/code.aspx?ID=27883

Source / Exemple :


Private Function GetDiskDriveFromLogical(ByRef vsDriveLetter As String) As Object
Dim sBuffer As String
Dim oWMI As Object
Dim oItem As Object
Dim oCol As Object
    If LenB(vsDriveLetter) Then
        sBuffer = Left$(vsDriveLetter, 1)
    Else
        sBuffer = Left$(App.Path, 1)
    End If
    
    Set oWMI = GetObject("winmgmts:root\cimv2")
    If Not Nothing Is oWMI Then
        '# On récupère la partition liée au lecteur logique
        Set oCol = oWMI.ExecQuery("REFERENCES OF {Win32_LogicalDisk='" & sBuffer & ":'} WHERE ResultClass = Win32_LogicalDiskToPartition")
        For Each oItem In oCol
            '# On passe du lien, à la partition
            Set oItem = GetObject("winmgmts:" & oItem.Antecedent)
            Exit For
        Next oItem
        
        '# On refait la même, on passe de la partition au disque physique
        sBuffer = oItem.DeviceId
        Set oCol = oWMI.ExecQuery("REFERENCES OF {Win32_DiskPartition='" & sBuffer & "'} WHERE ResultClass=Win32_DiskDriveToDiskPartition")
        For Each oItem In oCol
            '# On passe du lien "partition/disque" au disque
            Set GetDiskDriveFromLogical = GetObject("winmgmts:" & oItem.Antecedent)
            Exit For
        Next oItem
    End If
End Function

Conclusion :


Y'a peut être plus simple, que de faire toutes ces requêtes. Comme énoncé, je ne manipule que très occasionnellement WMI, donc...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
11 juin 2012

Merci, pour vos réponses.

Finalement, mon "freeze", bizarrement "un peu" long à mon gout, n'était pas seulement lié à la requête Floppy.
Mais, merci PCPT pour l'idée, car je vais effectivement "splashé", ou mettre un "loading ..." au lancement
pour calmer l'impatience de l'utilisateur.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
possible de jouer en async ^^

mais c'est globalement lent, on est d'accord
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
WMI est long pour sa première requête, avec une connexion synchrone

à part tricher (ex : lancer une fausse requête durant un splash) je ne connais pas de parade...
Messages postés
18
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
11 juin 2012

Bonjour (et help),

Précieuses infos que ces manipulations WMI !
Je viens de les intégrer dans un de mes 'tit prog. pour lister les Disques Physiques/Disques logiques/...

Mais j'ai un petit problème avce ce WMI : Au démarrage, lorsqu'on liste les disques présents (For each ...) l'appli se fige pendant quelques secondes et je pense que c'est dû à la détection du lecteur disquette (présence voyant allumé et tests sur plusieurs PC).
Il y a peut être aussi une autre raison car cela me parait bizarrement long !
Par la suite, je liste les unités avec fso.Drives qui ne me provoque pas ce "bug", puisque filtrage DriveType.

Question : il y aurait-il une méthode pour ce "check" WMI des disques physiques évite la détection Disquette, comme par exemple commencer à la lettre C:\ ? Ou bien y a t-il une autre raison de ce "freeze" ? Ou avez-vous des symptômes différents ?

Merci d'avance pour votre aide
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Je viens de tomber sur cet excellent outil:
http://www.laboratoire-microsoft.org/logiciels/18238/

"MICROSOFT WMI CODE CREATOR"

il viens de me pondre ce code:

Imports System
Imports System.Management
Imports System.Windows.Forms

Namespace WMISample

Public Class MyWMIQuery

Public Overloads Shared Function Main() As Integer

Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_PhysicalMedia")

For Each queryObj As ManagementObject in searcher.Get()

Console.WriteLine("-----------------------------------")
Console.WriteLine("Win32_PhysicalMedia instance")
Console.WriteLine("-----------------------------------")
Console.WriteLine("SerialNumber: {0}", queryObj("SerialNumber"))
Next
Catch err As ManagementException
MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
End Try
End Function
End Class
End Namespace

si ça peut vous donner des idées...
Afficher les 18 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.