شركة تنمية نفط عمان الخام إلى إرسال IOCTL العليا برنامج تشغيل عامل التصفية (kbfiltr/moufiltr) لتمكين/تعطيل الجهاز

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

سؤال

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

أنا باستخدام kbfiltr و moufiltr الأمثلة التي تأتي مع WDK, تثبيت العليا برامج تشغيل عامل التصفية.على kbfiltr سبيل المثال بإنشاء شركة تنمية نفط عمان والتي يمكن حصرها ومتصلة بواسطة usermode البرنامج.وهذا يسمح لي بإرسال IOCTLs إلى شركة تنمية نفط عمان التي يتم التعامل معها من قبل KbFilter_EvtIoDeviceControlForRawpdo.ومع ذلك ، عندما أحاول فعل أي شيء ذات الصلة إلى برنامج تشغيل عامل التصفية ، مثل الدعوة إلى KbFilter_EvtIoInternalDeviceControl لذلك أنا يمكن أن تفعل شيئا مثل

VOID
KbFilter_EvtIoInternalDeviceControl(
    IN WDFQUEUE      Queue,
    IN WDFREQUEST    Request,
    IN size_t        OutputBufferLength,
    IN size_t        InputBufferLength,
    IN ULONG         IoControlCode
    )
    ...
    hDevice = WdfIoQueueGetDevice(Queue);
    devExt = FilterGetData(hDevice);

    switch (IoControlCode) {      
    ...
      case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
       //
       // Clear the connection parameters in the device extension.
       //
       devExt->UpperConnectData.ClassService = NULL;
       break;
    ...
    }

أحصل على الموت.فإنه ليس من رمز أعلاه ، في الفانيليا سبيل المثال تعيين إلى null علق بها, فقط يدعو إلى Kbfilter يسبب الموت الزرقاء.حاولت اضبط الجهاز ملحق مباشرة في شركة تنمية نفط عمان ولكن هذا أيضا يسبب الموت ، ويفترض لأنه هو شركة تنمية نفط عمان devExt لا kbfiltr ؟

(الصلة:ما هي طريقة جيدة للحصول على تتبع المكدس من الموت?أنا باستخدام Virtual PC بلدي اختبار البيئة و دون رادع بناء من XPSP3)

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

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

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

المحلول

لكن تم حلها أخيرا هذا السائق هو العامل.

تنفيذ KMDF برنامج تشغيل عامل التصفية:

شكرا سرجيوس الذي اقترح COM-port النهج لأن هذا ساعدني في إعداد WinDbg. هذا رهيبة بلوق وظيفة يشرح كيفية الحصول عليها بسرعة ، أساسا سمحت VPC إعداد منفذ com كما المسمى تمكين نواة وضع التصحيح على نظام التشغيل الظاهرية و الاتصال به في حين أنه هو تمهيد.ثم يمكنك الحصول على جميع المثال ، الفواكه المختلفة الرسائل عند تشغيل برنامج التحميل و تفعل الكثير أكثر من ذلك ، ولكن فقط تتبع الرسائل أثناء عملية بدء التشغيل كانت مساعدة كبيرة بالنسبة لي.

أعتقد أن المشكلة الرئيسية كانت تحاول إعادة استخدام داخلي IOCTL في KbFiltr.كانت هذه مجرد فكرة سيئة التصميم من جهتي لأنني لم أفهم الفرق بين الداخلية IOCTL وغيرها IOCTLs - الداخلية IOCTLS مثل IOCTL_INTERNAL_KEYBOARD_DISCONNECT قيدت الوصول شروط يجب فقط أن ترسل من قبل السائقين الآخرين أو النواة.أيضا هذه مقالة "كيف ترسل IOCTL إلى برنامج تشغيل عامل التصفية" مثال باستخدام نفس جهاز التحكم في الهيكل ، وإنما هو WDM.

على أية حال, بعد القتال مع KbFiltr سبيل المثال كل عطلة نهاية الأسبوع ، وأخيرا تخلى وبدأ أكثر من استخدام WDF محمصة/filtr سبيل المثال.هذا هو أكثر المجردة KMDF برنامج تشغيل عامل التصفية واضطررت إلى ملء الكثير من الفراغات باستخدام KbFiltr و MouFiltr.محمصة برنامج تشغيل عامل تصفية العملية مشابهة KbFiltr لكنه يخلق جهاز التحكم بدلا من شركة تنمية نفط عمان.كما يحدد dos اسم الجهاز من أجل السيطرة على الجهاز حتى تتمكن من التواصل مع من usermode دون الحاجة إلى Pinvoke للقيام بهذه الخطوة.جهاز التحكم يسمح لك للسيطرة على جميع الأجهزة التي لديك برنامج تشغيل عامل التصفية تحميل فقط عن طريق بالتكرار على المجموعة.أ waitlock يستخدم لمزامنة الوصول إلى المجموعة.

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

نصائح أخرى

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

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

وقد متعة!

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