begin process at 2012 02 17 11:15:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > INFOS WMI DES DISQUES DURS (LIEN LECTEUR LOGIQUE / LECTEUR PHYSIQUE)

INFOS WMI DES DISQUES DURS (LIEN LECTEUR LOGIQUE / LECTEUR PHYSIQUE)


 Information sur la source

Note :
Aucune note
Catégorie :Système Classé sous :WMI, DiskDrive, LogicalDrive, Associators, References Niveau :Débutant Date de création :03/02/2009 Vu / téléchargé :4 641 / 266

Auteur : Renfield

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note


 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

  • 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
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...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ...
Source avec Zip Source avec une capture JSON PARSER - ANALYSE DE CHAINES JSON
Source avec Zip Source avec une capture MODULE DE TÉLÉCHARGEMENT DE FICHIER BASIQUE (SYNCHRONE / ASY...
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) CLASSE POUR CONNECTER/DÉCONNECTER UN LECTEUR RÉSEAU par radcur
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT CONTRÔLER TOTALEMENT LES PROCESSUS D'UN PC DISTANT (... par violent_ken
Source avec Zip Source .NET (Dotnet) RECHERCHE EXTRÊME OU 5 FAÇONS DE CHERCHER UN FICHIER par cmarcotte
Source avec Zip Source avec une capture WMI, GESTION D'UNE MACHINE (LOCALE OU DISTANTE) par zesamoth
MES TEST ET MES RECHERCHES SUR WMI, PROCESSUS ET INTERNET par l0r3nz1

Commentaires et avis

Commentaire de moogliber le 03/02/2009 15:24:45

Pourrais tu stp donner un exemple d'utilisation de la fonction GetDiskDriveFromLogical.
Par ex, comment retourner le numéro de série du dd, qui correspond au lecteur logique C: ?

Commentaire de Renfield le 03/02/2009 15:29:04 administrateur CS

ben, y'a un exemple dans le fichier zip ^^

MsgBox GetDiskDriveFromLogical("C:\").SerialNumber

gaffe:
http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:  This property is not available.

Commentaire de moogliber le 03/02/2009 18:13:12

dsl j'aurais dû regarder dans le zip.
J'ai un autre code qui lui fonctionne sous bien sous XP, comme sous vista.
Seulement il faut lui fournir en entrée le NUMERO(intDriveNumber) de lecteur logique (et non la lettre du lecteur C:)

Le seul truc manquant est donc de faire le lien entre le numéro de lecteur(ex: 0) et le nom du lecteur (C:\).
Si j'arrive à faire le lien entre les 2 c'est gagné.

------------------------------
Private Function GetDriveSerialNumber(intDriveNumber As Integer) As String
    Dim objWMIService As Object, _
        colItems As Object, _
        objItem As Object, _
        strDrive As String
    strDrive = "\\\\.\\PHYSICALDRIVE" & intDriveNumber
    'On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PhysicalMedia Where Tag = '" & strDrive & "'", , 16)
    'Set objItem = colItems.Item(strKey)
    For Each objItem In colItems
        GetDriveSerialNumber = Trim(objItem.SerialNumber)
   'exit for
    Next

End Function
-------------------------------------

Commentaire de Galain le 03/02/2009 18:25:04

Salut Moglober

J'ai comme l'impression que tu confonds lecteur physique ( le disque dur lui-même) et lecteur logique ( les partitions C:\ , D:\ etc....)
Le numéro que tu cherches est le numéro du lecteur physique et ceci n'a rien à voir avec la partition logique.

La source "Accès direct disque" donne un exemple pour faire la relation entre lecteur logique et disque associé

Commentaire de Renfield le 03/02/2009 18:29:07 administrateur CS

si ton code fonctionne

en relevant tes manches, tu parviendras surement a adapter mon code pour récuperer un Win32_PhysicalMedia

tu apprendras plus en mettant les yeux dans MSDN et tes mains dans le code

Commentaire de moogliber le 03/02/2009 18:30:54

Oui galain tu as raison, je m'ne suis rendu compte après avoir posté.
Il faudrait donc que j'arrive à récuperer le numéro de lecteur physique courant. (celui sur lequel est installé l'appli)

Commentaire de moogliber le 03/02/2009 18:33:14

Mais ton code ne marche pas sous XP

Commentaire de PCPT le 03/02/2009 21:23:54 administrateur CS

salut,

moogliber => l'api GetLogicalDrives existe..., y'a juste à l'utiliser (cf msdn comme proposé)

Renfield => bouhh le petit code ^^, c'est codyx qui doit être triste.
pas le courage de vérifier mais je crois avoir déposé un snippet pour PHYSIQUE
(le logique changeant à chaque formatage, moins utile donc, hormis pour concurrencer sandra, ce qui ne doit pas être faisable en vb6, cf certaines infos bios / température/ vitesse ventilos etc...)

++

Commentaire de Renfield le 04/02/2009 08:55:43 administrateur CS

comme je te le disais, en utilisant WMI Helper, simple de savoir comment récuperer un physicalMedia, et donc, le SerialNumber...



Private Function GetDriveSerialNumber(ByRef vsDriveLetter As String) As String
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 oItem = GetObject("winmgmts:" & oItem.Antecedent)
            Exit For
        Next oItem
        
        '# On refait la même, on passe du disque physique au physical media
        sBuffer = oItem.DeviceId
        Set oCol = oWMI.ExecQuery("REFERENCES OF {Win32_PhysicalMedia='" & sBuffer & "'} WHERE ResultClass=Win32_DiskDrivePhysicalMedia")
        For Each oItem In oCol
            '# On passe du lien "partition/disque" au disque
            Set oItem = GetObject("winmgmts:" & oItem.Antecedent)
            Exit For
        Next oItem
        
        GetDriveSerialNumber = Trim$(oItem.SerialNumber)
    End If
