Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Communication Foundation (WCF), WCF Windows Yönetim Araçları (WMI) sağlayıcısı aracılığıyla çalışma zamanında bir hizmetin denetim verilerini kullanıma sunar.
WMI'yı Etkinleştirme
WMI, Microsoft'un Web-Based Enterprise Management (WBEM) standardını uygulamasıdır. WMI SDK'sı hakkında daha fazla bilgi için bkz. Windows Yönetim Araçları. WBEM, uygulamaların yönetim araçlarını dış yönetim araçlarına nasıl kullanıma sunmasına yönelik bir endüstri standardıdır.
WMI sağlayıcısı, WBEM uyumlu bir arabirim aracılığıyla izlemeleri çalışma zamanında kullanıma sunan bir bileşendir. Öznitelik/değer çiftlerine sahip bir dizi WMI nesnesinden oluşur. Çiftler bir dizi basit türde olabilir. Yönetim araçları, çalışma zamanında arabirim aracılığıyla hizmetlere bağlanabilir. WCF, adresler, bağlamalar, davranışlar ve dinleyiciler gibi hizmetlerin özniteliklerini kullanıma sunar.
Yerleşik WMI sağlayıcısı, uygulamanın yapılandırma dosyasında etkinleştirilebilir. Bu, aşağıdaki örnek yapılandırmada wmiProviderEnabled gösterildiği gibi system.serviceModel< bölümündeki tanılamanın><özniteliği> aracılığıyla yapılır.
<system.serviceModel>
…
<diagnostics wmiProviderEnabled="true" />
…
</system.serviceModel>
Bu yapılandırma girdisi bir WMI arabirimini kullanıma sunar. Yönetim uygulamaları artık bu arabirim üzerinden bağlanabilir ve uygulamanın yönetim araçlarına erişebilir.
WMI Verilerine Erişim
WMI verilerine birçok farklı yolla erişilebilir. Microsoft betikler, Visual Basic uygulamaları, C++ uygulamaları ve .NET Framework için WMI API'leri sağlar. Daha fazla bilgi için bkz. WMIkullanma .
Dikkat
WMI verilerine program aracılığıyla erişmek için .NET Framework tarafından sağlanan yöntemleri kullanırsanız, bağlantı kurulduğunda bu tür yöntemlerin özel durumlar oluşturabileceğini bilmeniz gerekir. Bağlantı, örneğin oluşturulması ManagementObject sırasında değil, gerçek veri alışverişini içeren ilk istekte kurulur. Bu nedenle, olası istisnaları yakalamak için bir try..catch blok kullanmalısınız.
WMI'da izleme kaynağı için izleme ve ileti günlüğü düzeyinin System.ServiceModel yanı sıra ileti günlüğü seçeneklerini de değiştirebilirsiniz. Bu, şu Boole özelliklerini ortaya çıkaran AppDomainInfo örneğine erişerek yapılabilir: LogMessagesAtServiceLevel, LogMessagesAtTransportLevel, LogMalformedMessagesve TraceLevel. Bu nedenle, ileti günlüğü için bir izleme dinleyicisi yapılandırırken, bu seçenekleri yapılandırmada false olarak ayarlarsanız, daha sonra uygulama çalışırken true olarak değiştirebilirsiniz. Bu, çalışma zamanında ileti günlüğünü etkili bir şekilde etkinleştirir. Benzer şekilde, yapılandırma dosyanızda ileti günlüğünü etkinleştirirseniz, WMI kullanarak çalışma zamanında devre dışı bırakabilirsiniz.
Yapılandırma dosyasında ileti günlüğü için ileti günlüğü izleme dinleyicisi belirtilmemişse veya izleme için izleme System.ServiceModel dinleyicisi belirtilmemişse, değişiklikler WMI tarafından kabul edilse bile, yaptığınız değişikliklerin hiçbirinin etkili olmayacağını bilmelisiniz. İlgili dinleyicileri düzgün ayarlama hakkında daha fazla bilgi için bkz: İleti Günlüğünü Yapılandırma ve İzlemeyi Yapılandırma. Yapılandırma tarafından belirtilen diğer tüm izleme kaynaklarının izleme düzeyi, uygulama başlatıldığında etkilidir ve değiştirilemez.
WCF, betik oluşturma için bir GetOperationCounterInstanceName yöntem sunar. Bu yöntem, bir işlem adı sağlarsanız bir performans sayacı örneği adı döndürür. Ancak, girişinizi doğrulamaz. Bu nedenle, yanlış bir işlem adı girerseniz, yanlış bir sayaç adı döndürülür.
Örneğin OutgoingChannel özelliği Service , hedef hizmete giden WCF istemcisi yöntem içinde Service oluşturulmamışsa, bir hizmet tarafından başka bir hizmete bağlanmak için açılan kanalları saymaz.
Dikkat WMI yalnızca 3 ondalık basamağa kadar olan bir TimeSpan değeri destekler. Örneğin, hizmetiniz özelliklerinden birini olarak MaxValueayarlarsa, değeri WMI aracılığıyla görüntülendiğinde 3 ondalık basamaktan sonra kesilir.
Güvenlik
WCF WMI sağlayıcısı bir ortamdaki hizmetlerin bulunmasına izin verdiğinden, bu ortama erişim izni verirken çok dikkatli olmanız gerekir. Varsayılan yalnızca yönetici erişimini gevşetirseniz, daha az güvenilen tarafların ortamınızdaki hassas verilere erişmesine izin verebilirsiniz. Özellikle, uzak WMI erişimi izinlerini gevşetirseniz, sel saldırıları oluşabilir. Bir işlem aşırı WMI istekleriyle dolup taşarsa, performansı düşebilir.
Buna ek olarak, MOF dosyası için erişim izinlerini gevşetirseniz, daha az güvenilen taraflar WMI'nın davranışını değiştirebilir ve WMI şemasına yüklenen nesneleri değiştirebilir. Örneğin, kritik veriler yöneticiden gizlenecek veya doldurulmayan veya özel durumlara neden olan alanlar dosyaya eklenecek şekilde alanlar kaldırılabilir.
Varsayılan olarak, WCF WMI sağlayıcısı Yönetici için "yürütme yöntemi", "sağlayıcı yazma" ve "hesabı etkinleştirme" izni ve ASP.NET, Yerel Hizmet ve Ağ Hizmeti için "hesabı etkinleştirme" izni verir. Özellikle, Windows Vista olmayan platformlarda, ASP.NET hesabın WMI ServiceModel ad alanına okuma erişimi vardır. Bu ayrıcalıkları belirli bir kullanıcı grubuna vermek istemiyorsanız, WMI sağlayıcısını devre dışı bırakmanız (varsayılan olarak devre dışıdır) veya belirli bir kullanıcı grubu için erişimi devre dışı bırakmanız gerekir.
Ayrıca, WMI'yı yapılandırma yoluyla etkinleştirmeye çalıştığınızda, yetersiz kullanıcı ayrıcalığı nedeniyle WMI etkinleştirilemeyebilir. Ancak, bu hatayı kaydetmek için olay günlüğüne hiçbir olay yazılmaz.
Kullanıcı ayrıcalığı düzeylerini değiştirmek için aşağıdaki adımları kullanın.
Başlat'a ve ardından Çalıştır'a tıklayın ve compmgmt.msc yazın.
Özellikler'i seçmek için Hizmetler ve Uygulama/WMI Denetimleri'ne sağ tıklayın.
Güvenlik Sekmesini seçin ve Kök/ServiceModel ad alanına gidin. Güvenlik düğmesine tıklayın.
Erişimi denetlemek istediğiniz belirli bir grubu veya kullanıcıyı seçin ve izinleri yapılandırmak için İzin Ver veya Reddet onay kutusunu kullanın.
Ek Kullanıcılara WCF WMI Kayıt İzinleri Verme
WCF, yönetim verilerini WMI'da kullanıma sunar. Bunu, bazen "ayrılmış sağlayıcı" olarak da adlandırılan işlem içi bir WMI sağlayıcısını barındırarak yapar. Yönetim verilerinin kullanıma sunulması için, bu sağlayıcıyı kaydeden hesabın uygun izinlere sahip olması gerekir. Windows'ta, yalnızca küçük bir ayrıcalıklı hesap kümesi varsayılan olarak ayrılmış sağlayıcıları kaydedebilir. Bu bir sorundur çünkü kullanıcılar genellikle varsayılan kümede olmayan bir hesap altında çalışan bir WCF hizmetinden WMI verilerini kullanıma sunmak ister.
Bu erişimi sağlamak için, bir yöneticinin ek hesaba aşağıdaki izinleri aşağıdaki sırayla vermesi gerekir:
WCF WMI Ad Alanı'na erişim izni.
WCF Ayrılmış WMI Sağlayıcısını kaydetme izni.
WMI ad alanına erişim izni vermek için
Aşağıdaki PowerShell betiğini çalıştırın.
write-host "" write-host "Granting Access to root/servicemodel WMI namespace to built in users group" write-host "" # Create the binary representation of the permissions to grant in SDDL $newPermissions = "O:BAG:BAD:P(A;CI;CCDCLCSWRPWPRCWD;;;BA)(A;CI;CC;;;NS)(A;CI;CC;;;LS)(A;CI;CC;;;BU)" $converter = new-object system.management.ManagementClass Win32_SecurityDescriptorHelper $binarySD = $converter.SDDLToBinarySD($newPermissions) $convertedPermissions = ,$binarySD.BinarySD # Get the object used to set the permissions $security = gwmi -namespace root/servicemodel -class __SystemSecurity # Get and output the current settings $binarySD = @($null) $result = $security.PsBase.InvokeMethod("GetSD",$binarySD) $outsddl = $converter.BinarySDToSDDL($binarySD[0]) write-host "Previous ACL: "$outsddl.SDDL # Change the Access Control List (ACL) using SDDL $result = $security.PsBase.InvokeMethod("SetSD",$convertedPermissions) # Get and output the current settings $binarySD = @($null) $result = $security.PsBase.InvokeMethod("GetSD",$binarySD) $outsddl = $converter.BinarySDToSDDL($binarySD[0]) write-host "New ACL: "$outsddl.SDDL write-host ""Bu PowerShell betiği, Built-In Kullanıcılar grubuna "kök/servicemodel" WMI ad alanına erişim vermek için Güvenlik Tanımlayıcısı Tanım Dili'ni (SDDL) kullanır. Aşağıdaki ACL'leri belirtir:
Built-In Yöneticisi (BA) - Zaten erişimi vardı.
Ağ hizmeti (NS) - zaten erişimi vardı.
Yerel sistem (LS) - zaten erişimi vardı.
Built-In Kullanıcılar - Erişim izni verilecek grup.
Sağlayıcı kayıt erişimi vermek için
Aşağıdaki PowerShell betiğini çalıştırın.
write-host "" write-host "Granting WCF provider registration access to built in users group" write-host "" # Set security on ServiceModel provider $provider = get-WmiObject -namespace "root\servicemodel" __Win32Provider write-host "Previous ACL: "$provider.SecurityDescriptor $result = $provider.SecurityDescriptor = "O:BUG:BUD:(A;;0x1;;;BA)(A;;0x1;;;NS)(A;;0x1;;;LS)(A;;0x1;;;BU)" # Commit the changes and display it to the console $result = $provider.Put() write-host "New ACL: "$provider.SecurityDescriptor write-host ""
Rastgele kullanıcılara veya gruplara erişim izni verme
Bu bölümdeki örnek, tüm yerel kullanıcılara WMI Sağlayıcısı kayıt ayrıcalıkları verir. Yerleşik olmayan bir kullanıcı veya gruba erişim izni vermek istiyorsanız, bu kullanıcı veya grubun Güvenlik Tanımlayıcısını (SID) edinmeniz gerekir. Rastgele bir kullanıcı için SID'yi almanın basit bir yolu yoktur. Yöntemlerden biri, istenen kullanıcı olarak oturum açmak ve ardından aşağıdaki kabuk komutunu vermektir.
Whoami /user
Daha fazla bilgi için bkz: İyi Bilinen SID'ler.
Uzak WMI Nesne Örneklerine Erişme
Uzak bir makinede WCF WMI örneklerine erişmeniz gerekiyorsa, erişim için kullandığınız araçlarda paket gizliliğini etkinleştirmeniz gerekir. Aşağıdaki bölümde, WMI CIM Studio, Windows Yönetim Araçları Sınayıcısı ve .NET SDK 2.0 kullanılarak bunların nasıl elde edileceği açıklanmaktadır.
WMI CIM Stüdyosu
WMI Yönetimsel Araçları'nı yüklediyseniz, WMI örneklerine erişmek için WMI CIM Studio'yu kullanabilirsiniz. Araçlar aşağıdaki klasördedir:
%windir%\Program Dosyaları\WMI Araçları\
Ad alanına bağlan: penceresinde root\ServiceModel yazın ve Tamam'a tıklayın.
WMI CIM Studio Oturum Açma penceresinde, pencereyi genişletmek için Seçenekler >> düğmesine tıklayın. Authentication level (Kimlik doğrulama düzeyi) için Packet privacy (Paket gizliliği) seçeneğini belirleyin ve OK (Tamam) düğmesini tıklatın.
Windows Yönetim Araçları Test Edicisi
Bu araç Windows tarafından yüklenir. Çalıştırmak için, Başlat/Çalıştır iletişim kutusuna cmd.exe yazarak bir komut konsolu başlatın ve Tamam'ı tıklatın. Ardından, komut penceresine wbemtest.exe yazın. Ardından Windows Yönetim Araçları Sınayıcısı aracı başlatılır.
Pencerenin sağ üst köşesindeki Bağlan düğmesine tıklayın.
Yeni pencerede, Ad Alanı alanı için root\ServiceModel girin ve Kimlik doğrulama düzeyi için Paket gizliliği'ni seçin. Bağlan'a tıklayın.
Yönetilen Kodu Kullanma
Ayrıca, ad alanı tarafından sağlanan sınıfları kullanarak uzak WMI örneklerine System.Management program aracılığıyla erişebilirsiniz. Aşağıdaki kod örneğinde bunun nasıl yapılacağı gösterilmektedir.
String wcfNamespace = $@"\\{this.serviceMachineName}\Root\ServiceModel");
ConnectionOptions connection = new ConnectionOptions();
connection.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope scope = new ManagementScope(this.wcfNamespace, connection);