Aracılığıyla paylaş


System.Runtime.InteropServices. Kasa Handle sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

SafeHandle sınıfı, tanıtıcı kaynaklarının kritik şekilde sonlandırılmasını sağlayarak tanıtıcıların atık toplama tarafından erken geri kazanılmasını ve istenmeyen yönetilmeyen nesnelere başvurmak için işletim sistemi tarafından geri dönüştürülmesini önler.

Neden Kasa Handle?

yöntemindeki Object.Finalize geçersiz kılmalar, bir nesne atık toplanırken yönetilmeyen kaynakların temizlenmesine izin verse de, bazı durumlarda, platform çağırma çağrısı içinde bir yöntem yürütülürken, son haline getirilebilir nesneler atık toplama tarafından geri kazanılabilir. Sonlandırıcı bu platform çağırma çağrısına geçirilen tanıtıcıyı serbest verirse, bozulmayı işlemeye yol açabilir. Bir platform çağrısı sırasında yönteminiz engellenirken , örneğin bir dosyayı okurken tanıtıcı geri kazanılabilir.

Daha da önemlisi, Windows tanıtıcıları agresif bir şekilde geri dönüştürdiğinden, bir tanıtıcı geri dönüştürülebilir ve hassas veriler içerebilecek başka bir kaynağa işaret edebilir. Bu, geri dönüşüm saldırısı olarak bilinir ve verileri bozabilir ve bir güvenlik tehdidi olabilir.

Kasa Handle ne yapar?

SafeHandle sınıfı, bu nesne ömrü sorunlarının birkaçını basitleştirir ve işletim sistemi kaynaklarının sızdırılmaması için platform çağrısıyla tümleşiktir. sınıfı, SafeHandle tanıtıcıları kesintisiz olarak atayarak ve serbest bırakarak nesne ömrü sorunlarını çözer. Tanıtıcının kapalı olmasını sağlayan ve platform çağırma çağrısının bozuk durumda olduğu varsayıldığında bile beklenmeyen AppDomain yüklemeler sırasında çalıştırılması garanti edilen kritik bir sonlandırıcı içerir.

SafeHandle öğesinden CriticalFinalizerObjectdevraldığından, kritik olmayan tüm sonlandırıcılar kritik sonlandırıcılardan önce çağrılır. Sonlandırıcılar, aynı çöp toplama geçişi sırasında artık canlı olmayan nesnelerde çağrılır. Örneğin, bir FileStream nesne, tanıtıcının sızdırılması veya geri dönüştürülmesinin riski olmadan mevcut arabelleğe alınan verileri temizlemek için normal bir sonlandırıcı çalıştırabilir. Kritik ve kritik olmayan sonlandırıcılar arasındaki bu çok zayıf sıralama genel kullanıma yönelik değildir. Öncelikle mevcut kitaplıkların semantiğini değiştirmeden kullanmasına SafeHandle izin vererek mevcut kitaplıkların geçişine yardımcı olmak için vardır. Buna ek olarak, kritik sonlandırıcı ve yöntemi gibi SafeHandle.ReleaseHandle() çağıran her şey kısıtlanmış bir yürütme bölgesinde olmalıdır. Bu, sonlandırıcının çağrı grafı içinde hangi kodun yazılacağına yönelik kısıtlamalar uygular.

Platform çağırma işlemleri, bir SafeHandle tarafından kapsüllenen tanıtıcıların başvuru sayısını otomatik olarak artırır ve tamamlandıktan sonra bunları azaltma. Bu, tutamacın beklenmedik bir şekilde geri dönüştürülmemesini veya kapatılmasını sağlar.

Sınıf oluşturucusunda bağımsız değişkene bir değer sağlayarak nesneleri oluştururken SafeHandle temel alınan tanıtıcının ownsHandleSafeHandle sahipliğini belirtebilirsiniz. Bu, nesne atıldıktan sonra nesnenin tanıtıcıyı serbest bırakıp bırakmayacağını SafeHandle denetler. Bu, özel yaşam süresi gereksinimleri olan tutamaçlar veya kullanım ömrü başka biri tarafından denetlenen bir tutamacı tüketmek için yararlıdır.

Kasa Handle'dan türetilen sınıflar

SafeHandle , işletim sistemi tanıtıcıları için soyut sarmalayıcı sınıfıdır. Bu sınıftan türetme zordur. Bunun yerine, ad alanında Microsoft.Win32.SafeHandles aşağıdakiler için güvenli tanıtıcılar sağlayan türetilmiş sınıfları kullanın: