Borland Code konvertieren:



  • Hallo Forum,

    ich möchte die Serial der CPU auslesen und habe diesen Code gefunden:

    // Pentium III serial detection
    // Console mode Win32 program which uses VCL
    // Borland C++Builder 4 and 5 PRO
    // Hens Zimmerman, <hens@gmx.net>
    
    // Suppress W8002 (Restarting compile using assembly)
     #pragma option -w-asc
    
    // Enable streaming operators for AnsiString
    #define VCL_IOSTREAM
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include <iostream>
    
    int main(){
      unsigned long FeatureFlags;
      unsigned long SerialMostSignificantBits;
      unsigned long SerialMiddleSignificantBits;
      unsigned long SerialLeastSignificantBits;
    
      asm mov eax, 1;
    
      // Hardcoded CPUID instruction
      __emit__(0x0f);
      __emit__(0xa2);
    
      __asm{
        mov FeatureFlags, edx
        mov SerialMostSignificantBits, eax
        mov eax, 3
      }
    
      // Hardcoded CPUID instruction
      __emit__(0x0f);
      __emit__(0xa2);
    
      __asm{
        mov SerialMiddleSignificantBits, edx
        mov SerialLeastSignificantBits, ecx
      }
    
      // Is serial number enabled?
      bool SerialEnabled = (FeatureFlags & 0x40000);
    
      if(SerialEnabled){
        AnsiString Information;
        Information.sprintf(
          "Feature flags: %X\nSerial: %.08X%.08X%.08X",
          FeatureFlags,
          SerialMostSignificantBits,
          SerialMiddleSignificantBits,
          SerialLeastSignificantBits
        );
        std::cout << Information << std::endl;
      }
      else
        std::cout << "Serial number not available" << std::endl;
      return 0;
    }
    

    Der ist leider für Borland geschieben. Teilweise ist der ASM Code in die Makros gekapselt. Teilweise nicht: Was ist das für Code? Wenn ich ihn auch __ASM{} kapsele gibt es Fehler. Hat das mit dem ASM-Pragma zu tun?

    Vielen Dank


  • Mod

    int main(){ 
    	unsigned long FeatureFlags; 
    	unsigned long SerialMostSignificantBits; 
    	unsigned long SerialMiddleSignificantBits; 
    	unsigned long SerialLeastSignificantBits; 
    
    	// Hardcoded CPUID instruction 
    	__asm{ 
    		mov eax, 1; 
    		cpuid 
    
    		mov FeatureFlags, edx 
    			mov SerialMostSignificantBits, eax 
    			mov eax, 3 
    		cpuid
    		mov SerialMiddleSignificantBits, edx 
    		mov SerialLeastSignificantBits, ecx 
    	} 
    
    	// Is serial number enabled? 
    	bool SerialEnabled = (FeatureFlags & 0x40000)!=0; 
    
    	if(SerialEnabled){ 
    		char szInformation[128]; 
    		sprintf(szInformation, 
    			"Feature flags: %X\nSerial: %.08X%.08X%.08X", 
    			FeatureFlags, 
    			SerialMostSignificantBits, 
    			SerialMiddleSignificantBits, 
    			SerialLeastSignificantBits 
    			); 
    		std::cout << szInformation << std::endl; 
    	} 
    	else 
    		std::cout << "Serial number not available" << std::endl; 
    	return 0; 
    }
    


  • Laut WMI hat mein Pentium4 eine CPU ID. Der obige Code sagt das es keine gibt. Muß ich Adminrechte haben um den Code benutzen zu können? (Funktioniert es bei Dir?)


  • Mod

    Es gibt BIOS Versionen, bei denen diese Funktion gar nicht eingeschaltet werden kann!



  • Funktioniert der Code bei jemand?
    Hier ist ein C# Projekt von www.codeproject.com wo man die ID über WMI herausbekommt:
    http://www.codeproject.com/vbscript/VvvHardwareInfo.asp
    Die index.hta starten, dann Menu Processor -> ProcessorID.
    Ist es die gleiche ID?

    Meine ID ist: BFEBFBFF00000F29
    Wenn ich mit der im Internet nachschaue scheint diese ID mehr den Prozessortyp zu identifizieren als meine CPU im Speziellen.



  • Die Seriennummer scheint es gar nicht mehr zu geben. Intel will keine Prozessoren mehr mit Serial ausliefern. Zdnet Meldung von 2000:
    http://www.zdnet.de/news/hardware/0,39023109,2051644,00.htm

    Intel wird in Zukunft darauf verzichten, seine Prozessoren mit einer Identifikationsnummer auszustatten. "Wir haben diese Entscheidung Anfang des Jahres getroffen," sagte Intel-Sprecher George Alfs.

    Dann hat sich die Sache erledigt. Trotzdem vielen Dank Martin 🙂


Anmelden zum Antworten