أمثلة على الكلمات الرئيسية لبرنامج ربط كامل: ربط، حظر، خدمة
هذا هو سؤال الاختبار لـ "كبير محللي برامج Windows" لشركة xx الذي تلقيته عندما كنت أتقدم لوظيفة. المتطلبات المحددة (أي وصف برنامجي) هي:
1. يسمى برنامج العميل "العميل". مراقبة تشغيل النظام. إذا وجدت أن هناك عملية "المفكرة" (notepad.exe) أو عملية "آلة حاسبة" (calc.exe) في النظام، قم بإنهاء العملية على الفور واكتب الحدث إلى قاعدة البيانات؛ قم بفحص قاعدة البيانات بشكل دوري كل دقيقة وقم بتحميل سجلات الأحداث التي لم يتم تحميلها بعد إلى الخادم.
1. بيئة التشغيل المستهدفة هي نظام التشغيل Windows 2000.
2. يرجى تصميم البرنامج لخدمة النظام.
3. يجب أن يتمتع البرنامج بقدرات مضادة للهجوم، بما في ذلك وظائف مثل مكافحة الحذف ومقاومة الإنهاء القسري للعمليات.
(1) الحفاظ على تشغيل البرنامج بشكل مستمر ومنع البرامج الأخرى من إنهاء تشغيل البرنامج الحالي بالقوة؛
(2) حماية قاعدة بيانات الحدث وملف التنفيذ الرئيسي من الحذف؛
(3) إذا تم العثور على خلل (تم إنهاء العملية، أو حذف الملف، وما إلى ذلك)، ففرض إعادة تحميل/تشغيل البرنامج على الفور؛
(4) إذا تم اكتشاف خلل ثلاث مرات متتالية، فستجبر العملية الخفية نظام التشغيل على إعادة التشغيل بعد إعادة تشغيل النظام، وتأكد من تحميل البرنامج وتشغيله بشكل طبيعي.
(أ) من أجل تحقيق الوظائف المذكورة أعلاه، لا يقتصر البرنامج على نموذج EXE، ويمكن تحديد نموذج التنفيذ بنفسه وفقًا للاحتياجات.
(ب) يتم تنفيذ جميع الوظائف المذكورة أعلاه في بيئة التشغيل العادية لنظام التشغيل Windows 2000 وبموجب أذونات المسؤول، ليست هناك حاجة إلى مراعاة وضع أمان Windows أو الأذونات والمشكلات الأخرى.
4. يرجى استخدام قواعد بيانات سطح المكتب البسيطة، مثل Access وxBase وقواعد بيانات الملفات الأخرى.
5. يحتوي كل حدث تم إنشاؤه على معلومتين على الأقل: وقت حدوث الحدث وكائن معالجة الحدث.
يتم تخزين بيانات الحدث في قاعدة البيانات في الجدول tEvent. يحتوي جدول tEvent على حقلين على الأقل:
(1) حقل EventTime: نوع الوقت/التاريخ. سجل وقت وقوع الحدث.
(2) حقل EventTarget: نوع الحرف. يسجل الأشياء التي تم قتلها في هذا الحدث. الكائنات التي يجب مراعاتها هي عملية المفكرة وعملية الحاسبة.
إذا كنت بحاجة إلى جداول أو حقول أخرى، فيمكنك إضافتها حسب الحاجة.
6. يتم تخصيص تنسيق نقل بيانات الشبكة. يرجى تحديد المحتوى وتنسيق الإرسال المحدد وفقًا لاحتياجاتك، ولا توجد متطلبات محددة. تحتاج شبكة العميل إلى العمل جنبًا إلى جنب مع شبكة الخادم.
7. ليس هناك حدود للغة التطوير وبيئة التطوير المتكاملة المستخدمة، يمكنك اختيارها بنفسك.
8. بالنسبة لطريقة الاتصال بقاعدة البيانات، يرجى الاختيار وفقًا لاحتياجاتك.
2. يسمى البرنامج من جانب الخادم الخادم. قم بمراقبة الشبكة، وبمجرد قيام العميل بتحميل البيانات، يتم استخراج معلومات الحدث على الفور وعرضها في قائمة في واجهة المستخدم.
1. بيئة التشغيل المستهدفة هي نظام التشغيل Windows 2000.
2. يجب تصميم البرنامج كتطبيق عادي لواجهة المستخدم الرسومية لنظام التشغيل Windows 2000. يجب أن تحتوي واجهة المستخدم على قائمة معلومات حدث واحدة على الأقل، والتي تحتوي على ثلاث معلومات على الأقل: وقت حدوث الحدث، وكائن معالجة الحدث، ومصدر الحدث.
(1) وقت حدوث الحدث: هو نفس وقت حدوث حدث العميل.
(2) كائن معالجة الحدث: نفس كائن معالجة حدث العميل.
(3) مصدر الحدث: عنوان IP الخاص بجهاز العميل الذي قام بتحميل الحدث الحالي.
3. يتم تخصيص تنسيق نقل بيانات الشبكة، ويعمل جنبًا إلى جنب مع العميل.
4. ليس هناك حدود للغة التطوير وبيئة التطوير المتكاملة المستخدمة، يمكنك اختيارها بنفسك.
تعليمات تشغيل البرنامج:
يجب وضع Client.ini في الدليل الجذر لمحرك الأقراص C. ويمكن وضع الملفات الأخرى في أي مكان، ولكن يجب وضع Survival.exe وclient.exe في نفس المجلد قبل بدء Survival.exe، يرجى تكوين عنوان IP للخادم (interval_server ) في Client.ini )، ثم قم بتشغيل ADServer.exe
وصف التعليمات البرمجية المصدر 1. خادم ADServer.exe
نظرًا لأن جانب الخادم بسيط، فلنتحدث عن جانب الخادم أولاً :)
تتمثل مهمة الخادم في تلقي البيانات من الشبكة واستخدام نقل حظر TServerSocket. في كل مرة يتلقى TServerSocket طلب اتصال من العميل، فإنه يقوم بإنشاء مؤشر ترابط TServerClientThread. يجب عليك إنشاء TWinSocketStream جديد في هذا الموضوع لقراءة بيانات العميل وكتابتها. الكود الرئيسي مكتوب في الجزء ClientExecute من هذا الموضوع.
لا توجد مشكلة في كتابة البيانات إلى العميل بواسطة TWinSocketStream، لكن قراءة البيانات من العميل (باستخدام طريقة القراءة) غالبًا ما تعود قبل الانتهاء من القراءة، حتى إذا كنت تستخدم WaitForData. لذلك كتبت وظيفة waitDateComplete لانتظار قراءة البيانات.
2. العميل العميل أكثر إزعاجًا بعض الشيء. Client.exe عبارة عن خدمة وsurvival.exe عبارة عن تطبيق. يقوم الاثنان بمراقبة بعضهما البعض. إذا تم إيقاف تشغيل أحدهما، فسيقوم الآخر بإعادة تشغيله. يتم استخدام HookDll.dll للخطافات. يجب كتابة الخطافات العامة في وحدات dll مستقلة (باستثناء بعض الخطافات، يرجى الرجوع إلى هذه المقالة: http://www.pconline.com.cn/pcedu/empolder/gj/ vc/ 0403/340480.html).
لا يحتوي Client.exe على بضعة أسطر من التعليمات البرمجية ويستخدم بشكل أساسي CreateProcess لبدء العملية. لاحظ أنه إذا كانت الخدمة تريد القيام بأشياء تتعلق بقشرة Windows، مثل الخطافات المستخدمة في ملف Hookdll.dll الذي بدأه هذا البرنامج، فيجب تعيين ServiceType على stWin32 ويجب تعيين خاصية TService::Interactive على true.
يتم استخدام Survival.exe لبدء الخدمة، وتحميل ملف Hookdll.dll، والإبلاغ عن الأحداث إلى الخادم.
1. يتطلب بدء الخدمة ثلاث عمليات أولاً، افتح وحدة التحكم في الخدمة، وهي الواجهة الخلفية لـ "الخدمة" في أداة الإدارة. استخدم OpenSCManager للحصول على مقبض مدير الخدمة، ثم استخدم OpenService (مقبض مدير الخدمة، اسم الخدمة ، SERVICE_START |.SERVICE_QUERY_STATUS) للحصول على مقبض الخدمة المحددة، وأخيرًا يمكنك استخدام StartService(...) لفتح الخدمة. لاحظ أنه يجب الحصول على الإذنين SERVICE_START وSERVICE_QUERY_STATUS على الأقل.
2. فيما يتعلق بتحميل ملف Hookdll.dll، يستخدم هذا البرنامج الارتباط الضمني، أي استخدام مشروع BCBAdd to Project لاستيراد ملف lib الخاص بملف dll. بعد الاستيراد، إذا لم يتم استدعاء وظيفة ملف dll في الكود، فلن يتم تحميل ملف dll. يستدعي هذا البرنامج وظيفة beginTrace (HWND host) لتمرير مقبض النافذة الخاص بـ Survival.exe، ويرسل dll بعض الرسائل إلى Survival.exe من خلال هذا المقبض.
3. فيما يتعلق بالإبلاغ عن الأحداث إلى الخادم، تمت كتابة فئة TMSocketClient خصيصًا، وهي المسؤولة بشكل أساسي عن عملية إرسال الرسائل -> استلام إيصالات الرسائل، الرمز الرئيسي موجود في TMSocketClient::Command (....). الكود الموجود في ADServer.exe، سهل القراءة. من خلال #تعريف ثوابت الأوامر المختلفة، يمكن لهذه الوحدة إكمال العديد من أنواع مهام النقل. في الواقع، هذه الوحدة هي فئة كتبتها في الماضي لمحاكاة TNMFTP، وقد تم تبسيطها عن طريق حذف العديد من التعريفات واستخدامها لنقل الملفات في شبكة LAN افتراضية (لا يمكن أن يعمل TNMFTP في شبكة LAN افتراضية).
3. هوكDll.dll
الكود بسيط للغاية، ما عليك سوى الانتباه إلى شيء واحد، وهو أنه إذا استدعت عمليات N نفس ملف dll، فسيتم نسخ ملف dll هذا بشكل عام، تحتوي كل نسخ مختلفة من ملفات N dll على شرائح بيانات خاصة بها. وهذا يعني أن قيمة نفس المتغير في كل نسخة مختلفة ولا تتداخل مع بعضها البعض. ولكن في الواقع، ترك Windows مثل هذه الآلية التي تسمح لنا بالإعلان عن مثل هذا المتغير في ملف dll والحفاظ على اتساق البيانات بين مثيلات N من ملف dll، تمامًا كما هو الحال مع المؤشر الذي يتجاوز مساحة العملية. للإعلان عن مثل هذا المتغير، قم أولاً بإنشاء ملف .def بنفس اسم ملف dll ثم اكتب في الملف:
الأقسام
SHSEG قراءة الكتابة المشتركة
بعد ذلك، قم بتعريف متغيرات dll التي تريد مشاركتها بين العمليات كمتغيرات عامة، وقم بتهيئة هذه المتغيرات. لاحظ أن الفرق بين المشاركة وعدم المشاركة هو هل تمت تهيئتها أم لا!
يشير هذا البرنامج إلى "تطبيق الخطافات: مراقبة تشغيل البرنامج" على CCRun، شكرًا للمؤلف فيكتور تشين.
حسنًا، يبدو أن هذا هو كل ما يمكن شرحه. بالإضافة إلى ذلك، هناك بعض المتغيرات غير المفيدة في البرنامج وليس لدي الوقت لتنظيفها. أرجو أن تسامحني :) شكرًا لك على المشاهدة!
يوسع