Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Windows menggunakan pengidentifikasi keamanan (SID) sebagai nilai definitif untuk membedakan entitas keamanan satu sama lain. Misalnya, pengidentifikasi keamanan unik ditetapkan ke setiap akun baru yang dibuat untuk pengguna individual pada sistem. Untuk sistem file, hanya SID ini yang digunakan.
Gambar berikut mengilustrasikan struktur pengidentifikasi keamanan.
Selain SID unik, sistem Windows mendefinisikan sekumpulan pengidentifikasi terkenal. Misalnya, Administrator lokal adalah SID terkenal.
Windows menyediakan mekanisme dalam kernel untuk mengonversi antara SID dan nama pengguna dalam lingkungan kernel. Panggilan fungsi ini tersedia dari driver ksecdd , yang mengimplementasikan fungsi-fungsi ini dengan menggunakan layanan pembantu mode pengguna. Oleh karena itu, penggunaannya dalam sistem file harus mematuhi aturan yang biasa untuk komunikasi dengan layanan mode pengguna. Panggilan ini tidak dapat digunakan selama I/O file halaman.
Beberapa fungsi ini adalah:
SecMakeSPN membuat string nama penyedia layanan yang dapat digunakan saat berkomunikasi dengan penyedia layanan keamanan tertentu.
SecMakeSPNEx adalah versi tambahan dari SecMakeSPN yang diperkenalkan di Windows XP.
SecMakeSPNEx2 adalah versi tambahan dari SecMakeSPNEx yang tersedia mulai dari Windows Vista dan Windows Server 2008.
SecLookupAccountSid mengembalikan nama akun untuk SID tertentu.
SecLookupAccountName mengambil SID untuk nama akun tertentu.
SecLookupWellKnownSid mengembalikan SID yang benar untuk jenis SID tertentu yang terkenal. Fungsi ini tersedia di Windows Server 2003 dan yang lebih baru.
Selain itu, driver kernel apa pun dapat membuat SID dengan menggunakan rutinitas pustaka runtime standar berikut:
RtlInitializeSid menginisialisasi buffer untuk SID baru.
RtlLengthSid menentukan ukuran SID yang disimpan dalam buffer yang diberikan.
RtlValidSid menentukan apakah buffer SID yang diberikan adalah buffer berformat valid.
RtlLengthSid dan RtlValidSid mengasumsikan bahwa header tetap 8-byte untuk SID ada. Jadi driver harus memeriksa panjang minimum ini untuk header SID sebelum memanggil fungsi-fungsi ini.
Meskipun ada beberapa fungsi RTL lainnya, daftar ini menyediakan fungsi utama yang diperlukan saat membuat SID.
Contoh kode berikut menunjukkan cara membuat SID untuk entitas "sistem lokal". Fungsi SecLookupWellKnownSid yang lebih sederhana yang diperkenalkan di Windows Server 2003 juga dapat digunakan.
{
//
// 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);
}
}
Contoh kode berikut menunjukkan cara membuat SID menggunakan fungsi SecLookupWellKnownSid untuk entitas "sistem lokal":
{
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SIZE_T sidSize;
status = SecLookupWellKnownSid(WinLocalSid,
&localSid,
sizeof(sidBuffer),
&sidSize);
if (!NT_SUCCESS(status)) {
//
// error handling
//
}
}
Salah satu pendekatan ini valid, meskipun kode terakhir lebih disukai. Contoh kode ini menggunakan buffer lokal untuk menyimpan SID. Buffer ini tidak dapat digunakan di luar konteks panggilan saat ini. Jika buffer SID harus persisten, buffer harus dialokasikan dari memori kumpulan.