هل يمكن أن يكون برنامج بسيط مسؤولاً عن BSOD؟

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

  •  22-09-2019
  •  | 
  •  

سؤال

لدي عميل أخبرني أن برنامجي (برنامج أراضي المستخدم البسيط ، وليس سائقًا) يعطل نظامه مع شاشة الموت الزرقاء (BSOD). يقول إنه لم يواجه ذلك أبدًا مع برنامج آخر وأنه يمكنه إعادة إنتاجه بسهولة مع لي.

BSOD من النوع Critice_Object_Reper (0x000000F4) مع نوع الكائن 0x3 (العملية): تم الخروج أو إنهاء عملية أو مؤشر ترابط ضروري لتشغيل النظام بشكل غير متوقع.

هل يمكن أن يكون البرنامج البسيط مسؤولاً عن BSOD (حتى على Vista ...) أم هل يجب أن يتحقق من تثبيت الأجهزة أو نظام التشغيل؟

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

المحلول

أسهل طريقة للتسبب في BSOD مع برنامج مساحة المستخدم (AFAIK) إلى اقتل عملية نظام Windows الفرعي (CSRSS.Exe). هذا لا يحتاج إلى أجهزة معيبة ولا خطأ في kernel أو سائق ، بل يحتاج فقط إلى امتيازات المسؤول1.

ما هو رمزك بالضبط؟ يبدو أن رسالة الخطأ ("عملية أو مؤشر ترابط أساسي لتشغيل النظام قد خرجت بشكل غير متوقع أو إنهاءها.") يبدو وكأنه أحد عمليات النظام الأساسية التي تم إنهاءها. ربما تقتل عملية وحصلت على العملية الخاطئة عن غير قصد؟

إذا كان ذلك ممكنًا ، يمكنك محاولة الحصول على تفريغ الذاكرة من هذا العميل. باستخدام أدوات تصحيح الأخطاء لنظام التشغيل Windows يمكنك بعد ذلك تحليل هذا التفريغ كما هو موضح هنا.

1لا تمنعك Windows من القيام بذلك لأنه "يبقي المسؤولون يسيطرون على أجهزة الكمبيوتر الخاصة بهم". لذلك هذا حسب التصميم وليس خطأ. اقرأ مقالات ريموند وسترى السبب.

نصائح أخرى

فقط لأن برنامجك ليس سائقًا لا يعني أنه لن يفعل ذلك استعمال سائق.

من الناحية النظرية ، لا ينبغي أن يكون الكود الخاص بك قادرًا على bsod الكمبيوتر. الأمر متروك لنظام التشغيل للتأكد من عدم حدوث ذلك. بحكم التعريف ، هذا يعني أن هناك مشكلة في مكان ما في الأجهزة أو في رمز آخر غير البرنامج. هذا لا يمنع أن يكون هناك خطأ في الكود الخاص بك أيضًا.

إجابة قصيرة هي نعم. تعتمد الإجابة الطويلة على ما هو البرنامج الذي يفترض أن تفعله وكيف يفعل ذلك؟

عادة ، لا ينبغي. إذا كان الأمر كذلك ، يجب أن يكون هناك إما

  • خطأ في نوافذ النوافذ (ممكن ولكن من غير المرجح للغاية)
  • خطأ في برنامج تشغيل جهاز (ليس بالضرورة في جهاز يستخدمه البرنامج ، قد يصبح هذا الأمر معقدًا للغاية)
  • خطأ في الجهاز

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

حسنًا ، نعم ، يمكن - ولكن لأسباب عديدة مختلفة.

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

هل قمت بتعيين بعض المتطلبات لبرنامجك وهل المستخدم يتابعها؟

إذا لم تتمكن من تكرارها بنفسك ، ولا يحتاج برنامجك إلى تشغيل المسؤول ، فسأكون متشككًا بعض الشيء

  • استقرار أجهزة هذا النظام
  • حالة الفيروس/البرامج الضارة لهذا النظام.

إذا تمكنت من الوصول الفعلي إلى مربع العميل ، فقد يكون من المفيد إجراء فحص كامل للفيروسات باستخدام ماسح ضوئي محدث ، وتشغيل كامل ميموت عليه.

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

لا ، وهذا إلى حد كبير بحكم التعريف. أسوأ شيء يمكنك قوله هو أن تطبيق أراضي المستخدم قد يكون "قد تسبب" في حشرة Windows أو خطأ في برنامج التشغيل. لكن نظام تشغيل سطح المكتب الحديث مسؤول بالكامل عن سلامته ؛ BSOD هو فشل في تلك النزاهة. لذلك نظام التشغيل هو المسؤول ، وفقط نظام التشغيل.

(مثال على علة BSOD التي يمكن أن يفضحها التطبيق وحده: تم تنفيذ ماسح ضوئي للفيروسات كبرنامج تشغيل ، والذي يتعطل عند تنفيذ ملف من Sector 0xffffffff ، وهو قطاع يحدث في هذا الجهاز واحد فقط لتتضمن DLL واحد من التطبيق الخاص بك)

واجهت مشاكل عند الخروج من تطبيقي دون إيقاف جميع العمليات واتصالات BD عندما ينتهي البرنامج (لقد تحطمت IDE بأكملها). أضع رمز "إيقاف وفصل" رمز "إنهاء" "form_closed" لشكلتي الرئيسية والمشكلة التي تم حلها ، لا أعرف أن هذا هو وضعك.

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

لا يمكن التخلص من الفيروس.

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