أعماق إدخال/إخراج Windows (الجزء 6، الأخير) ── برامج تشغيل المرشّح والمرشّحات المصغّرة: لماذا يستطيع Procmon ومسح الفيروسات التقاطع مع الإدخال/الإخراج

· · Windows, Win32, I/O, المرشّحات المصغّرة, النواة, برامج تشغيل الأجهزة, أمن, التحقيق في الأخطاء

هذه الحلقة الأخيرة من سلسلة «أعماق إدخال/إخراج Windows».

منذ أن رسم الجزء 1 صندوقاً بعنوان «مرشّحات نظام الملفّات (مكافحة الفيروسات والتشفير وProcmon ونحوها)» على مخطّط مكدّس الأجهزة، ظلّ من يتوسّطون يظهرون عبر هذه السلسلة: سبب قدرة Procmon على تسجيل كلّ إدخال/إخراج (الجزء 1)؛ «الوصول إلى الملفّات بطيء في تلك البيئة وحدها» (الجزء 2)؛ نقطة إعادة التحليل التي تجعل OneDrive يبدأ التنزيل لحظة فتح الملفّ (الجزء 5). تواجه هذه الحلقة أخيراً آليّة التوسّط نفسها وجهاً لوجه — برامج تشغيل مرشّح نظام الملفّات والمرشّحات المصغّرة — وتربط كلّ خيط تركته السلسلة معلّقاً.

1. الخلاصة أوّلاً

  • «التقاطع مع الإدخال/الإخراج» نقطة توسيع يقرّها نظام التشغيل رسميّاً. يستطيع مرشّح نظام الملفّات رؤية طلب إلى نظام الملفّات وإعادة كتابته ورفضه أو معالجته بدلاً منه (الفصل 2).1
  • المعيار الحاليّ هو المرشّح المصغّر. لحلّ مشاكل الأسلوب القديم الذي تقاطع مع مكدّس الأجهزة مباشرة (ترتيب غير محدَّد، وتعذّر الإلغاء)، انتقل الجيل إلى أسلوب يسجّل استدعاءات لدى مدير المرشّحات (FltMgr) المرفق بـ Windows (الفصل 2).23
  • الحركة استدعاءات pre/post. قبل كلّ عمليّة وبعدها تُستدعى بترتيب التسجيل = ترتيب الارتفاع. تمرير، وإكمال، ورفض، وإعادة كتابة — «خيارات برنامج التشغيل» التي رأيناها في الجزء 1 تُستخدم كما هي (الفصل 3).2
  • الارتفاع (altitude) يحسم الترتيب. تُخصَّص نطاقات أرقام لمجموعات حسب الغرض (Activity Monitor 360000–389999، Anti-Virus 320000–329999، وغيرها)، ويُعطى كلّ مثيل يُرفَق بمجلّد رقماً فريداً (الفصل 4).45
  • سكّان حاسوبكم يُرَون بـ fltmc. Procmon (أثناء التشغيل فقط)، ومكافحة الفيروسات، ومرشّح سحابة OneDrive — الجميع يصطفّ هنا (الفصل 5).
  • إعداد استثناء مكافحة الفيروسات يعني «تخطّي مسح ذلك المنتج نفسه» ولا يؤثّر في مرشّحات مصغّرة أخرى. الاستثناء مقايضة تُضعف الحماية، ولمجلّدات التطوير خيار أكثر أماناً: Dev Drive (مسح لاتزامنيّ) (الفصل 6).67
  • التحقيق في «بطء تلك البيئة وحدها» يبدأ من عمود Duration في Procmon ومقارنة تكوين fltmc (الفصل 7).

خريطة المعرفة لهذه المقالة

المعيار الحاليّ لعامل تصفية نظام الملفّات هو عامل التصفية المصغَّر: بخلاف عامل التصفية القديم الذي يضع كائن جهاز مباشرة على مكدّس الأجهزة، يسجّل استدعاءات pre/post راجعة لدى مدير التصفية (FltMgr) المرفق مع Windows. ترتيب الاستدعاء يُحسَم حسماً قاطعاً بالارتفاع الذي تخصّصه Microsoft وتديره، ويمكن مراقبة التكوين الفعليّ بأمر fltmc. مكافحة الفيروسات وProcmon ومزامنة OneDrive السحابيّة جميعاً سكّان الآليّة نفسها؛ إعداد الاستبعاد يُسقِط مسح ذلك المنتج وحده ويصحبه مقايضة إضعاف الحماية، ولوحدات التطوير البديل الأكثر أماناً هو Dev Drive.

خريطة معرفة برامج تشغيل التصفية وعوامل التصفية المصغَّرةمخطّط يبيّن علاقات برنامج تشغيل عامل تصفية نظام الملفّات، وتعاقب الأجيال من عامل التصفية القديم إلى عامل التصفية المصغَّر، ومدير التصفية (FltMgr)، واستدعاءات pre/post الراجعة، والارتفاع ومجموعة ترتيب التحميل، والمراقبة بـ fltmc، وعامل التصفية المصغَّر لمكافحة الفيروسات وإعداد الاستبعاد وDev Drive، وآليّة تسجيل Procmon لكلّ الإدخال/الإخراج بوصفه عامل تصفية مصغَّراًينفّذينفّذيخلفيشترطقد يسبّبيمنعيشترطيستخدميستخدميُكوَّن بـيُكوَّن بـيُتحقّق بـيشترطينبغي أن يسبقيُتحقّق بـيُتحقّق بـيستخدميستخدميستخدميُكوَّن بـيؤتمتيستخدمقد يسبّبيخفّفقد يسبّبيُكوَّن بـيخفّفيخفّفموصى به لـيستخدميُتحقّق بـيستخدميستخدميشترطيستخدمعامل تصفية مصغَّر (minifilter)مدير التصفية (FltMgr)عامل تصفية قديمبرنامج تشغيل عامل تصفية نظام الملفّاتمكدّس الأجهزةعدم استقرار ترتيب التحميلاستدعاء pre/post راجعالارتفاع (altitude)مجموعة ترتيب التحميلfltmcطلب الارتفاعProcess Monitor (procmon.exe)عامل تصفية مصغَّر لمكافحة الفيروساتعامل تصفية الملفّات السحابيّة (cldflt)ملفات OneDrive عند الطلبFast I/Oكلفة الأداء بسبب المسحإعداد الاستبعاد (استبعاد مجلّد)انخفاض مستوى الحمايةDev Driveإطار FltMgrكائن برنامج التشغيل

في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 35، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle

2. تاريخ من يتوسّطون ── من المرشّح القديم إلى FltMgr

برنامج تشغيل مرشّح نظام الملفّات برنامج تشغيل يستطيع اعتراض الطلبات المتّجهة إلى نظام الملفّات (أو المجلّد تحته). يستطيع تسجيل الطلب ومراقبته وتغيير محتواه، وحتّى رفضه أو معالجته بدلاً منه — أساس برمجيّات مكافحة الفيروسات والتشفير والنسخ الاحتياطيّ والتخزين المتدرّج.1

كان أسلوب التنفيذ القديم (المرشّح القديم) يرصف كائن جهازه مباشرة على مكدّس الأجهزة الذي رأيناه في الجزء 1. الآليّة صريحة، لكنّها عمليّاً كانت مليئة بالمشاكل — ترتيب الرصف يعتمد على ترتيب التحميل ويصعب ضمانه، ومتى رُصف لا يخرج بأمان (لا يُلغى تحميله)، ويصير مرتعاً لأخطاء توافق بين المرشّحات.

لذلك أدخل Windows مدير المرشّحات (FltMgr). يقف FltMgr نفسه على المكدّس كمرشّح مرفق بنظام التشغيل، وتُسجَّل وظائف المرشّح الفرديّة كمرشّحات مصغّرة بتسجيل استدعاءات لدى FltMgr.2

أسلوب المرشّح المصغّر (المعيار الحاليّ)تسجيل استدعاءتسجيل استدعاءمدير المرشّحات (FltMgr)مرفق بنظام التشغيل. من يقف على المكدّس هذا فقطمرشّح مصغّر A (ارتفاع عالٍ)مرشّح مصغّر B (ارتفاع منخفض)نظام الملفّاتالترتيب محسوم بالارتفاعالتحميل ممكن في أيّ وقت(المرشّحات الداعمة يمكن إلغاء تحميلها أيضاً)الأسلوب القديممرشّح قديم Aمرشّح قديم Bنظام الملفّاتالترتيب متروك لترتيب التحميلإلغاء التحميل الآمن غير ممكن

الشكل 1: تبديل الجيل. لا «رصف» على المكدّس بل «تسجيل» لدى FltMgr

مزايا أسلوب المرشّح المصغّر مسردة رسميّاً — يمكن التحميل في أيّ وقت، والتحكّم في الترتيب، وإلغاء التحميل أثناء التشغيل إن نفّذ المرشّح استدعاء إلغاء التحميل (من لم ينفّذه أو يرفض لا يُنزَع).3 للتعايش مع المرشّحات القديمة يستطيع FltMgr الوقوف في مواضع متعدّدة على المكدّس كـ«إطارات» متعدّدة، ويُضمَن أن يعود المرشّح المصغّر بعد إلغاء التحميل وإعادة التحميل إلى الموضع نفسه (الارتفاع نفسه).2 تكاد برمجيّات مكافحة الفيروسات والمراقبة والمزامنة الحديثة كلّها تكون هذا المرشّح المصغّر.

3. حركة المرشّح المصغّر ── استدعاءات pre/post

يعلن المرشّح المصغّر لـ FltMgr «بأيّ العمليّات يهتمّ». مثلاً يهتمّ بـ IRP_MJ_CREATE (فتح) وIRP_MJ_WRITE (كتابة) فقط. عندها، في كلّ مرّة تسير تلك العمليّة، يُستدعى قبل العمليّة (استدعاء pre) وبعد العمليّة (استدعاء post).

NTFSمرشّح مصغّر B(ارتفاع منخفض)مرشّح مصغّر A(ارتفاع عالٍ)FltMgrمدير الإدخال/الإخراجNTFSمرشّح مصغّر B(ارتفاع منخفض)مرشّح مصغّر A(ارتفاع عالٍ)FltMgrمدير الإدخال/الإخراجطلب (IRP_MJ_CREATE ونحوه. عالم الجزء 1)استدعاء preاستدعاء preإلى نظام الملفّاتنتيجة المعالجةاستدعاء postاستدعاء postإكمال (إلى تدفّق الإكمال في الجزء 1)

