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.
Shell ad alanı, dosya sistemini ve Shell tarafından yönetilen diğer nesneleri tek bir ağaç yapılandırılmış hiyerarşisinde düzenler. Kavramsal olarak, dosya sisteminin daha büyük ve daha kapsayıcı bir sürümüdür.
- Giriş
- Ad Alanı Nesnelerini Tanımlama
Giriş
Kabuğun birincil sorumluluklarından biri, sistemi oluşturan çok çeşitli nesneleri yönetmek ve bu nesnelere erişim sağlamaktır. Bu nesneler arasında sayıca en fazla ve tanıdık olanlar, bilgisayar disk sürücülerinde bulunan klasörler ve dosyalardır. Ancak Kabuk, dosya sistemi dışı veya sanal nesnelerden oluşan bir dizi sistemi de yönetir. Bazı örnekler şunlardır:
- Ağ yazıcıları
- Diğer ağa bağlı bilgisayarlar
- Denetim Masası uygulamaları
- Geri Dönüşüm Kutusu
Bazı sanal nesneler fiziksel depolama içermez. Örneğin yazıcı nesnesi, ağa bağlı yazıcılara yönelik bir bağlantı koleksiyonu içerir. Geri Dönüşüm Kutusu gibi diğer sanal nesneler, disk sürücüsünde depolanan ancak normal dosyalardan farklı işlenmesi gereken veriler içerebilir. Örneğin, bir sanal nesne bir veritabanında depolanan verileri temsil etmek için kullanılabilir. Ad alanı açısından, veritabanındaki çeşitli öğeler, hepsi tek bir disk dosyasında depolanmış olsa bile Windows Gezgini'nde ayrı nesneler olarak görünebilir.
Sanal nesneler uzak bilgisayarlarda bile bulunabilir. Örneğin, dolaşımı kolaylaştırmak için kullanıcının belge dosyaları bir sunucuda depolanabilir. Kullanıcılara dosyalarına birden çok masaüstü bilgisayardan erişim vermek için, şu anda kullandıkları masaüstü bilgisayardaki Belgelerim klasörü masaüstü bilgisayarın sabit diskini değil sunucuyu işaret eder. Yolu eşlenmiş bir ağ sürücüsü veya UNC yol adı içerir.
Dosya sistemi gibi ad alanı da iki temel nesne türü içerir: klasörler ve dosyalar. Klasör nesneleri, ağacın düğümleridir; bunlar, dosya nesneleri ve diğer klasörler için kapsayıcılardır. Dosya nesneleri, ağacın yapraklarıdır; bunlar normal disk dosyaları veya yazıcı bağlantıları gibi sanal nesnelerdir. Dosya sisteminin parçası olmayan klasörler bazen sanal klasörleri olarak adlandırılır.
Dosya sistemi klasörleri gibi sanal klasörlerin koleksiyonu da genellikle sistemden sisteme değişir. Üç sanal klasör sınıfı vardır:
- Tüm sistemlerde bulunan Geri Dönüşüm Kutusu gibi standart sanal klasörler.
- Standart adlara ve işlevlere sahip isteğe bağlı sanal klasörler, ancak tüm sistemlerde mevcut olmayabilir.
- Kullanıcı tarafından yüklenen standart olmayan klasörler.
Dosya sistemi klasörlerinin aksine, kullanıcılar yeni sanal klasörler oluşturamaz. Yalnızca Microsoft dışı geliştiriciler tarafından oluşturulanları yükleyebilirler. Bu nedenle, sanal klasörlerin sayısı normalde dosya sistemi klasör sayısından çok daha azdır. Sanal klasörleri uygulama hakkında bir tartışma için bkz. Ad Alanı Uzantıları.
Windows Gezgini'nin Gezgin Çubuğu'nda ad alanının nasıl yapılandırıldığını gösteren görsel bir gösterim görebilirsiniz. Örneğin, Windows Gezgini'nin aşağıdaki ekran görüntüsü nispeten basit bir ad alanı gösterir.
Kabuk ad alanıekran görüntüsü
Ad alanı hiyerarşisinin nihai kökü masaüstüdür. Kökün hemen altında Bilgisayarım ve Geri Dönüşüm Kutusu gibi birkaç sanal klasör bulunur.
Çeşitli disk sürücülerinin dosya sistemlerinin daha büyük ad alanı hiyerarşisinin alt kümeleri olduğu görülebilir. Bu dosya sistemlerinin kökleri Bilgisayarım klasörünün alt klasörleridir. Bilgisayarım, eşlenen ağ sürücülerinin köklerini de içerir. Ağaçtaki diğer düğümler(Belgelerim gibi) sanal klasörlerdir.
Ad Alanı Nesnelerini Tanımlama
Bir ad alanı nesnesini kullanabilmeniz için önce bunu tanımlamanın bir yolunu kullanmanız gerekir. Dosya sistemindeki bir nesnenin MyFile.htmgibi bir adı olabilir. Sistemin başka bir yerinde bu ada sahip başka dosyalar da olabileceğinden, bir dosya veya klasörün benzersiz olarak tanımlanması için "C:\MyDocs\MyFile.htm" gibi tam bir yol gerekir. Bu yol temelde dosya sistemi kökü C:\ yolundaki tüm klasörlerin sıralı bir listesidir ve dosyayla biter.
Ad alanı bağlamında yollar, ad alanının dosya sistemi bölümünde bulunan nesneleri tanımlamak için hala oldukça kullanışlıdır. Ancak, sanal nesneler için kullanılamazlar. Bunun yerine Shell, herhangi bir ad alanı nesnesiyle kullanılabilecek alternatif bir tanımlama aracı sağlar.
Öğe Kimlikleri
Klasör içinde, her nesnenin dosya veya klasör adının işlevsel eşdeğeri olan öğe kimliğivardır. Öğe kimliği aslında bir SHITEMID yapısıdır:
typedef struct _SHITEMID {
USHORT cb;
BYTE abID[1];
} SHITEMID, * LPSHITEMID;
abID üyesi nesnenin tanımlayıcısıdır. abID uzunluğu tanımlanmaz ve değeri nesneyi içeren klasör tarafından belirlenir. abID değerlerinin klasörler tarafından nasıl atandığıyla ilgili standart bir tanım olmadığından, bunlar yalnızca ilişkili klasör nesnesi için anlamlıdır. Uygulamalar bunları yalnızca belirli bir klasördeki bir nesneyi tanımlayan bir belirteç olarak ele almalıdır. abID uzunluğu değiştiğinden, cb üyesi SHITEMID yapısının boyutunu bayt cinsinden tutar.
Öğe kimlikleri görüntüleme amacıyla kullanışlı olmadığından, nesneyi içeren klasör normalde bu klasöre bir görünen ad atar. Bu, bir klasörün içeriğini görüntülerken Windows Gezgini tarafından kullanılan addır. Görünen adların nasıl işlendiği hakkında daha fazla bilgi için bkz. Bir Klasörden Bilgi Alma.
Öğe Kimliği Listeleri
Öğe kimliği tek başına nadiren kullanılır. Normalde, dosya sistemi yolu ile aynı amaca hizmet eden bir öğe kimliği listesinin parçasıdır. Ancak, yollar için kullanılan karakter dizesi yerine, öğe kimliği listesi ITEMIDLIST yapısıdır. Bu yapı, iki baytlık NULLile sonlandırılan bir veya daha fazla öğe kimliğinden oluşan sıralı bir dizidir. Öğe kimliği listesindeki her öğe kimliği bir ad alanı nesnesine karşılık gelir. Sıraları ad alanında dosya sistemi yolu gibi bir yol tanımlar.
Aşağıdaki çizimde, C:\MyDocs\MyFile.htmkarşılık gelen ITEMIDLIST yapısının şematik gösterimi gösterilmektedir. Her bir öğe kimliğinin görünen adı, onun üstünde gösterilir. abID üyelerinin değişen genişlikleri rastgeledir; bu üyenin boyutunun değişebileceği gerçeğini gösterir.
PIDL'ler
Kabuk API'sinde, ad alanı nesneleri genellikle ITEMIDLIST yapısına veya öğe tanımlayıcı listesine (PIDL) yönelik bir işaretçiyle tanımlanır. Kolaylık olması için, PIDL terimi genellikle bu belgede işaretçi yerine yapının kendisi olarak adlandırılır.
Önceki çizimde gösterilen PIDL, tamveya mutlak, PIDL olarak adlandırılır. Tam PIDL masaüstünden başlar ve yoldaki tüm ara klasörlerin öğe kimliklerini içerir. Nesnenin öğe kimliğiyle sona erer ve ardından iki baytlık NULLile. Tam PIDL, tam nitelikli yol ile benzerdir ve Shell ad alanındaki nesneyi benzersiz bir şekilde tanımlar.
Tam PIDL'ler seyrek kullanılır. Birçok işlev ve yöntem, göreli bir PIDLbekler. Göreli PIDL'nin kökü masaüstü değil bir klasördür. Göreli yollarda olduğu gibi, yapıyı oluşturan öğe kimlikleri dizisi, ad alanında iki nesne arasında bir yol tanımlar. Nesneyi benzersiz olarak tanımlamasalar da, genellikle tam bir PIDL'den küçüktür ve birçok amaç için yeterlidir.
Nesnenin üst klasörüne göre, en yaygın kullanılan göreli PIDL'ler,tek düzeyli PIDL'lerdir. Bunlar yalnızca nesnenin öğe kimliğini ve sonlandırıcı NULLiçerir. Çok düzeyli PIDL'ler de birçok amaçla kullanılır. İki veya daha fazla öğe kimliği içerirler ve genellikle bir üst klasörden bir veya daha fazla alt klasör dizisi aracılığıyla bir nesneye giden yolu tanımlarlar. Tek düzeyli bir PIDL'nin yine de tam bir PIDL olabileceğini unutmayın. Özellikle, masaüstü nesneleri masaüstünün alt öğeleridir, bu nedenle tam PIDL'leri yalnızca bir öğe kimliği içerir.
Klasör Kimliğini Almabölümünde açıklandığı gibi, Kabuk API'si bir nesnenin PIDL'sini almak için çeşitli yollar sağlar. Bunu aldıktan sonra, genellikle diğer Kabuk API'sinin işlevlerini ve yöntemlerini çağırdığınızda nesneyi tanımlamak için kullanırsınız. Bu bağlamda, bir PIDL'in iç içeriği opak ve ilgisizdir. Bu tartışmanın amaçları doğrultusunda, PIDL'leri belirli ad alanı nesnelerini temsil eden belirteçler olarak düşünün ve bunları ortak görevler için nasıl kullanacağınıza odaklanın.
PIDL'leri ayırma
PIDL'lerin yollarla bazı benzerlikleri olsa da, bunları kullanmak biraz farklı bir yaklaşım gerektirir. Birincil fark, bunlar için bellek ayırma ve serbest bırakma işlemidir.
Yol için kullanılan dizeye benzer şekilde, PIDL için de bellek ayrılmalıdır. Bir uygulama bir PIDL oluşturursa, ITEMIDLIST yapısı için yeterli bellek ayırması gerekir. Burada ele alınan durumların çoğu için Shell, PIDL'yi oluşturur ve bellek ayırmayı yönetir. PIDL'i hangi birim tahsis etmiş olursa olsun, uygulama genellikle artık gerekli olmadığında PIDL'yi bırakmaktan sorumludur.
PIDL'yi tahsis etmek için CoTaskMemAlloc işlevini ve serbest bırakmak için CoTaskMemFree işlevini kullanın.