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.
Windows, güvenlik varlıklarını birbirinden ayırmak için kesin değer olarak güvenlik tanımlayıcısını (SID) kullanır. Örneğin, sistemdeki tek tek kullanıcılar için oluşturulan her yeni hesaba benzersiz bir güvenlik tanımlayıcısı atanır. Dosya sistemi için yalnızca bu SID kullanılır.
Aşağıdaki şekilde güvenlik tanımlayıcısı yapısı gösterilmektedir.
Benzersiz SID'lere ek olarak, Windows sistemi iyi bilinen tanımlayıcılar kümesini tanımlar. Örneğin, yerel Yönetici iyi bilinen bir SID'dir.
Windows, çekirdek ortamındaki SID'ler ve kullanıcı adları arasında dönüştürme için çekirdek içi bir mekanizma sağlar. Bu işlev çağrıları, kullanıcı modu yardımcı hizmetlerini kullanarak bu işlevleri uygulayan ksecdd sürücüsünden kullanılabilir. Buna göre, dosya sistemlerindeki kullanımları, kullanıcı modu hizmetleriyle iletişim için her zamanki kurallara uymalıdır. Bu çağrılar, sanal bellek dosyası G/Ç sırasında kullanılamaz.
Bu işlevlerden bazıları şunlardır:
SecMakeSPN , belirli güvenlik hizmeti sağlayıcılarıyla iletişim kurarken kullanılabilecek bir hizmet sağlayıcısı adı dizesi oluşturur.
SecMakeSPNEx , SecMakeSPN'nin Windows XP'de kullanıma sunulan genişletilmiş bir sürümüdür.
SecMakeSPNEx2 , Windows Vista ve Windows Server 2008'den itibaren kullanılabilen genişletilmiş bir SecMakeSPNEx sürümüdür.
SecLookupAccountSid , belirtilen SID için bir hesap adı döndürür.
SecLookupAccountName , belirtilen hesap adının SID'sini alır.
SecLookupWellKnownSid , belirtilen iyi bilinen SID türü için doğru SID'yi döndürür. Bu işlev Windows Server 2003 ve sonraki sürümlerde kullanılabilir.
Ayrıca, herhangi bir çekirdek sürücüsü aşağıdaki standart çalışma zamanı kitaplığı yordamlarını kullanarak bir SID oluşturabilir:
RtlInitializeSid, yeni bir SID için bir arabellek başlatır.
RtlLengthSid , verilen arabellekte depolanan SID'nin boyutunu belirler.
RtlValidSid , verilen SID arabelleğinin geçerli bir biçimlendirilmiş arabellek olup olmadığını belirler.
RtlLengthSid ve RtlValidSid , SID için 8 baytlık sabit üst bilginin mevcut olduğunu varsayar. Bu nedenle, bir sürücü bu işlevleri çağırmadan önce bir SID üst bilgisi için bu minimum uzunluğu denetlemelidir.
Diğer birkaç RTL işlevi olsa da, bu liste SID oluştururken gerekli olan birincil işlevleri sağlar.
Aşağıdaki kod örneğinde "yerel sistem" varlığı için SID'nin nasıl oluşturulacağı gösterilmektedir. Windows Server 2003'te kullanıma sunulan daha basit SecLookupWellKnownSid işlevi de kullanılabilir.
{
//
// temporary stack-based storage for an SID
//
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SID_IDENTIFIER_AUTHORITY localSidAuthority =
SECURITY_NT_AUTHORITY;
//
// build the local system SID
//
RtlZeroMemory(sidBuffer, sizeof(sidBuffer));
localSid->Revision = SID_REVISION;
localSid->SubAuthorityCount = 1;
localSid->IdentifierAuthority = localSidAuthority;
localSid->SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
//
// make sure it is valid
//
if (!RtlValidSid(localSid)) {
DbgPrint("no dice - SID is invalid\n");
return(1);
}
}
Aşağıdaki kod örneği, "yerel sistem" varlığı için SecLookupWellKnownSid işlevini kullanarak SID oluşturma işlemini gösterir:
{
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SIZE_T sidSize;
status = SecLookupWellKnownSid(WinLocalSid,
&localSid,
sizeof(sidBuffer),
&sidSize);
if (!NT_SUCCESS(status)) {
//
// error handling
//
}
}
Bu yaklaşımlardan biri geçerlidir, ancak ikinci kod tercih edilir. Bu kod örnekleri, SID'yi depolamak için yerel arabellekleri kullanır. Bu arabellekler geçerli çağrı bağlamı dışında kullanılamaz. SID arabelleğinin kalıcı olması gerekiyorsa, arabellek havuz belleğinden ayrılmalıdır.