End Function

Commentaire de EBArtSoft le 05/02/2009 16:34:21 administrateur CS

Mais comment c'est moche WMI .... pouah j'arrive pas  m'y faire :p

Commentaire de Renfield le 05/02/2009 17:08:46 administrateur CS

bien d'accord ^^

Commentaire de tooffy123 le 16/03/2009 17:57:23

Bien le bonjour,

y'a t-il un équivalent vb.net de cette source ?

ou une source permettant de lire les informations smart d'un disque en vb.net ?

Je cherche, je cherche et je ne trouve pas...

Merci d'avance !

Commentaire de Renfield le 06/04/2009 10:55:01 administrateur CS

le code fonctionne, sous .NET (je viens de tester)
suffit de l'adapter un peu (App.Path a virer, etc.)

    Private Function GetDriveSerialNumber(ByRef vsDriveLetter As String) As String
        Dim sBuffer As String
        Dim oWMI As Object
        Dim oItem As Object = Nothing
        Dim oCol As Object

        GetDriveSerialNumber = vbNullString

        oWMI = GetObject("winmgmts:root\cimv2")
        If Not Nothing Is oWMI Then
            '# On récupère la partition liée au lecteur logique
            oCol = oWMI.ExecQuery("REFERENCES OF {Win32_LogicalDisk='" & vsDriveLetter & ":'} WHERE ResultClass = Win32_LogicalDiskToPartition")
            For Each oItem In oCol
                '# On passe du lien, à la partition
                oItem = GetObject("winmgmts:" & oItem.Antecedent)
                Exit For
            Next oItem

            If Not Nothing Is oItem Then
                '# On refait la même, on passe de la partition au disque physique
                sBuffer = oItem.DeviceId
                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
                    oItem = GetObject("winmgmts:" & oItem.Antecedent)
                    Exit For
                Next oItem

                If Not Nothing Is oItem Then
                    '# On refait la même, on passe du disque physique au physical media
                    sBuffer = oItem.DeviceId
                    oCol = oWMI.ExecQuery("REFERENCES OF {Win32_PhysicalMedia='" & sBuffer & "'} WHERE ResultClass=Win32_DiskDrivePhysicalMedia")
                    For Each oItem In oCol
                        '# On passe du lien "partition/disque" au disque
                        oItem = GetObject("winmgmts:" & oItem.Antecedent)
                        Exit For
                    Next oItem

                    GetDriveSerialNumber = Trim$(oItem.SerialNumber)
                End If
            End If
        End If
    End Function



c'est pas du bon .NET, hein, par contre ^^

Commentaire de Renfield le 06/04/2009 11:02:30 administrateur CS

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...

Commentaire de Christ_OFF le 28/11/2009 16:49:15

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

Commentaire de PCPT le 28/11/2009 18:58:43 administrateur CS

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...

Commentaire de Renfield le 29/11/2009 17:43:39 administrateur CS

possible de jouer en async ^^

mais c'est globalement lent, on est d'accord

Commentaire de Christ_OFF le 02/12/2009 01:58:43

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Retrouver les references d'un projet [ par rcolas ] Bonjour à tous!Savez vous comment retrouver toutes les références d'un prjet VB6 quand on en a supprimé? :-(J'ai enlevé une reference et je n'arrive p WMI -- Recherche infos systeme [ par Docmail ] Je cherche a recuperer en VB les differentes informations systeme d'une machine : Carte graphique, resolution, processeur, ram, carte reseau, mac adre recherche de references manquantes dans VB [ par gustave1er ] onjour je recherche des omposants necessaires pour l utilisation de l API foregroundwindow:ce sont les fichiers WINDOW.TLB et un otre dont je ne me so references d'une cellule [ par pearl ] est il possible apres avoir recherché une cellule d'apres son contenu en extraire ses coordonnées?merci ACCEESS 2000 NE VEUT PAS AJOUTER comdlg32.dll AUX REFERENCES [ par Cyril ] BonjourJe souhaiterai utiliser sous access 2000 une common dialog boxEst ce possible ??si oui comment ??Merci d'avance Wmi ????? [ par AsselusBorealiss ] SalutJ'ai Recup un Code ( pour avoir des info sur la carte reseau , la marque ,vitesse , Mac ,ip etc,etc )Sauf que le code utilise Des "Control WMI"et VBS, WMI & groupes locaux [ par rodrigos ] Salut!Je suis en train de me mettre au vbscript et j'aimerai savoir comment on peut obtenir l'ensemble des utilisateurs d'un groupe local: par exemple References [ par aocorp ] SalutQuelles reference faut - il pour utiliser la propriété :adCmdTablece type n'est pas reconu avec la reference adodbmerci de vos reponses REFERENCES VISUAL BASIC [ par thierrypp ] Bonjour,Je suis à la recherche d'ouvrages Français pour Visual Basic 6, qui pourrait m'indiquer un ensemble complet, pour progresser, du débutant à un REFERENCES [ par thierrypp ] BONJOUR,QUI POURRAIT m'INDIQUER UNE LISTE D'OUVRAGES POUR l?APPRENTISSAGE DE VISUAL BASIC 6, DU NIVEAU DEBUTANT A UN NIVEAU PLUS AVANCE POUR SUIVIE D


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,498 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales