سؤال

أريد أن أكتب وظيفة بإنشاء معرف فريد معين الجهاز يعمل على نظام التشغيل ويندوز.

حاليا, أنا باستخدام WMI الاستعلام مختلف الأجهزة المعلمات سلسلة لهم معا و تجزئة لها بالحصول على معرف فريد.سؤالي هو ما هي المعلمات اقترح يجب أن تستخدم ؟ حاليا, أنا باستخدام مزيج من bios\cpu\البيانات على القرص لإنشاء معرف فريد.وأنا باستخدام النتيجة الأولى إن نتائج متعددة هناك لكل مقياس.

إلا أنني واجهت مشكلة حيث آلة مزدوج الأحذية في 2 مختلفة من نظام التشغيل ويندوز يقوم بإنشاء موقع مختلف رموز على كل نظام التشغيل الذي ينبغي من الناحية المثالية لم يحدث.

للإشارة هذه هي مقاييس أنا حاليا باستخدام:

Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed
Win32_BIOS:Manufacturer
Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version
Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads
Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber
Win32_VideoController:DriverVersion, Name
هل كانت مفيدة؟

المحلول

تحليل SMBIOS نفسك و تجزئة إلى طول التعسفي.ترى مواصفات PDF لجميع SMBIOS الهياكل المتاحة.

الاستعلام عن SMBIOS معلومات من نظام ويندوز يمكنك أن تستخدم EnumSystemFirmwareEntries, EnumSystemFirmwareTables و GetSystemFirmwareTable.

IIRC ، "معرف فريد" من CPUID التعليمات هو مستنكر من P3 و أحدث.

نصائح أخرى

كان عندي نفس المشكلة و بعد القليل من البحث قررت أن اقرأ MachineGuid في مفتاح التسجيل HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography, كما @Agnus المقترحة.يتم إنشاؤها أثناء تثبيت نظام التشغيل و لن تتغير إلا إذا جعل آخر الطازجة تثبيت نظام التشغيل.اعتمادا على إصدار نظام التشغيل قد تحتوي على محول شبكة الاتصال عنوان MAC جزءا لا يتجزأ من (بالإضافة إلى بعض الأرقام الأخرى, بما في ذلك عشوائي) ، أو المزيف الرقم في وقت لاحق للحصول على أحدث إصدارات نظام التشغيل (بعد XP SP2, أعتقد, ولكن لست متأكدا).إذا كان المزيف نظريا يمكن أن تكون مزورة - إذا جهازين نفس الحالة الأولية ، بما في ذلك في الوقت الحقيقي على مدار الساعة.في الممارسة العملية, هذا وسوف تكون نادرة, ولكن أن تكون على علم إذا كنت تتوقع أن يكون قاعدة الأمن التي يمكن أن تتعرض للهجوم من قبل المتشددين المتسللين.

بالطبع إدخال التسجيل كما يمكن تغييرها بسهولة من قبل أي شخص إلى تشكيل آلة GUID, ولكن ما وجدته هو أن هذا من شأنه أن يعطل عملية عادية من الكثير من مكونات ويندوز التي في معظم الحالات لا المستخدم العادي سوف نفعل ذلك (مرة أخرى ، احترس من المتشددين المتسللين).

مع الترخيص أداة ونحن في النظر في العناصر التالية

  • عنوان MAC
  • وحدة المعالجة المركزية (وليس الرقم التسلسلي ، ولكن الفعلية CPU الشخصية مثل يخطو نموذج)
  • أقراص النظام الرقم التسلسلي (لا تسمية وحدة التخزين)
  • الذاكرة
  • CD-ROM model & بائع
  • بطاقة الفيديو نموذج & بائع
  • تحكم IDE
  • وحدة تحكم SCSI

ومع ذلك, بدلا من مجرد تجزئة مكونات و خلق نجاح/فشل النظام ، مقارنة بصمات الأصابع التي يمكن استخدامها لتحديد مدى اختلاف اثنين من آلة ملامح.إذا كان الفرق التصنيف أعلاه المحدد التسامح ثم يطلب من المستخدم لتفعيل مرة أخرى.

لقد وجدت أكثر من 8 سنوات الماضية في استخدام مع مئات الآلاف من المستخدم بتثبيت هذا المزيج يعمل بشكل جيد لتوفير موثوق آلة فريدة من نوعها id - حتى على الأجهزة الظاهرية و استنساخ تثبيت نظام التشغيل.

أكره أن أكون الشخص الذي يقول "أنت تفعل ذلك الخطأ" (أنا دائما أكره هذا الشخص ;) ولكن...

هل يجب أن يكون فترة من الاعادة المتكررة الناتجة من الجهاز ؟ يمكنك فقط تعيين معرف أو لا القطاعين العام والخاص مفتاح ؟ ربما إذا كنت يمكن توليد وتخزين القيمة ، يمكن الوصول إليه من كل من نظام التشغيل تثبيت على نفس القرص ؟

