Aracılığıyla paylaş


WMI Yöntemi Oluşturma

WMI yöntemi oluşturmak için yönteminin giriş ve çıkış parametrelerini tanımlayın. Giriş ve çıkış parametreleri, __PARAMETERSözel bir WMI sistem sınıfıyla temsil edilir. Daha fazla bilgi için bkz. Yöntem Çağırma ve Yöntem Sağlayıcısı Yazma.

Bu konuda aşağıdaki bölümler ele alınmıştır:

MOF'da WMI Sınıf Yöntemi Oluşturma

WMI'de sağlayıcı yöntemleri genellikle sınıfın temsil ettiği nesneyle ilgili ayrı eylemlerdir. Eylemi yürütmek için bir özelliğin değerini değiştirmek yerine bir yöntem oluşturulmalıdır. Örneğin, bir ağ bilgi merkezi (NIC) olarak temsil edilen Win32_NetworkAdapter'i, Etkinleştir () ve Devre Dışı Bırak () yöntemlerini kullanarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Bu eylemler bir okuma/yazma özelliği olarak gösterilebilir, ancak önerilen tasarım bir yöntem oluşturmaktır. Alternatif olarak, sınıf için bir durumu veya değeri görünür hale getirmek istiyorsanız, önerilen yaklaşım yöntem yerine okuma/yazma özelliği oluşturmaktır. Win32_NetworkAdapteriçinde NetEnabled özelliği bağdaştırıcının durumunu görünür hale getirir, ancak durumlar arasındaki değişiklikler etkinleştirme veya yöntemlerini devre dışı bırakma tarafından yürütülür.

Sınıf bildirimleri bir veya daha fazla yöntemin bildirimini içerebilir. Bir üst sınıfın yöntemlerini devralmayı veya kendi yöntemlerinizi uygulamayı seçebilirsiniz. Kendi yöntemlerinizi uygulamayı seçerseniz, yöntemini bildirmeniz ve yöntemi belirli niteleyici etiketleriyle işaretlemeniz gerekir.

Aşağıdaki yordamda, bir temel sınıftan devralmayan bir sınıftaki bir yöntemin nasıl bildirileceği açıklanmaktadır.

Bir yöntemi bildirmek için

  1. Bir sınıf bildiriminin küme ayraçları içine yönteminizin adını tanımlayın, ardından tüm niteleyicileri ekleyin.

    Aşağıdaki kod örneği bir yöntemin söz dizimini açıklar.

    [Dynamic, Provider ("ProviderName")]
    class ClassName
    {
        [Implemented] <ReturnType> <MethodName>
            ([ParameterDirection, IDQualifier] 
            <ParameterType> <ParameterName>);
    };
    
  2. İşiniz bittiğinde, Yönetilen Nesne Biçimi (MOF) kodunuzu MOF derleyicisine bir çağrıyla WMI deposuna ekleyin.

    Daha fazla bilgi için bkz. MOF Dosyalarını Derleme .

Aşağıdaki liste yöntem bildiriminin öğelerini tanımlar.

Sağlayıcı

Belirli bir sağlayıcıyı sınıf açıklamanıza bağlar. Sağlayıcısı niteleyicisinin değeri, WMI'ye yönteminizi destekleyen kodun nerede bulunduğunu bildiren sağlayıcının adıdır. Sağlayıcı ayrıca dinamik örnekleri olan tüm sınıflara Dinamik niteleyicisiyle işaretlemelidir. Buna karşılık, Dinamik niteleyicisini kullanarak Uygulanan yöntemleriyle statik örnek içeren bir sınıfı işaretlemeyin.

Uygulanan

