2012-03-06 21 views
16

Geçen gün DuplicateHandle için dokümanlar arıyordum ve DuplicateHandle'ın kayıt defteri anahtar tutamaçlarını (HKEY s) kopyalayabildiğini fark ettim. SysInternals kitabında bunu biraz daha okumak, kayıt defteri tutamaçlarının dosya tanıtıcılarına benzer düz kernel nesneler olduğunu gösteriyor gibi görünüyor. Yine de CloseHandle, HKEY s'yi kapatamaz ve RegCloseKey diğer türlü çekirdek nesnelerini kapatamaz.RegCloseKey neden var (CloseHandle aynı işlevi gerçekleştiriyor gibi görünüyor)?

Neden ayrım?

+0

Hmm, Sadece HKEY'lerin daha önce (Windows 3.1'de) tanıtıldığını tahmin edebilirim ve sonra Microsoft, uygulamaların birleştirilmesine rağmen arabirimleri birleştirmek istemedi. – Philipp

+1

Sadece burada tahmin ediyorum: 'CloseHandle()' belgelerinin sonunda: > Bir iş parçacığı tanıtıcısını kapatmak ilişkili iş parçacığını sonlandırmaz veya iş parçacığı nesnesini kaldırır. Bir işlem tanıtıcısını kapatmak, ilişkili işlemi sonlandırmaz veya işlem nesnesini kaldırmaz. Bir iş parçacığı nesnesini kaldırmak için iş parçacığını sonlandırmanız, ardından tüm tanıtıcıları iş parçacığına kapatmanız gerekir. Daha fazla bilgi için, bkz. Bir İş Parçasının Sona Erdirilmesi. Bir işlem nesnesini kaldırmak için işlemi sonlandırmanız, ardından tüm tanıtıcıları işleme almanız gerekir. Bir kayıt defteri anahtarını kapatırken benzer işlemler yapılabilir. – yasouser

+0

@Philipp: Ben de öyle düşündüm. CreateFile, Win3.1 günlerinde (yanılmadıysam) etrafındaydı ve "CloseFile" işlevi yok. –

cevap

14

Bu, kayıt defterindeki işlevselliğin yalnızca bir kısmının çekirdeğe uygulanmasından kaynaklanır. Yerel kayıt defteri anahtarlarıyla çalışmak için temel işlemleri (oluşturma, silme, okuma, yazma vb.) Içerir.

kalan fonksiyonları

kullanıcı modunda advapi32.dll ve çalışmalarında uygulanmaktadır:

Native Win32 kayıt temsilini dönüştürme HKEY_PERFORMANCE_DATA
  • için RegConnectRegistry
  • Access kullanarak uzak bir kayıt defterine
    • Erişim temsil
    • WOW64'ün 64-bit sistemlerde kayıt defteri yeniden yönlendirmesi (32-bit uygulamalar için)

    İşlevsel işlevlerin çekirdek kısmı Yerel API aracılığıyla kullanılabilir: NtCreateKey, NtOpenKey, vb. Bu işlevleri Win32 API'siyle karşılaştırırken, Yerel API'nın HKEY yerine "klasik" HANDLE tanımlayıcılarını kullandığı görülebilir.

  • +0

    Daha önce söylediğim gibi, bunun nedeni, kayıt defterinin bazı işlevlerinin kullanıcı modunda (advapi32.dll) uygulanmış olmasıdır ve tüm HKEY nesneleri aslında "gerçek" çekirdek SAP'leri değildir. – Flot2011

    +0

    Üzgünüm, evet, daha önce yorumumu sildim çünkü bu arada ben de gördüm :) –

    +0

    @ Flot2011: Sadece merak, bilgi kaynağını teklif edebilir misiniz? Bu tür "içeriden" tür bilgileri almakta zorlanıyorum. – yasouser

    İlgili konular