الشكل 2: استدعاءات pre/post. الذهاب بترتيب الارتفاع من الأعلى، والعودة بالعكس

ماذا يستطيع كلّ استدعاء؟ الهيكل نفسه لـ«خيارات برنامج التشغيل الثلاثة» في القسم 4.3 من الجزء 1 يُقدَّم بواجهة أكثر أماناً.

استُدعي استدعاء preماذا نفعل بهذه العمليّةالتمرير كما هو(إن لم يلزم post يُعلَن ذلك أيضاً)الرفضإعادة رفض وصول ونحوه فوراًمثال: اكتشاف فيروس، حظر الكتابةالإكمال بأنفسكممثال: مرشّح سحابة يجلبالكيان ويقدّمهتعديل المعاملات أو المحتوى ثمّ التمريرمثال: مرشّح تشفير

الشكل 3: خيارات استدعاء pre. «الرؤية والإيقاف والنيابة وإعادة الكتابة» كلّها ممكنة رسميّاً

وهنا يُستردّ واجب الجزء 4 — يستطيع المرشّح المصغّر الحضور أيضاً عند الإدخال/الإخراج السريع (الطريق المختصر الذي لا يصنع IRP). لأنّ FltMgr يمرّر آليّة الاستدعاء عبر مسار الإدخال/الإخراج السريع أيضاً، فلا يحدث كما في عصر القديم «إن أُخذ الطريق المختصر لا يُرى». اصطفاف صفوف FASTIO_ أيضاً في سجلّ Procmon بفضل هذا الموقف.

4. الارتفاع ── «العلوّ» يحسم الترتيب

حين يهتمّ عدّة مرشّحات بالعمليّة نفسها، من يرى أوّلاً مسألة جسيمة. إن لم ترَ مكافحة الفيروسات قبل التشفير اضطُرّت إلى مسح نصّ مشفَّر، وأداة المراقبة إن لم تكن فوق الجميع لا تستطيع مراقبة الكلّ.

ما يحسم هذا الترتيب هو الارتفاع (altitude: العلوّ). لكلّ نوع مرشّح مجموعة ترتيب تحميل ونطاق أرقام معرَّفان. بدقّة، وحدة الارتفاع ليست برنامج التشغيل كلّه بل «مثيل» المرشّح المصغّر المرفَق بالمجلّد. الرقم فريد، وكلّما كبر الرقم كان الموضع أعلى على المكدّس (أقرب إلى التطبيق).4 يمكن لبرنامج تشغيل واحد أن يحمل تعريفات مثيلات متعدّدة ويظهر عند ارتفاعات مختلفة، ولهذا قائمة fltmc instances على مستوى المثيل.

أقرب إلى التطبيق (الرقم أكبر)FSFilter Activity Monitor: 360000–389999مراقبة الإدخال/الإخراج وتسجيله (Procmon هنا)FSFilter Undelete: 340000–349999استعادة الملفّات المحذوفةFSFilter Anti-Virus: 320000–329999اكتشاف الفيروسات وإزالتهاFSFilter Replication: 300000–309999النسخ إلى البعيدFSFilter Continuous Backup: 280000–289999نسخ احتياطيّ مستمرّأسفل أكثر: Content Screener /Quota Management / System Recovery /نطاقات التشفير والضغط وغيرها تتواصلأقرب إلى نظام الملفّات (الرقم أصغر)

الشكل 4: نطاقات الارتفاع (مقتطف). «العلوّ الذي ينبغي الوقوف عنده» محسوم حسب الغرض

المهمّ أنّ هذا الرقم يُخصَّص ويُدار من Microsoft.5 لا يعلنه البائع من تلقاء نفسه بل يطلبه ويتلقّاه — لذلك يُحفَظ على أيّ حاسوب نظام «المراقبة فوق مكافحة الفيروسات، ومكافحة الفيروسات فوق التشفير». هذا كان الجواب على «يانصيب ترتيب التحميل» في عصر القديم.

جهة الطلب إن صنعتم مرشّحاً مصغّراً لشركتكم. للمطوّرين، نكتب الخطوة التالية فقط. يُطلَب الارتفاع وفق إجراء Request a Filter Altitude Identifier، برسالة إنكليزيّة إلى fsfcomm@microsoft.com بعنوان «Filter altitude request». يلزم ملء اسم الشركة وجهة الاتّصال (اسم مستعار للشركة طويل الأمد لا شخصيّ) واسم المنتج وعنوان URL للمنتج ووصف المرشّح واسم ملفّ برنامج التشغيل ونوع المرشّح ونوع البدء ومجموعة ترتيب التحميل المرغوبة والارتفاع المرغوب، كلّها. توقّعوا 30 يوم عمل للمعالجة، ولا منفذ للمعاملة العاجلة، وقد يختلف الرقم المخصَّص عن المرغوب، وكلّ ذلك منصوص.8 كذلك، إن كانت للشركة أصلاً ارتفاع صحيح في مجموعة ترتيب التحميل نفسها، يجوز لها أن تقرّر بنفسها قيمة بفاصلة عشرية ملحقة بذلك الرقم (مثال: 325000.3)، ويكفي في تلك الحالة الإبلاغ بالبريد بعد الواقعة.8