ربما كنت قد استكشفت هذه الخيارات وأنها لا يعمل بالنسبة لك, ولكن إذا لم, إنها تنظر إلى شيء.

إذا إنها ليست مسألة ثقة المستخدم ، يمكن فقط استخدام عناوين MAC.

ماذا عن مجرد استخدام UniqueID من معالج ؟

يجب أن ننظر إلى استخدام عنوان MAC على بطاقة الشبكة (إذا كان موجودا).تلك هي عادة فريدة من نوعها ولكن يمكن أن تكون ملفقة.لقد استعملت البرنامج الذي يولد ملف الترخيص بناء على محول شبكة الاتصال عنوان MAC ، لذلك يعتبر إلى حد ما طريقة يمكن الاعتماد عليها في التمييز بين أجهزة الكمبيوتر.

واحد من التطبيقات ، إما استخدام اسم الكمبيوتر إذا كان غير مجال الكمبيوتر أو المجال آلة حساب SID أجهزة الكمبيوتر في المجال.مارك Russinovich يتحدث عن ذلك في هذا بلوق وظيفة ، آلة سيد:

القضية الأخيرة حيث SID الازدواجية قد يكون مشكلة إذا وزعت تطبيق آلة تستخدم الدول الجزرية الصغيرة النامية لتحديد أجهزة الكمبيوتر.لا برامج Microsoft يفعل ذلك و باستخدام آلة معاوية بهذه الطريقة لا تعمل فقط على حقيقة أن جميع DC هو نفس الجهاز معاوية.البرامج التي تعتمد على الكمبيوتر فريدة من نوعها الهويات إما يستخدم أسماء أجهزة الكمبيوتر أو الكمبيوتر المجال معرفات الأمان (SID من حسابات الكمبيوتر في المجال).

يمكنك الوصول إلى النطاقات آلة حساب SID عبر LDAP أو System.DirectoryServices.

في برنامج أنا أول التحقق من ملقم المحطة الطرفية استخدام WTSClientHardwareId.آخر عنوان MAC الخاص بالكمبيوتر المحلي ينبغي أن تكون كافية.

إذا كنت تريد حقا أن استخدام قائمة من الخصائص التي قدمتها ترك الأمور مثل Name و DriverVersion, Clockspeed, ، وما إلى ذلك.لأنه ربما نظام التشغيل المعتمدة.محاولة إخراج المعلومات نفسها على كل أنظمة التشغيل و ترك الخروج الذي يختلف بين.

هناك مكتبة المتاحة للحصول على أجهزة محددة من المعلومات: الأجهزة الرقم التسلسلي النازع (CPU, RAM, HDD, BIOS)

لماذا لا تستخدم عنوان MAC الخاص بك بطاقة الشبكة ؟

ربما الغش قليلا, ولكن عنوان MAC من آلات محول إيثرنت نادرا ما يتغير بدون تغيير اللوحة الأم هذه الأيام.

يمكنك سحب نوع من الشركة المصنعة الرقم التسلسلي أو خدمة أو علامة ؟

لدينا متجر Dell متجر, لذلك نستخدم خدمة الوسم التي هي فريدة من نوعها لكل آلة من التعرف عليهم.وأنا أعلم أنه يمكن الاستعلام من BIOS على الأقل في لينكس, ولكن أنا لا أعرف مرتجلا كيفية القيام بذلك في نظام التشغيل Windows.

كان قيدا إضافيا ، كنت تستخدم .صافي التعبير لذلك لم أتمكن من استخدام الأجهزة القياسية الاستعلام آلية.لذلك قررت أن استخدام القوة قذيفة القيام به الاستعلام.الرمز الكامل يبدو مثل هذا:

Private Function GetUUID() As String
    Dim GetDiskUUID As String = "get-wmiobject Win32_ComputerSystemProduct  | Select-Object -ExpandProperty UUID"
    Dim X As String = ""
    Dim oProcess As New Process()
    Dim oStartInfo As New ProcessStartInfo("powershell.exe", GetDiskUUID)
    oStartInfo.UseShellExecute = False
    oStartInfo.RedirectStandardInput = True
    oStartInfo.RedirectStandardOutput = True
    oStartInfo.CreateNoWindow = True
    oProcess.StartInfo = oStartInfo
    oProcess.Start()
    oProcess.WaitForExit()
    X = oProcess.StandardOutput.ReadToEnd
    Return X.Trim()
End Function

ابحث CPUID على خيار واحد.قد يكون هناك بعض القضايا مع عدة أنظمة المعالجة المركزية.

هذه محاولة واحدة ، فإنه يعطي فريدة من نوعها القرص الثابت ID: ميناء DiskId32 دلفي 7-2010.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top