كيفية قراءة من الذاكرة المعنونة I / O ميناء في صافي؟

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

سؤال

هل المؤشرات القياسية في صافي تفعل هذا؟ أو لا يحتاج المرء إلى اللجوء إلى P / استدعاء؟

ملحوظة أنني لا أتحدث عن المراجع الكائن؛ أنا أتحدث عن الفعلية C # المؤشرات في التعليمات البرمجية غير آمنة.

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

المحلول

وC #، كمحرك وقت التشغيل المدارة والمحمية، لا تسمح بالوصول الأجهزة مستوى منخفض ومواقع الذاكرة المرتبطة الأجهزة الفعلية غير متوفرة.

وستحتاج إلى استخدام برنامج تشغيل المنفذ أو اكتب ما تريد في C ++ أو C مع API ويندوز السليم للوصول إلى تعيين الذاكرة I / O المناطق المثيرة للاهتمام. هذا وسوف يتم تشغيلها في حلقة أقل من # برامج C قادرة على.

وهذا هو السبب في أنك لا ترى السائقين مكتوب في C #، على الرغم من أنني أفهم الكثير كتابة الروتينية الوصول مع C ++، ولكن المنطق المحرك الرئيسي في C #. انها صعبة، على الرغم، كما تعطل وإعادة تشغيل يمكن أن تصبح صعبة، ناهيك عن قضايا التزامن والتوقيت (والتي هي إلى حد ما أكثر واقعية في C ++ في حلقة أقل، على الرغم من ويندوز لا يزال بعيدا عن نظام الوقت الحقيقي).

و-Adam

نصائح أخرى

لتوسيع على إجابة آدم ، لا يمكنك حتى إجراء الذاكرة المعنونة I / O من تطبيق Win32 دون تعاون سائق النواة. كل عناوين يحصل على التطبيق Win32 وهي عناوين الظاهرية التي لها علاقة مع العناوين الفعلية لا شيء.

وتحتاج إما لكتابة سائق نواة لتفعل ما كنت تتحدث عن أو لديه سائق تثبيت يحتوي على API التي سوف تمكنك من تقديم طلبات I / O ضد معينة العناوين الفعلية (وأن مثل هذا يكون السائق ثغرة أمنية كبيرة جدا في انتظار ان يحدث، كنت أتصور). يبدو لي أن أذكر أن طريق العودة عندما كان بعض الزي مثل سائق كجزء من مجموعة أدوات تطوير للمساعدة في ميناء إرث DOS / WIN16 أو أي كود الجهاز Win32 و. أنا لا أتذكر اسمها أو أعرف ما اذا كان لا يزال حولها.

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