5. تقديم السكّان ── رؤية حاسوبكم بـ fltmc

يكفي التنظير. لنرَ الشيء الحقيقيّ. من موجه أوامر بامتيازات مدير:

:: List of registered minifilters, with altitudes
fltmc

:: Which filters are attached to which volumes
fltmc instances

:: View it from the volume side
fltmc volumes

fltmc بلا وسيطات يخرج القائمة نفسها لـ fltmc filters. المخرجات أربعة أعمدة، ومثال بالصيغة نفسها وارد في وثائق Microsoft.9

C:\Windows\system32>fltmc

Filter Name                     Num Instances    Altitude    Frame
------------------------------  -------------  ------------  -----
bindflt                                 1        409800         0
cldflt                                  1        409500         0
WdFilter                                4        328010         0
luafv                                   1        135000         0
FileInfo                                4         45000         0

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

معاني الأعمدة كالتالي.

العمود المعنى
Filter Name اسم المرشّح (برنامج التشغيل)
Num Instances بعدد المجلّدات المرفَق بها (عدد المثيلات في الفصل 4)
Altitude الارتفاع. كلّما كبر كان أقرب إلى التطبيق
Frame رقم إطار FltMgr. إن كان <Legacy> فهذه علامة أنّ مرشّحاً قديماً لا يستخدم FltMgr ما زال حيّاً.9

من هذه الأسطر الخمسة وحدها يُقرأ أنّ bindflt وcldflt في نطاق FSFilter Top الأعلى (400000–409999)، وWdFilter في نطاق Anti-Virus (320000–329999)، وFileInfo في نطاق FSFilter Bottom الأدنى (40000–49999). هيكل «العلوّ الذي ينبغي الوقوف عنده حسب الغرض» الذي رأيناه في الفصل 4 يُؤكَّد كما هو بالأرقام. وإن شغّلتم Procmon ثمّ نفّذتم fltmc مرّة أخرى، يزيد سطر يبدأ بـ PROCMON في نطاق Activity Monitor (360000–389999) واحداً.

تختلف الوجوه حسب البيئة، لكن السكّان النموذجيّين وجوه مألوفة في هذه السلسلة.

  • WdFilter ── المرشّح المصغّر لـ Microsoft Defender. في نطاق Anti-Virus. على كثير من الحواسيب، نقطة تفتيش يمرّ بها كلّ إدخال/إخراج ملفّات حتماً.
  • cldflt ── مرشّح ملفّات السحابة. وحدة تنفيذ ملفّات OneDrive عند الطلب، يجهّز الكيان حين تُفتح نقطة إعادة التحليل (عنصر نائب) التي رأيناها في الجزء 5.10
  • PROCMON24 (ونحوه) ── مرشّح مصغّر مؤقّت في نطاق Activity Monitor يظهر فقط أثناء تشغيل Process Monitor. هذا كشف سرّ قدرة Procmon على رؤية كلّ إدخال/إخراج.11 نفّذوا fltmc قبل التشغيل وبعده وقارنوا.
  • وغيرها، برمجيّات النسخ الاحتياطيّ، ومنتجات التشفير (مكافحة تسرّب المعلومات)، وEDR، والتخزين الافتراضيّ — كلّما كان حاسوب أعمال كثر السكّان.

إن نظرنا إلى أداة Procmon التي استخدمناها منذ الجزء 1 من خارج صندوق الأدوات في الحلقة الأخيرة، تصير دورة أنيقة: «المراقب أيضاً كان ساكناً في الآليّة نفسها التي يراقبها».

6. أين تستهلك مكافحة الفيروسات الوقت

أكبر أثر عمليّ للمرشّحات كلفة مسح مكافحة الفيروسات. نرسم أين يحدث الوقت (التفاصيل تختلف حسب المنتج. التالي شكل نموذجيّ).

NTFSمرشّح مصغّر AVالتطبيقNTFSمرشّح مصغّر AVالتطبيقpre-create: حكم مسبق على المسار والسياسةإن كان الملفّ غير ممسوحيُمسَح المحتوى هناوإن وُجدت مشكلة يُبطَل الفتح── السبب الرئيس لبطء الفتحالملفّات التي تغيّرتتصير هدفاً لإعادة المسح عند الإغلاق ونحوهمع عدد هائل من الملفّات الصغيرة (نواتج وسيطة للبناء ونحوها)يتراكم هذا الذهاب والإياب بعدد الملفّاتفتح ملفّالتمرير (تنفيذ الفتح)نجاح الفتح (post-create)إن لم تكن مشكلة يُعاد المقبضكتابة وإغلاق

الشكل 5: مواضع حدوث كلفة المسح. لكلّ ملفّ ضئيلة، لكن مع عشرات الآلاف تصير مهيمنة

بهذا يُفهم موضوعان عمليّان بدقّة.

المعنى التقنيّ لإعداد الاستثناء. في إدخال/إخراج مسار يطابق قائمة الاستثناء، يُتخطّى مسح المرشّح. المرشّح لا يختفي من المكدّس؛ الواقع أنّ قرار «لا تفحص» يُتَّخذ أبكر. وهناك قيد مهمّ آخر — الاستثناء يعمل فقط لمرشّح المنتج الحامل لذلك الإعداد. ما يغيّره إعداد استثناء Microsoft Defender هو مسح WdFilter، ولا أثر له في حركة مرشّحات مصغّرة مجاورة (مكافحة فيروسات شركة أخرى، وEDR، ونسخ احتياطيّ، وتشفير، وغيرها). حين «أضفنا استثناء وما زال بطيئاً» اشتبهوا في أنّ ساكناً آخر يستهلك الوقت (مقارنة fltmc في الفصل 7). الأثر كبير، غير أنّ الاستثناء يُضعف حماية ذلك الموضع حتماً. تحذّر وثائق Microsoft أيضاً مراراً أنّ الاستثناء يقلّل الدفاع فينبغي إبقاؤه حدّاً أدنى بعد تقييم المخاطر.6 التعامل العمليّ مع الكشف الخاطئ وأثر الأداء عولج في «عندما يُعامَل تطبيق Windows الذي طوّرته شركتك بوصفه فيروساً».

جواب جديد اسمه Dev Drive. مجلّد مخصَّص مصمَّم لأحمال عمل التطوير (عدد هائل من الملفّات الصغيرة)، تعمل فيه Microsoft Defender في وضع الأداء (مسح لاتزامنيّ). يُوضع بوصفه بديلاً أكثر أماناً لاستثناء المجلّد، وافتراضيّاً لا تُرفَق مرشّحات إضافيّة، بينما يُنصّ أيضاً تحذير قويّ من تشغيل بنزع كلّ المرشّحات.7 هذا الحلّ الذي توصي به Microsoft حالياً لـ«نريد تسريع البناء لكن الاستثناء مخيف».

7. إجراء التحقيق في «بطء تلك البيئة وحدها»

نجمع الأدوات التي راكمناها في السلسلة أخيراً في إجراء واحد.

نعمنعملالا (متفرّق)العَرَض: التطبيق نفسه لكن بيئة معيّنة فقطالوصول إلى الملفّات بطيءانظروا عمود Duration في Procmonفي أيّ عمليّة (IRP_MJ_CREATE؟ WRITE؟)يختفي الوقتعمليّة معيّنة بطيئة على نحو موحّد؟قارنوا fltmc instances مع بيئة سريعةانظروا فرق تكوين المرشّحاتمرشّح الفرق هو السبب؟إعداد استثناء (مع تقييم مخاطر) أوالنظر في Dev Drive والتشاور مع المورّداشتبهوا فيما سوى المرشّح:الذاكرة المؤقّتة (الجزء 4) والتفتيت وMFT (الجزء 5)والوجهة الشبكيّة (UNC) والجهاز نفسه

الشكل 6: فرز البطء الناجم عن المرشّح. المفتاح «الزمن لكلّ عمليّة» و«فرق تكوين المرشّحات بين البيئات»

نقطتان. الأولى، لدى Procmon زمن لكلّ عمليّة (Duration). إن فكّكتم «بطيء» إلى «أيّ عمليّة بطيئة» انتهى نصف البحث عن الجاني. الثانية، فرق البيئة كثيراً ما يكون فرق تكوين المرشّحات. آلة التطوير وآلة الإنتاج، حاسوب الشركة وحاسوب العميل — صفّوا مخرجات fltmc فحسب فتظهر المرشّحات التي ينبغي الاشتباه فيها.

الخطوات الثلاث الأولى إن لم تلمسوا Procmon من قبل. عمود Duration غير معروض افتراضيّاً، فنكتب التشغيل حتّى لا تتوقّفوا هنا.

  1. شغّلوا Procmon.exe كمدير.
  2. افتحوا Options menu > Select Columns… وفعّلوا Duration من قائمة الأعمدة.
  3. في Filter menu > Filter… (Ctrl+L) أدخلوا Process Name / is / اسم exe المستهدف / Include، واضغطوا زرّ Add ثمّ OK (بلا Add لا يدخل الشرط).

بعد ذلك انقروا عمود Duration للفرز فتجتمع العمليّات التي تستهلك الوقت في الأعلى. للتجميع حسب العمليّة أو الملفّ يمكن أيضاً Tools menu > File Summary. تشغيل ProcMon عموماً ملخَّص في «دليل عملي لأداة Process Monitor (ProcMon)».

8. اللمسة الأخيرة للسلسلة ── خريطة الأجزاء الستّة

بهذا فتحنا كلّ صناديق الخريطة التي رسمناها في الجزء 1. نجمع الكلّ في ورقة واحدة.

الإكمال يعود إلى هناإدخال/إخراج مفعَّل الذاكرة المؤقّتة يتنسّق(نظام الملفّات يستدعي وظيفة الذاكرة المؤقّتة)مقاطعة → إكمال (الجزء 1)التطبيقReadFile / WriteFile / async-awaitالجزء 2: إدخال/إخراج تزامنيّ ولاتزامنيّوضع المقبض وOVERLAPPEDالجزء 3: IOCP ومجمع مؤشّرات الترابط في .NETاستلام الإكمال وتشغيل الاستمرارالجزء 1: مدير الإدخال/الإخراج وIRPحلّ الأسماء والكائنات الثلاثة ومكدّس الأجهزةالجزء 6: المرشّحات والمرشّحات المصغّرةFltMgr والارتفاع وpre/postالجزء 4: مدير الذاكرة المؤقّتةعرض 256 كيلوبايت وlazy writer والإدخال/الإخراج السريع(يعمل بالتنسيق مع NTFS)الجزء 5: NTFSMFT والدفق والربط والسجلّانمكدّس التخزين والجهاز

الشكل 7: خريطة السلسلة كلّها. مدير الذاكرة المؤقّتة ليس «طبقة تُعبَر» بل رفيقاً يتنسّق مع نظام الملفّات، وعند فقدان الذاكرة المؤقّتة يخرج طلب من NTFS إلى التخزين

9. الخلاصة ── خاتمة السلسلة

خلاصة الحلقة الأخيرة.

  • التقاطع مع الإدخال/الإخراج نقطة توسيع يقرّها نظام التشغيل، والمعيار الحاليّ تسجيل استدعاءات لدى FltMgr (مرشّح مصغّر). الترتيب محسوم بالارتفاع، وMicrosoft يخصّص الأرقام ويديرها.245
  • الحركة استدعاءات pre/post. يمكن التمرير والرفض والنيابة وإعادة الكتابة، والحضور عند الإدخال/الإخراج السريع أيضاً. Procmon وDefender وOneDrive سكّان الآليّة نفسها.11110
  • إعداد الاستثناء = تخطّي المسح، مقايضة مع الحماية. لمجلّدات التطوير خيار أكثر أماناً: Dev Drive (مسح لاتزامنيّ).67
  • «بطء تلك البيئة وحدها» يُفرَز من Duration في Procmon وفرق تكوين fltmc — أدوات السلسلة تصير إجراء التحقيق كما هي.

وخلاصة السلسلة كلّها في سطر: إدخال/إخراج Windows تصميم متّسق يحدّد الوجهة في فضاء الأسماء، ويحوّل الطلب إلى رزمة (IRP) تسير بين الطبقات، ويتيح لكلّ طبقة اختيار «الرؤية أو الاحتفاظ أو النيابة». تحت سطر File.ReadAllText واحد، تتحرّك بنية هذه الأجزاء الستّة في كلّ مرّة. بدل حفظ سلوك الواجهة عن ظهر قلب، الاستدلال من هذه الخريطة بأنّ «هكذا ينبغي أن يكون» — تلك القوّة التي أردنا أن تكتسبوها في هذه السلسلة. شكراً لمرافقتكم في رحلة طويلة.

مقالات ذات صلة

مجالات الاستشارة ذات الصلة

تتعامل شركة كومورا سوفت ذ.م.م. مع تحقيقات مشاكل أداء تطبيقات أعمال Windows وأخطائها التي تتورّط فيها برامج تشغيل المرشّح، مثل «بطيء في بيئة معيّنة فقط» و«برمجيّة الأمن تتداخل مع تطبيقنا».

