IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Processeur [FAQ]


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut Processeur
    salut !

    savez-vous vomment recuperer le numero de serie d'un processeur ?
    je crois savoir qu'il est unique, je me trompe ?
    eh par la meme occasion, celui du HDD.


    merci.

    ps : je suis sous Win98 SE, il ny'a donc pas le HAL de XP qui me gene.
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Pour le numéro de série du processeur, je ne sais pas mais je vais chercher.

    Pour le disque dur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
        LPTSTR lpVolumeNameBuffer = new char[255]; // address of name of the volume
        DWORD nVolumeNameSize;	// length of lpVolumeNameBuffer
        unsigned long lpVolumeSerialNumber;	// address of volume serial number
        LPDWORD lpMaximumComponentLength;	// address of system's maximum filename length
        LPDWORD lpFileSystemFlags;	// address of file system flags
        LPTSTR lpFileSystemNameBuffer = new char[255];	// address of name of file system
        DWORD nFileSystemNameSize; 	// length of lpFileSystemNameBuffer
     
        memset(lpVolumeNameBuffer, 0x00, 255);
        memset(lpFileSystemNameBuffer, 0x00, 255);
     
        if (GetVolumeInformation(
                edRoot->Text.c_str(),
                lpVolumeNameBuffer,
                255,
                &lpVolumeSerialNumber,
                0,
                0,
                lpFileSystemNameBuffer,
                255
            )) {
            laVolume->Caption = lpVolumeNameBuffer;
            laSerial->Caption = lpVolumeSerialNumber;
            laFileSy->Caption = lpFileSystemNameBuffer;
        }
        else {
            // GetLastError
        }
     
        delete [] lpVolumeNameBuffer;
        delete [] lpFileSystemNameBuffer;
    A ta disposition
    Christophe MERLIER

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    pour les processeurs le numéro de série est seulement imprimé dessu SAUF sur les premiers p II et sur certains cyrix...
    pour savoir comment récupérer le numéro de série je pense qu'il faut aller voir sur intel.com

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    merci.

    pour le proc, ca a l'air d'etre beaucoup plus difficile !

    on m'a répondu sur le forum "Algorhytmes" ceci pour recuperer le SN d'un processeur Intel (jusqu'au PIII)

    code pour le prog en ASM pour les 32Bits du SN
    code pour le prog en ASM pour les 64Bits du SN
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Il semblerait que l'on puisse trouver des informations (vitesse, vendorid etc...) dans le registre :

    HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralProcessor\0

    J'ai aussi trouvé ceci :

    DetectSerialNumber :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    bool DetectSerialNumber()
    {
     
     
    bool found_sn;
    _asm
    {
     
     
    pushfd
    pop eax // get EFLAGS into eax
    mov ebx,eax // keep a copy
    xor eax,0x200000 // toggle CPUID bit
    push eax
    popfd // set new EFLAGS
    pushfd
    pop eax // EFLAGS back into eax
     
     
    // have we changed the ID bit?
    xor eax,ebx 
     
    je NO_SERIAL_NUM
     
    // we could toggle the bit so CPUID
    // is present
    mov eax,1
     
    cpuid // get processor features
     
    // check the serial number bit
    test edx,1<<18 
     
    jz NO_SERIAL_NUM
    mov found_sn,1 
    jmp DONE
    NO_SERIAL_NUM&#58;
    mov found_sn,0
    DONE&#58;
     
     
     
    &#125;
     
    return found_sn;
     
    &#125;
    ReadSerialNumber :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    void ReadSerialNumber(DWORD* serial)
    {
     
    DWORD t,m,b;
    _asm
    {
     
     
    mov eax,1
    cpuid
     
    // top 32 bits are the processor 
    // signature bits
    mov t,eax 
     
    // A new CPUID code for the 
    // Pentium III
    mov eax,3 
     
     
    cpuid
    mov m,edx
    mov b,ecx
     
    }
     
    // copy the locals into the pointer variables passed in
    serial[0] = b;
    serial[1] = m;
    serial[2] = t;
     
    }
    Bon courage ...
    A ta disposition
    Christophe MERLIER

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    et c'est avec quel compilo que tu as ecris ce code ?
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par ChMerlier
    J'ai aussi trouvé ceci :

    DetectSerialNumber :
    Veux dire que ce n'est pas moi qui a écris ça ... pour etre franc je ne l'ai même pas compilé !
    A ta disposition
    Christophe MERLIER

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    euh oui ! les premiers pIII je voulais dire !
    sorry....

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    J'ai testé le code et ça marche.
    Il faut cependant faire quelques petites modifs.
    Premierement il faut activer la compilation en mode Pentium (Projet|Options|Options du compilateur avancées).

    Ensuite il faut modifier une ligne que TAsm n'aime pas :

    test edx,1<<18

    par
    test edx,0x40000

    Je cherche des infos sur l'interpretation du numéro de série.
    Pour le teste, j'ai créé une fiche avec un bouton et 3 Labels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    void __fastcall TForm1&#58;&#58;Button1Click&#40;TObject *Sender&#41;
    &#123;
        DWORD wSerialNumber&#91;3&#93; = &#123;0&#125;;
     
        if &#40;DetectSerialNumber&#40;&#41; == true&#41; &#123; // test
            Label1->Caption = "DetectSerial Ok";
     
            ReadSerialNumber&#40;wSerialNumber&#41;;
            // affichage héxa
            Label2->Caption = Label2->Caption.sprintf&#40;"%X %X %X", wSerialNumber&#91;0&#93;, wSerialNumber&#91;1&#93;,wSerialNumber&#91;2&#93;&#41;;
            // affichage décimal
            Label3->Caption = Label3->Caption.sprintf&#40;"%ld %ld %ld", wSerialNumber&#91;0&#93;, wSerialNumber&#91;1&#93;,wSerialNumber&#91;2&#93;&#41;;
        &#125;
        else &#123;
            // pas de sérial ou désactivé
            Label1->Caption = "DetectSerial Non-Ok";
        &#125;
    &#125;
    A ta disposition
    Christophe MERLIER

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    je vous remercie encore.

    pour ma pars, j'ai un processeur AMD Athlon Thunderbird II (1,1GHz)
    et ce code marche alors qu'il est destiné aux PIII !!??

    Intel et AMD utiliseraient-ils le meme jeu d'instructions ?
    mystere et boule de gomme

    je suis allé sur le site de AMD et je n'ai rien trouvé pour les developpeur sauf de la pub du style "avec AMD,le developpement est plus facile"


    ensuite, j'ai essyé le code pour le HDD, il marche mais j'ai une question :

    const char *IpRootPathName, on met quoi dedans ? j'ai mis "C:" et les infos donné sont completements differentes !

    au depart, j'ai mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    GetVolumeInformation&#40;
                Form1->Text.c_str&#40;&#41;,
                lpVolumeNameBuffer, 
                255, 
                &lpVolumeSerialNumber, 
                0, 
                0, 
                lpFileSystemNameBuffer, 
                255
            &#41; ;

    mais je n'ai pas le systeme de fichier ainsi que le nom de volume et donc j'en conclue, un serial eronné
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    J'ai investigué le serial du processeur et il se formate comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        DWORD wSerialNumber&#91;3&#93; = &#123;0&#125;;
     
        if &#40;DetectSerialNumber&#40;&#41; == true&#41; &#123;
            Label1->Caption = "DetectSerial Ok";
     
            ReadSerialNumber&#40;wSerialNumber&#41;;
            Label2->Caption = Label2->Caption.sprintf&#40;"%08X%08X%08X", wSerialNumber&#91;2&#93;, wSerialNumber&#91;1&#93;,wSerialNumber&#91;0&#93;&#41;;
        &#125;
        else &#123;
            Label1->Caption = "DetectSerial Non-Ok";
        &#125;
    Ce qui donne pour moi :
    000006860001440879ACB5A7

    un lien pour vérifier chez intel (un utilitaire à télécharger)
    http://www.intel.com/francais/pentiumiii/utility.htm
    A ta disposition
    Christophe MERLIER

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    une petite question, ou trouve tu tout ca ?

    sur le site de Intel ?
    j'y suis allé et j'ai pas trouvé grand chose dessus...
    le pire, comme je l'ai dit aussi précédemment, c'est que ces infos marche pour mon AMD...
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    j'ai peut-etre parlé un peut trop vite :

    mon numero (en hexa) est :
    000006420000000000000000

    un opeut simple pour un proc ?
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Pour moi y'a que les PIII et PIV qui ont leurs S/N intégré au CPU..pour ce qui est des AMD, il est seulement marqué sur le core du CPU et pour les Cyrix..bah ça on s'en fout, personne n'en a !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2002
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Numéro de série Intel Pentium III (et suivant)
    Voici une adresse ou tu peux télécharger le code source qui
    permet de lire le numéro de série du processeur Intel Pentium III et
    suivants.

    J'ai réussi à le compiler avec C++ Builder 5.0 et le programme s'exécute.

    Je ne peux pas te dire si la lecture du numéro est correcte car je ne
    peux pas modifier l'option qui permet la lecture dans le BIOS et le programme le détecte.

    Les sources se trouvent à l'adresse suivante:
    http://codecentral.borland.com/codec...sting?id=15085

    Si tu n'arrive pas à y accéder, envoie-moi un mail je t'envaierai le fichier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Description complète d'un processeur
    Par tripper.dim dans le forum Composants
    Réponses: 5
    Dernier message: 02/10/2003, 20h35
  2. Problème bi processeur
    Par bud1703 dans le forum Matériel
    Réponses: 7
    Dernier message: 28/08/2003, 18h17
  3. [SYBASE]multi-processeur
    Par 6rose dans le forum Sybase
    Réponses: 7
    Dernier message: 05/07/2003, 22h01
  4. Comment repérer la vitesse du processeur?
    Par Paradam dans le forum Assembleur
    Réponses: 14
    Dernier message: 28/06/2003, 11h43
  5. swapping entre processeurs
    Par shef dans le forum MFC
    Réponses: 5
    Dernier message: 26/08/2002, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo