سؤال

لقد تعلمت مؤخرًا عن WMI وWQL.لقد اكتشفت قائمة فئات Win32 (من MSDN) التي يمكنني الاستعلام عنها ولكني غير قادر على اكتشاف قائمة فئات الأحداث (يجب أن تكون المجموعة الفرعية من قائمة فئات Win32، أليس كذلك؟) هل يوجد أحد هل لديك قائمة أو نوع من ورقة الغش لهذا؟أنا أطلب هذا بدافع الفضول.

مثال لفئة الحدث - Win32_ProcessStartTrace

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

المحلول

فيما يلي كيفية سرد فئات أحداث WMI في ملف root\cimv2 مساحة الاسم مع C# و System.Management:

using System;
using System.Management;

class Program
{
    static void Main()
    {
        string query =
            @"Select * From Meta_Class Where __This Isa '__Event'";

        ManagementObjectSearcher searcher =
            new ManagementObjectSearcher(query);

        foreach (ManagementBaseObject cimv2Class in searcher.Get())
        {
            Console.WriteLine(cimv2Class.ClassPath.ClassName);
        }
    }
}

root\cimv2 هي مساحة اسم WMI الافتراضية لذا لا يتعين عليك استخدام ملف ManagementScope مثال.تم تمرير استعلام WQL إلى ManagementObjectSearcher هو استعلام بيانات تعريف WMI.يستخدم:

  • Meta_Class لتعيين الاستعلام كاستعلام مخطط، و
  • __This الخاصية لإدراجها بشكل متكرر __Event فئات فرعية

(يرى هنا و هنا).

فئة WMI هي فئة حدث إذا تم تطبيق موفرها كموفر WMI للحدث ويجب أن يكون فئة فرعية من __Event.هذا لا يعني أنه لا يمكنك استخدام فئات WMI "العادية" مثل Win32_Process و Win32_Service في استعلامات الأحداث WQL.عليك فقط استخدام واحدة من __InstanceOperationEvent فئات المساعدة المشتقة مثل __InstanceCreationEvent أو __InstanceDeletionEvent, ، وسيستخدم WMI نظام الأحداث الفرعي الخاص به لتسليم الأحداث.

فيما يلي نموذج لاستعلام WQL المشترك فيه Win32_Process أحداث الخلق:

Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'

في هذه الحالة عليك استخدام Within بند.

نصائح أخرى

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

يحرر: منذ أن قمت بوضع علامة على سؤالك كـ ج#, ، قد تكون مهتمًا بالكود الخاص بالحصول على قائمة فئات الأحداث المشتقة من فئة معينة برمجيًا:

using System.Management;
...

string ancestor = "WMIEvent";     // the ancestor class
string scope = "root\\wmi";       // the WMI namespace to search within

try
{
    EnumerationOptions options = new EnumerationOptions();
    options.ReturnImmediately = true;
    options.Rewindable = false;

    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher(scope, "SELECT * FROM meta_class", options);

    foreach (ManagementClass cls in searcher.Get())
    {
        if (cls.Derivation.Contains(ancestor))
        {
            Console.WriteLine(cls["__CLASS"].ToString());
        }
    }
}
catch (ManagementException exception)
{
    Console.WriteLine(exception.Message);
}

لا تحتوي MSDN على قائمة بجميع ملفات دروس MSMCA هنا

تحديث:
لا أقوم بالكثير من العمل مع WMI، لكنني وجدت هذا للتو أداة WMI كان من الممكن أن يكون ذلك مفيدًا.فهو يوفر لك واجهة المستخدم الرسومية لعرض التسلسل الهرمي لـ WMI للكائنات، كما يسمح لك بتسجيل الأحداث واستهلاكها.هذا يجب أن يوفر لك المعلومات التي تحتاجها.

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