Aracılığıyla paylaş


Nesne Kolları

Sürücüler ve kullanıcı modu bileşenleri, sistem tanımlı nesnelerin çoğuna tutamaçlar aracılığıyla erişmektedir. Handle'lar HANDLE opak veri türü ile temsil edilir. (Tutamakların cihaz nesnelerine veya sürücü nesnelerine erişmek için kullanılmadığını unutmayın.)

Çoğu nesne türü için, nesneyi oluşturan veya açan çekirdek modu yordamı, çağırana bir tanıtıcı sağlar. Çağıran daha sonra nesne üzerinde yapılacak sonraki işlemlerde bu tanıtıcıyı kullanır.

Sürücülerin genellikle kullandığı nesne türleri ve o türdeki nesnelere erişim sağlayan yordamların listesi.

Nesne türü Karşılık gelen oluşturma/açma rutini

Dosya

IoCreateFile, ZwCreateFile, ZwOpenFile

Kayıt defteri anahtarları

IoOpenDeviceInterfaceRegistryKey, IoOpenDeviceRegistryKey, ZwCreateKey, ZwOpenKey

Konular

PsCreateSystemThread

Etkinlikler

IoCreateSynchronizationEvent, IoCreateNotificationEvent

Sembolik bağlantılar

ZwOpenSymbolicLinkObject

Dizin nesneleri

ZwCreateDirectoryObject

Bölüm nesneleri

ZwOpenSection

Sürücü artık nesneye erişim gerektirmediğinde, tanıtıcıyı kapatmak için ZwClose rutinini çağırır. Bu, yukarıdaki tabloda listelenen tüm nesne türleri için çalışır.

Tanıtıcıları sağlayan yordamların çoğu, parametre olarak bir OBJECT_ATTRIBUTES yapısını alır. Bu yapı, tanıtıcının özniteliklerini belirtmek için kullanılabilir.

Sürücüler aşağıdaki sap özniteliklerini belirtebilir:

  • OBJ_KERNEL_HANDLE

    Tutacağa yalnızca çekirdek modundan erişilebilir.

  • OBJ_INHERIT

    Geçerli işlemin tüm alt öğeleri, oluşturulduklarında tanıtıcının bir kopyasını alır.

  • OBJ_FORCE_ACCESS_CHECK

    Bu öznitelik, sistemin handle üzerinde tüm erişim denetimlerini gerçekleştirdiğini belirtmektedir. Varsayılan olarak, sistem çekirdek modunda oluşturulan tanıtıcılardaki tüm erişim denetimlerini atlar.

Bu öznitelikleri OBJECT_ATTRIBUTES bir yapıda ayarlamak için InitializeObjectAttributes yordamını kullanın.

Nesne tanıtıcılarını doğrulama hakkında bilgi için bkz. Nesne Tanıtıcılarını Doğrulama Hatası.

Özel Nesne Tanıtıcıları

Bir sürücü özel kullanımı için bir nesne tanıtıcısı oluşturduğunda, sürücünün OBJ_KERNEL_HANDLE özniteliğini belirtmesi gerekir. Bu, tanıtıcının kullanıcı modundaki uygulamalar tarafından erişilemez olmasını sağlar.

Paylaşılan Nesne Tanıtıcıları

Çekirdek modu ile kullanıcı modu arasında nesne tanıtıcılarını paylaşan bir sürücü, yanlışlıkla güvenlik açıkları oluşturmamak için dikkatli bir şekilde yazılmalıdır. Bazı yönergeler şunlardır:

  1. Çekirdek modunda tanıtıcılar oluşturun ve kullanıcı moduna geçirin; aksini yapmayın. Kullanıcı modu bileşeni tarafından oluşturulan ve sürücüye geçirilen tanıtıcılara güvenilmemelidir.

  2. Sürücünün kullanıcı modu uygulamaları adına tanıtıcıları işlemesi gerekiyorsa, uygulamanın gerekli erişime sahip olduğunu doğrulamak için OBJ_FORCE_ACCESS_CHECK özniteliğini kullanın.

  3. Paylaşılan bir tanıtıcıda çekirdek modu başvurusunu tutmak için ObReferenceObjectByPointer kullanın. Aksi takdirde, kullanıcı modundaki bileşen tanıtıcıyı kapatırsa, başvuru sayısı sıfıra düşer ve sürücü daha sonra tanıtıcıyı kullanmaya veya kapatmaya çalışırsa, sistem kilitlenir.

Kullanıcı modu uygulaması bir olay nesnesini oluşturursa, bir sürücü güvenli bir şekilde bu olayın işaretlenmesini bekleyebilir ancak, yalnızca uygulama olay nesnesinin bir tanıtıcısını bir IOCTL aracılığıyla sürücüye geçirirse. Sürücü, olayı oluşturan işlem bağlamında IOCTL'yi işlemeli ve ObReferenceObjectByHandle çağrısı yaparak tanıtıcının bir olay tanıtıcısı olduğunu doğrulamalıdır.