روابط مرجعيّة

  1. Microsoft Learn, About file system filter drivers. حول كون برنامج تشغيل مرشّح نظام الملفّات برنامجاً اختياريّاً يستطيع اعتراض (intercept) الطلبات المتّجهة إلى نظام الملفّات أو إلى برنامج تشغيل مرشّح آخر؛ وبذا توسيع الوظيفة أو استبدالها قبل وصول الطلب إلى الوجهة الأصليّة، وتسجيل الطلب ومراقبته وتغيير البيانات ومنع السلوك؛ وكون أدوات مكافحة الفيروسات وبرامج التشفير وأنظمة إدارة التخزين المتدرّج أمثلة لبرامج تشغيل المرشّح.  2 3

  2. Microsoft Learn, Filter Manager Concepts. حول كون مدير المرشّحات (FltMgr) برنامج تشغيل وضع نواة مرفق بـ Windows، ويكشف وظائف تبسّط تطوير برامج تشغيل المرشّحات المصغّرة؛ وقدرة المرشّح المصغّر على تسجيل معالجة قبل عمليّات الإدخال/الإخراج وبعدها (استدعاءات pre/post)؛ وقدرة FltMgr على الإرفاق في مواضع متعدّدة على مكدّس الإدخال/الإخراج كإطارات للتعايش مع المرشّحات القديمة؛ وعودة المرشّح المصغّر بعد إلغاء التحميل وإعادة التحميل إلى الارتفاع نفسه في الإطار نفسه.  2 3 4 5

  3. Microsoft Learn, Advantages of the Filter Manager Model. حول مزايا نموذج المرشّح المصغّر مقابل نموذج المرشّح القديم، بما فيها تحكّم أفضل في ترتيب تحميل المرشّحات؛ وقدرة المرشّح المصغّر، بخلاف المرشّح القديم، على التحميل في أيّ لحظة؛ وإمكان إلغاء التحميل؛ والاتّصال بمجلّدات DAX وغيرها.  2

  4. Microsoft Learn, Load order groups and altitudes for minifilter drivers. حول تعريف مجموعات ترتيب تحميل حسب الغرض لمرشّحات نظام الملفّات، وتخصيص نطاق ارتفاع لكلّ مجموعة؛ وحمل كلّ برنامج تشغيل مرشّح معرّف ارتفاع فريد يحدّد موضعه النسبيّ تجاه المرشّحات الأخرى داخل مكدّس الإدخال/الإخراج؛ وأمثلة المجموعات مثل FSFilter Activity Monitor (360000–389999، مراقبة الإدخال/الإخراج والإبلاغ عنه)، وFSFilter Undelete (340000–349999)، وFSFilter Anti-Virus (320000–329999، اكتشاف الفيروسات وإزالتها أثناء إدخال/إخراج الملفّات)، وFSFilter Replication (300000–309999)، وFSFilter Continuous Backup (280000–289999).  2 3

  5. Microsoft Learn, Allocated altitudes. حول تخصيص ارتفاعات المرشّحات المصغّرة وإدارتها من Microsoft، والحفاظ على قائمة علنيّة للارتفاعات المخصَّصة؛ وإدراج WdFilter.sys في تلك القائمة بـ 328010 في مجموعة FSFilter Anti-Virus، وcldflt.sys بـ 409500 في مجموعة FSFilter Top.  2 3

  6. Microsoft Learn, Configure and validate exclusions for Microsoft Defender Antivirus. حول إخراج إعداد استثناء Microsoft Defender الملفّات والمجلّدات والعمليّات المستثناة من هدف المسح؛ والتحذير المتكرّر بأنّ الاستثناء يخفض مستوى الحماية فينبغي تعريفه بحذر بعد تقييم الضرورة.  2 3

  7. Microsoft Learn, Set up a Dev Drive on Windows 11. حول كون Dev Drive مجلّداً مصمَّماً لأحمال عمل التطوير، وعمل Microsoft Defender فيه في وضع الأداء (مسح لاتزامنيّ)؛ ووضعه بديلاً آمناً لاستثناءات المجلّدات (secure alternative to folder exclusions) مع مراعاة السرعة والأداء؛ وعدم إرفاق مرشّحات إضافيّة بـ Dev Drive افتراضيّاً؛ والتحذير من أنّ التشغيل بنزع مرشّح مكافحة الفيروسات خطر أمنيّ جسيم.  2 3

  8. Microsoft Learn, Request a Filter Altitude Identifier. حول طلب ارتفاع مرشّح جديد بإرسال بريد نصّ ASCII بعنوان «Filter altitude request» إلى fsfcomm@microsoft.com؛ وضرورة ملء اسم الشركة وبريد الاتّصال (اسم مستعار للشركة طويل الأمد لا شخصيّ) واسم المنتج وعنوان URL للمنتج ووصف المرشّح واسم ملفّ المرشّح ونوع المرشّح ونوع البدء ومجموعة ترتيب التحميل المرغوبة والارتفاع المرغوب، كلّها؛ ووجوب توقّع 30 يوم عمل للمعالجة وعدم وجود منفذ طلب سوى هذا الإجراء؛ وإمكان تخصيص Microsoft ارتفاعاً يختلف عن المرغوب؛ وإمكان شركة تحمل أصلاً ارتفاعاً صحيحاً إنشاء ارتفاع خاصّ بفاصلة عشرية داخل مجموعة ترتيب التحميل نفسها مع إبلاغ بعد الواقعة.  2

  9. Microsoft Learn, Blocking legacy file system filter drivers. حول تنفيذ fltmc filters من موجه أوامر بامتيازات مدير فيسرد المرشّحات بأربعة أعمدة «Filter Name / Num Instances / Altitude / Frame»؛ وكون ما يظهر Frame فيه <Legacy> برنامج تشغيل مرشّح نظام ملفّات قديماً لا يمرّ عبر FltMgr، بينما تدخل قيمة رقميّة (0 ونحوها) في Frame للمرشّحات المصغّرة.  2

  10. Microsoft Learn, Cloud Files API. حول كون واجهة ملفّات السحابة (مرشّح السحابة) أساس محرّك مزامنة يُظهر الملفّات على السحابة محلّيّاً كعناصر نائبة ويجلب الكيان عند الوصول (ملفّات OneDrive عند الطلب ونحوها).  2

  11. Microsoft Learn, Process Monitor - Sysinternals. حول كون Process Monitor أداة مراقبة متقدّمة تعرض نشاط نظام الملفّات والسجلّ والعمليّات/مؤشّرات الترابط في الوقت الحقيقيّ (كما في النصّ، يمكن ملاحظته يظهر كمرشّح مصغّر في قائمة fltmc أثناء التشغيل).  2

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

