ما هي الأحرف الصالحة لمفاتيح التسجيل وأسماء القيم؟

StackOverflow https://stackoverflow.com/questions/1013473

  •  06-07-2019
  •  | 
  •  

سؤال

وبشكل أكثر تحديدًا، ما هو المصدر الرسمي لهذه المعلومات؟

قد يبدو هذا سؤالاً غير برمجي، لكني بحاجة إلى معرفة ما إذا كان مسار التسجيل الذي تم تغذيته بالكود الخاص بي يحتوي على تعبير عادي أم لا.قررت أن أفضل طريقة للقيام بذلك هي افتراض أن أي ظهور لحرف غير صالح (مثل "*") يعني بحثًا بأحرف بدل.

هل كانت مفيدة؟

المحلول

للحصول على أسماء المفاتيح والقيم المسموح بها، راجع صفحة MSDN في هيكل السجل.بخاصة:

كل مفتاح له اسم يتكون من حرف واحد أو أكثر قابل للطباعة.الأسماء الرئيسية ليست حساسة لحالة الأحرف.لا يمكن أن تتضمن أسماء المفاتيح حرف backslash () ، ولكن يمكن استخدام أي حرف آخر قابل للطباعة.يمكن أن تتضمن أسماء القيم والبيانات حرف الخط المائل العكسي.

يتم شرح أنواع قيم التسجيل في التفاصيل على MSDN هنا, ، في حال كنت بحاجة إلى معرفة القيم المسموح بها.

نصائح أخرى

لكل شيء ويندوز، MSDN يجب أن يكون مصدر موثوق - هذه المادة على <لأ href = "http://msdn.microsoft.com/en-us/library/ms724872(VS.85).aspx" يختلط = "noreferrer"> العنصر حجم التسجيل حدود يعني يونيكود هو جيد و <لأ href = "http://msdn.microsoft.com/en-us/library/ms724946(VS.85).aspx" يختلط = "noreferrer"> هيكل السجل يقول ان مائل وغير القابلة للطباعة أحرف غير مسموح في أسماء الرئيسية. القيم فقط يجب أن تكون الأحرف القابلة للطباعة تماما.

لقد قمت للتو بتجربة مع سجل Windows 7:إنشاء اسم مفتاح برمجيًا باستخدام 01 Hex (أسكي سوه) الحرف الموجود أمام الكلمة "TEST" (في دلفي يمثل السلسلة:#1 "اختبار").هذا شيء لن يسمح لك REGEDIT بالقيام به عن طريق الكتابة - حتى مع عمليات ALT-Keypad.

لم يقتصر الأمر على إنشاء المفتاح فحسب، بل أظهر المفتاح في REGEDIT على أنه يحتوي على مساحة "واسعة" حيث يوجد الحرف رقم 1.

لقد سمح لي نسخ اسم المفتاح الفرعي الجديد ولصقه في TEXTPAD بالتحقق من أنه لا يزال بالفعل الحرف رقم 1.

لم أقرأ مطلقًا في أي مكان أن رقم 1 يعتبر "قابلاً للطباعة"، ولكن في نظام التشغيل Windows، يمكن وضع أي شيء آخر غير 00 Hex في سلسلة طباعة ويمكن إرسال أي شيء حرفيًا إلى الطابعة، لذلك أعتقد أن بيان MSDN حول هذا القيد هو تناقض لفظي:لأنه في ويندوز يجري أ شخصية يعني أن تكون قابلة للطباعة، وبالتالي شخصية غير قابلة للطباعة يصبح...حسنًا، بلا معنى.

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

ومن المثير للاهتمام، أنني جربت أيضًا الحرف رقم 256 (الذي لم يعد ASCII، ولكنه من الناحية النظرية Unicode Widechar، ولكن ليس بالضرورة واحدًا يعتبر "قابلاً للطباعة" إذا رفضته أي أجزاء من آليات الإدخال أو التخزين أو الإخراج).

بينما كان بإمكاني إنشاء مثل هذا المفتاح برمجيًا، ورؤية شكل "A" غريب المظهر في REGEDIT، فقد أصبح أقل موثوقية إلى حد ما في القص واللصق.أعتقد أن عمليات الحافظة والتفاعلات مع التطبيقات المختلفة تجعل هذا النوع من الأشياء ممارسة مشكوك فيها للغاية نظرًا لأن TEXTPAD، على سبيل المثال، قد تضع افتراضات حول ما إذا كنت تلصق أحرف بايت أو أحرف واسعة لا تتطابق تمامًا مع REGEDIT وضعها في الحافظة - والعكس بالعكس.إذا كانت التعليمات البرمجية وراء هذه العمليات تتوقع فقط سلاسل ANSI أو سلاسل UTF-16 العريضة، وتم إعطاؤها شيئًا مختلفًا، بما في ذلك اختلافات ترتيب البايت وUTF-8 أو اختلافات مماثلة لم تكن تتوقعها، فمن المحتمل جدًا أن تحدث الأمور تخطئ.

أخيرًا، قمت بتجربة محاولة إدخال حرف عريض بالترتيب 0FFFF سداسي عشري.هذا لم يعطي في الواقع أي حضور مرئي للشخصية في REGEDIT - كيف "غير قابل للطباعة" إذن؟.لكن الاسم يشمل غير مرئى شخصية.لقد أكدت ذلك من خلال محاولتي فعليًا إنشاء مفتاح فرعي نظير منفصل في REGEDIT بدون الحرف المخالف ونتيجة لذلك حصلت على ما يبدو بصريًا وكأنه مفتاحين متطابقين!

لذلك باختصار:يبدو أنه يمكنك وضع أي حرف حرفيًا في اسم المفتاح الفرعي طالما أنه ليس "\".ولكن ربما ليس من الجيد جدًا القيام بذلك.وأعتقد أن المصطلح "غير قابل للطباعة" في نظام التشغيل Windows ينطبق بشكل عام فقط على 00 hex - وذلك لأنه يُستخدم عادةً كفاصل سلسلة وبالتالي يصعب "إرساله" عبر واجهة برمجة تطبيقات التسجيل كحرف!

ما يثير القلق للغاية هو القدرة التي يمنحها هذا للقراصنة للتشويش والتضليل.يمكنك حرفيًا إنشاء مجموعة كاملة من مفاتيح التسجيل الفرعية التي يبدو أنها لا تحتوي على أسماء على الإطلاق ولا يمكن استخدامها بشكل مفيد إلا من خلال التطبيقات، وليس البشر.نعم، يمكنك فعل ذلك باستخدام أحرف المسافات، ولكن بعض أحرف Unicode (مثل FFFFh) ليس لها عرض، ويمكنك استخدام أي عدد منها معًا لإنشاء اسم فريد وغير مرئي، أو أجزاء في الاسم!وهذا يجعل من المستحيل تقريبًا اكتشافها دون استخدام عملية قص ولصق شاقة، أو أداة آلية مخصصة.في REGEDIT تبدو جميعها وكأنها مفاتيح ذات أسماء متماثلة أو غير مسماة بالفعل.

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