Aracılığıyla paylaş


Kayıt defteri verilerini alma

WMI StdRegProv sınıfını ve yöntemlerini kullanarak kayıt defteri verilerini alabilir veya değiştirebilirsiniz. Yerel bilgisayardaki kayıt defteri değerlerini görüntülemek ve değiştirmek için Regedit yardımcı programını kullanırken, StdRegProv yerel bilgisayarda ve uzak bilgisayarlarda bu tür etkinlikleri otomatikleştirmek için bir betik veya uygulama kullanmanıza olanak tanır.

StdRegProv aşağıdakileri yapmak için yöntemler içerir:

  • Kullanıcının erişim izinlerini doğrulama
  • Kayıt defteri anahtarlarını oluşturma, listeleme ve silme
  • Alt anahtarları veya adlandırılmış değerleri oluşturma, listeleme ve silme
  • Veri değerlerini okuma, yazma ve silme

Kayıt defteri verileri, bir üst düzey anahtarın altında iç içe yerleştirilmiş alt ağaçlara, anahtarlara ve alt anahtarlara göre düzenlenir. Gerçek veri değerlerine girdi veya adlandırılmış değerler adı verilir.

Alt ağaçlar şunları içerir:

  • HKEY_CLASSES_ROOT (HKCRolarak kısaltılır)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Örneğin, HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersionkayıt defteri girdisinde, HKEY alt ağacı SOFTWARE; alt anahtarlar Microsoft ve DirectX; adlandırılmış değer girdisi ise InstalledVersion'dir.

RegistryKeyChangeEvent, belirli bir anahtarda bir değişiklik gerçekleştiğinde gerçekleşir, ancak girdi değerlerin nasıl değiştiğini tanımlamaz ve bu olay belirtilen anahtarın altındaki değişiklikler tarafından tetiklenmez. Hiyerarşik anahtar yapısının herhangi bir yerindeki değişiklikleri tanımlamak için, oluşan belirli değerleri veya anahtar değişikliklerini döndürmeyen RegistryTreeChangeEventkullanın. Belirli bir giriş değeri değişikliğini almak için RegistryValueChangeEventkullanın ve ardından temel değeri almak için girdiyi okuyun.

StdRegProv yalnızca Win32 sınıf yapısından farklı olan C++ veya betikten çağrılabilen yöntemlere sahiptir.

Aşağıdaki kod örneği, kayıt defteri anahtarı altındaki tüm Microsoft yazılım alt anahtarlarını listelemek için StdRegProv.EnumKey yönteminin nasıl kullanılacağını gösterir.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Not

VBScript kullanım dışı bırakıldı. Ayrıntılar için VBScript'in kullanımdan kaldırılması blog gönderisine bakın: Zaman çizelgeleri ve sonraki adımlar.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SOFTWARE\Microsoft'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

StdRegProv, çeşitli kayıt defteri giriş değeri veri türlerini okumak için farklı yöntemlere sahiptir. Girdinin bilinmeyen değerleri varsa, bunları listelemek için StdRegProv.EnumValues çağırabilirsiniz. Aşağıdaki tabloda, StdRegProv yöntemleri ile veri türleri arasındaki yazışmalar listelenmiştir.

Yöntem Veri tipi
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
getExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

Aşağıdaki tabloda, yeni anahtarlar veya değerler oluşturmak veya mevcut anahtarları değiştirmek için ilgili yöntemler listelemektedir.

Yöntem Veri tipi
SetBinaryValue REG_BINARY
DWORDDeğeriniAyarla REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

Aşağıdaki örnekte kayıt defteri anahtarından sistem olay günlüğünün kaynak listesinin nasıl okunduğu gösterilmektedir.

HKEY_LOCAL_MACHINE\Sistem\Geçerli Denetim Kümesi\Hizmetler\Olay Günlüğü\Sistem

Çok dizeli değerdeki öğelerin koleksiyon veya dizi olarak kabul edildiklerine dikkat edin.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Not

VBScript kullanım dışı bırakıldı. Ayrıntılar için VBScript'in kullanımdan kaldırılması blog gönderisine bakın: Zaman çizelgeleri ve sonraki adımlar.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SYSTEM\CurrentControlSet\Services\Eventlog\System'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

Kayıt defteri sağlayıcısı LocalSystem'da değil LocalService'te barındırılır. Bu nedenle, HKEY_CURRENT_USER alt ağacından uzaktan bilgi sağlamak mümkün değildir. Ancak, yerel bilgisayarda çalıştırılacak betikler HKEY_CURRENT_USERerişmeye devam edebilir. Barındırma modelini uzak bir makinede LocalSystem olarak ayarlayabilirsiniz, ancak uzak makinedeki kayıt defteri saldırgan erişime açık olduğundan bu bir güvenlik riskidir. Daha fazla bilgi için bkz. Sağlayıcı Barındırma ve Güvenlik.

WMI Görevlerini : Kayıt Defteri