ما الفرق بين برنامج تشغيل مرشّح نظام الملفّات والمرشّح المصغّر؟
كلاهما «برنامج تشغيل يتقاطع مع طلبات الإدخال/الإخراج إلى نظام الملفّات»، لكنّهما يختلفان في جيل طريقة التقاطع. كان المرشّح القديم (القديم) يرصف كائن جهازه مباشرة على مكدّس أجهزة نظام الملفّات، فتُحسَم الموضع بترتيب التحميل ويصعب ضمانه، وكانت هناك مشاكل مثل تعذّر الإلغاء الآمن بعد التحميل. المعيار الحاليّ، المرشّح المصغّر، يسجّل استدعاءات مع مدير المرشّحات (FltMgr) المرفق بـ Windows، بمعنى «نادوني قبل هذه العمليّة وبعدها». يُحسَم الموضع حسماً قاطعاً برقم يُسمّى الارتفاع، ويمكن التحميل في أيّ وقت، ومرشّح ينفّذ استدعاء إلغاء التحميل يمكن نزعه حتّى أثناء التشغيل. تكاد كلّ المرشّحات الحديثة — مكافحة الفيروسات، والتشفير، وأدوات المراقبة، ومزامنة السحابة — تُنفَّذ كمرشّحات مصغّرة.
لماذا تستطيع برمجيّات مكافحة الفيروسات فحص كلّ وصول إلى ملفّ؟
لأنّ نظام التشغيل يوفّر رسميّاً نقطة توسيع لهذا الغرض تحديداً. يستطيع المرشّح المصغّر تسجيل شيفرة لدى مدير المرشّحات لتُستدعى قبل (استدعاء pre) وبعد (استدعاء post) عمليّات مثل فتح ملفّ أو قراءته أو كتابته. يقع مرشّح مكافحة الفيروسات في نطاق الارتفاع المحجوز لمكافحة الفيروسات (320000–329999)، ويستطيع مثلاً مسح المحتوى فور نجاح فتح ملفّ (post-create)، وإن وُجدت مشكلة إبطال ذلك الفتح فيفشل الوصول. كما رأينا في الجزء 1 من السلسلة، كلّ إدخال/إخراج ملفّات يسير في مكدّس الأجهزة، فالمنطق أنّ الوقوف في موضع ثابت على ذلك المسار يتيح فحص كلّ وصول. ليست خدعة — بل آليّة مدمجة في تصميم نظام التشغيل.
ماذا يفعل إعداد استثناء مكافحة الفيروسات (استثناء مجلّد) تقنيّاً؟
لإدخال/إخراج على مسار يطابق قائمة الاستثناء، يجعل مرشّح ذلك المنتج يتخطّى المسح الذي كان سيجريه. المرشّح نفسه لا يختفي من المكدّس؛ الفهم الأدقّ أنّ قرار «لا تفحص هذا المسار» يُتَّخذ أبكر. قيد مهمّ أنّ الاستثناء يعمل فقط للمنتج الحامل لذلك الإعداد. مثلاً، إعداد استثناء Microsoft Defender يغيّر المسح الذي يجريه مرشّح Defender (WdFilter)، ولا يؤثّر في سلوك مرشّحات مصغّرة أخرى تجاوره — منتج مكافحة فيروسات منافس، أو EDR، أو نسخ احتياطيّ، وغيرها. كلّ منتج يحتاج إعداد استثناء خاصّاً به، وحين «ما زال بطيئاً بعد إضافة استثناء» قد يكون مرشّح آخر السبب. وكما تحذّر وثائق Microsoft مراراً، يُضعف الاستثناء الحماية في ذلك الموضع، فينبغي إبقاؤه حدّاً أدنى مع تقييم مخاطر. للاستخدام التطويريّ، يستحقّ أيضاً النظر في Dev Drive (وضع الأداء، أي مسح لاتزامنيّ)، المصمَّم بديلاً آمناً لاستثناءات المجلّدات.
كيف يسجّل Process Monitor كلّ عمليّة إدخال/إخراج؟
لأنّ Procmon نفسه يسجّل نفسه لدى مدير المرشّحات عند بدء التشغيل، كمرشّح مصغّر في نطاق ارتفاع Activity Monitor. إن نفّذتم fltmc من موجه أوامر بامتيازات مدير بينما Procmon يعمل، يمكن تأكيد ظهور مرشّح يبدأ اسمه بـ PROCMON في القائمة. لأنّه حاضر في مرحلتي pre وpost لعمليّات الإدخال/الإخراج على كلّ مجلّد كمرشّح مصغّر، يستطيع تسجيل أيّ عمليّة أجرتها أيّ عمليّة على أيّ ملفّ دون إغفال. سبب ظهور مصطلحات IRP والإدخال/الإخراج السريع التي تابعناها عبر السلسلة مباشرة في عرض Procmon هو تحديداً أنّه يراقب من موضع واقف على مسار الإدخال/الإخراج نفسه.
حين تكون عمليات البناء على آلة التطوير بطيئة، هل ينبغي الاشتباه في برامج تشغيل المرشّح؟
الاشتباه جدير تماماً. البناء كتلة هائلة من إنشاء وقراءة وكتابة وحذف عدد ضخم من الملفّات الصغيرة، وكلّ واحد منها يصير هدفاً لفحص المرشّحات (خصوصاً مسح مكافحة الفيروسات)، ممّا يجعله حمل العمل الذي يرجّح فيه ظهور كلفة المرشّح. إجراء التحقيق الأساسيّ فحص عمود Duration في Procmon لرؤية أيّ عمليّة يذهب إليها الوقت، ومقارنة فرق تكوين المرشّحات بين البيئات بـ fltmc instances. كتدبير، إلى جانب إعداد استثناء يُتَّخذ بعد تقييم المخاطر، هناك أيضاً استخدام Dev Drive، المصمَّم خصّيصاً لمجلّدات التطوير. على Dev Drive تعمل مكافحة الفيروسات في وضع الأداء (مسح لاتزامنيّ)، ويضع Microsoft هذا بديلاً أكثر أماناً من إعداد استثناء.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

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

العودة إلى المدونة