Yöntem uygulamasını üst sınıftan devralmak yerine bir yöntem uygulayabileceğinizi bildirir. Varsayılan olarak, türetilmiş sınıf bir uygulama sağlamadığı sürece WMI, üst sınıfın uygulamasını türetilmiş sınıfa aktarır. Uygulanan niteleyicisinin atlanması, yöntemin bu sınıfta hiçbir uygulaması olmadığını gösterir. Implemented niteleyicisi olmadan bir yöntemi yeniden ilan ederseniz, WMI yine de bu yöntemi uygulamayacağınızı varsayar ve çağrıldığında üst sınıf yöntem uygulamasını çağırır. Bu nedenle, türetilmiş bir sınıftaki bir yöntemi Uygulanan niteleyicisi eklemeden yeniden uygulamak, yalnızca yönteme bir niteleyici eklediğinizde veya yöntemden bir niteleyiciyi kaldırdığınızda yararlıdır.

DönüşTürü

Yöntemin döndürdüğü değeri açıklar. Bir yöntemin dönüş değeri Boole, sayısal, CHAR, STRING, DATETIMEveya şema nesnesi olmalıdır. Dönüş türünü, yöntemin hiçbir şey döndürmediğini belirten VOIDolarak da bildirebilirsiniz. Ancak, bir diziyi dönüş değeri türü olarak bildiremezsiniz.

YöntemAdi

yönteminin adını tanımlar. Her yöntemin benzersiz bir adı olmalıdır. WMI, aynı ada ve farklı imzalara sahip iki yöntemin bir sınıfta veya sınıf hiyerarşisinde var olmasına izin vermez. Bu nedenle, bir yöntemi de aşırı yükleyemezsiniz.

ParametreYönü

Parametrenin giriş parametresi mi, çıkış parametresi mi yoksa her ikisi mi olduğunu açıklayan niteleyiciler içerir. Giriş parametresiyle birden çok kez veya çıkış parametresiyle birden fazla kez aynı parametre adını kullanmayın. Her iki durumda da (hem In hem de Out niteleyicileriyle) aynı parametre adı görünüyorsa, işlev kavramsal olarak , Out niteleyicilerini tek bir parametrede kullanmakla aynıdır. Ancak, ayrı bildirimler kullanılırken giriş ve çıkış parametreleri, kimliği niteleyicilerinin sayısı ve türü de dahil olmak üzere diğer tüm açılardan tam olarak aynı olmalıdır ve niteleyici her ikisi için de aynı ve açıkça bildirilmelidir. tek bir parametre bildiriminde InOut niteleyicilerinin kullanılması kesinlikle önerilir.

idqualifier

Yöntemdeki parametre dizisi içinde her parametrenin konumunu benzersiz olarak tanımlayan Kimliği niteleyicisini içerir. Varsayılan ayar olarak, MOF derleyicisi parametreleri otomatik olarak ID niteleyiciyle işaretler. Derleyici ilk parametreyi 0 (sıfır), ikinci parametreyi 1 (bir) gibi bir değerle işaretler. Gerekirse, MOF kodunuzda kimlik dizisini açıkça belirtebilirsiniz.

ParametreTürü

Yöntemin hangi veri türünü kabul edebildiğini açıklar. Bir parametre türünü dizi, şema nesnesi veya başvuru gibi herhangi bir MOF veri değeri olarak tanımlayabilirsiniz. Bir diziyi parametre olarak kullanırken, diziyi ilişkisiz veya açık bir boyutla kullanın.

ParametreAdı

Parametresinin adını içerir. Bu noktada parametrenin varsayılan değerini tanımlamayı da seçebilirsiniz. İlk değerleri olmayan parametreler atanmamış olarak kalır.

Aşağıdaki kod örneğinde parametre listesi ve niteleyiciler açıklanmaktadır.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] sint32 InParam);
    [Implemented] 
    void MyMethod2 ([in, id(0)] sint32 InParam, 
       [out, id(1)] sint32 OutParam);
    [Implemented] 
    sint32 MyMethod3 ([in, out, id(0)] sint32 InOutParam);
};

Aşağıdaki kod örneği, MOF parametresinde bir dizinin nasıl kullanılacağını açıklar.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskParam[]);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskParam[32]);
};

Aşağıdaki kod örneği, şema nesnesini hem parametre hem de dönüş değeri olarak kullanmayı açıklar.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk 
        DiskParam);
    [Implemented] 
    Win32_LogicalDisk MyMethod2 ([in, id(0)] string DiskVolLabel);
};

Aşağıdaki kod örneğinde iki başvurunun nasıl dahil olduğu açıklanır: biri Win32_LogicalDisk sınıfının bir örneğine, diğeri bilinmeyen nesne türünün örneğine.

[Dynamic, Provider("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk ref DiskRef);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] object ref AnyObject);
};

C++ içinde WMI Sınıf Yöntemi Oluşturma

Aşağıdaki yordamda bir WMI sınıf yönteminin program aracılığıyla nasıl oluşturulacağı açıklanmaktadır.

Program aracılığıyla bir WMI sınıfı yöntemi oluşturmak için

  1. Yönteminin ait olacağı sınıfı oluşturun.

    Bir yöntemi oluşturmak için önce onu ekleyeceğiniz bir sınıf tanımlamış olmalısınız.

  2. __PARAMETERS sistem sınıfının iki alt sınıfını, ya IWbemServices::GetObject ya da GetObjectAsynckullanarak alın.

    İlk alt sınıfı kullanarak giriş parametrelerini ve ikincisini kullanarak çıkış parametrelerini açıklayın. Tek bir alma gerçekleştirip ardından, gerekirse, IWbemClassObject::Clone yöntemine bir çağrı yapabilirsiniz.

  3. Bir veya daha fazla çağrı kullanarak IWbemClassObject::Putile ilk sınıfa giriş parametrelerini ve ikinci sınıfa çıkış parametrelerini yazın.

    Bir yöntemin parametrelerini açıklarken aşağıdaki kuralları ve kısıtlamaları gözlemleyin:

    • [in, out] parametrelerini ayrı girdiler olarak değerlendirin: biri in-parametreleri içeren nesnede, biri de out-parametreleri içeren nesnede.

    • [in, out] niteleyicileri dışında kalan niteleyiciler tam olarak aynı olmalıdır.

    • Belirtilen her bir parametre için kimlik niteleyicilerini 0 (sıfır) ile başlayarak belirtin.

      Giriş veya çıkış parametrelerinin sırası, her parametredeki kimliği niteleyicisinin değeriyle oluşturulur. Tüm giriş bağımsız değişkenleri tüm çıkış bağımsız değişkenlerinden önce olmalıdır. Mevcut bir yöntem sağlayıcısını güncelleştirirken yöntem giriş ve çıkış parametrelerinin sırasını değiştirmek yöntemi çağıran uygulamaların başarısız olmasına neden olabilir. Mevcut parametreleri önceden oluşturulmuş olan diziye eklemek yerine sonuna yeni giriş parametreleri ekleyin.

      ID niteleyici dizisinde boşluk bırakmamaya özen gösterin.

    • dönüş değerini out-parameters sınıfına ReturnValueadlı bir özellik olarak yerleştirin.

      Bu, özelliğini yönteminin dönüş değeri olarak tanımlar. Bu özelliğin CIM türü, yönteminin dönüş türüdür. Yöntemin dönüş türü void ise, ReturnValue özelliğine hiç sahip değildir. Ayrıca, ReturnValue özelliği, yöntemin bağımsız değişkenleri gibi ID niteleyicisine sahip olamaz. Kimliği niteleyicisi ReturnValue özelliğine atandığında bir WMI hatası oluşur.

    • sınıfındaki özelliği için tüm varsayılan parametre değerlerini ifade edin.

  4. __PARAMETERS nesnesini, IWbemClassObject::PutMethodçağrısını kullanarak üst sınıfa yerleştirin.

    PutMethod için yapılan tek bir çağrı, __PARAMETERS nesnelerini sınıfa yerleştirebilir.

Bir Sınıf Oluşturma