Servis Kontrol Müdürü - Service Control Manager
Hizmet Denetim Yöneticisi ( SCM ), Windows hizmet işlemlerini başlatan, durduran ve bunlarla etkileşime giren Windows NT işletim sistemleri ailesi altında özel bir sistem işlemidir . Bu bulunan yürütülebilir. Hizmet süreçleri, iyi tanımlanmış bir API aracılığıyla SCM ile etkileşim kurar ve aynı API, MMC ek bileşeni ve komut satırı Hizmet Kontrol yardımcı programı gibi etkileşimli Windows hizmet yönetimi araçları tarafından dahili olarak kullanılır . Bu dosyanın sonlandırılması, Mavi Ölüm Ekranına neden olma yöntemi olarak kullanılır .
%SystemRoot%\System32\services.exeServices.mscsc.exe
Uygulama
Yürütülebilir SCM, Services.exe bir Windows konsol programı olarak çalışır ve sistem başlangıcında Wininit işlemi tarafından erken başlatılır . Ana işlevi, SvcCtrlMain() otomatik başlatma için yapılandırılmış tüm hizmetleri başlatır. İlk olarak, aşağıdaki iki kayıt defteri anahtarı okunarak, yüklü hizmetlerin dahili bir veritabanı başlatılır:
-
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List, hizmet gruplarının adlarını ve sırasını içerir. Her hizmetin kayıt defteri anahtarı, diğer hizmet gruplarına göreGroupilgili bir hizmetin veya bir aygıt sürücüsünün başlatılma sırasını yöneten isteğe bağlı bir değer içerir . -
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, hizmetlerin ve aygıt sürücülerinin gerçek veritabanını içeren ve SCM'nin dahili veritabanına okunan. SCM, her hizmetinGroupdeğerini ve ayrıca yükleme sırası bağımlılıklarını kendiDependOnGroupveDependOnServicekayıt defteri anahtarlarından okur .
Sonraki adımda, SCM'nin ana işlevi , önyükleme veya sistem başlangıcı sırasında başlatılması gereken aygıt sürücülerinin başarıyla yüklenip yüklenmediğini ve bunu yapamayanların adı verilen bir listede saklanıp depolanmadığını kontrol SvcCtrlMain() eden işlev işlevini çağırır . Daha sonra , belirli hizmetlerle etkileşime giren SCM ve SCP'ler (Hizmet Kontrol Süreçleri) arasında bir uzak yordam çağrısı arabirimi olarak adlandırılmış bir kanal oluşturulur .
ScGetBootAndSystemDriverState()ScFailedDrivers \Pipe\Ntsvcs
Daha sonra, hesaplanan yük sırası bağımlılıklarına dikkat ederek, otomatik başlatma olarak işaretlenmiş tüm servisler arasında döngü yapan ScAutoStartServices() işlevi çağırır . Döngüsel bir bağımlılık durumunda bir hata not edilir ve daha sonra yük sırasına göre gelen bir gruba ait bir servise bağlı servis atlanır. Gecikmeli otomatik başlatma hizmetleri için, gruplamanın hiçbir etkisi yoktur ve bunlar, sistem başlangıcının sonraki bir aşamasında yüklenir.
Başlamak istediği her hizmet için, SCM ScStartService() , hizmetin sürecini çalıştıran dosyanın adını kontrol eden işlevi çağırır ve hizmet için belirtilen hesabın, hizmet sürecinin çalıştığı hesapla aynı olmasını sağlar. hizmet ilk yapılandırıldığında , API kullanılarak SCP tarafından saklanan kayıt defteri anahtarında saklanan "gizli" şifreleri arayan LSASS işleminin LSASS işlevi System çağrılarak hesapta çalıştırılmaması sağlanır .
LogonUserEx()HKLM\SECURITY\Policy\Secrets\LsaStorePrivateData()
Daha sonra ScLogonAndStartImage() , hizmet süreci henüz başlatılmamış her hizmet için işlev çağrılır. Hizmet süreçleri , API aracılığıyla askıya alınmış durumda oluşturulur CreateProcessAsUser() . Hizmet işleminin yürütülmesine devam edilmeden önce, \Pipe\Net\NtControlPipeX SCM ile hizmet süreci arasında bir iletişim kanalı olarak hizmet veren adlandırılmış bir kanal (burada X, her hizmet yinelemesi için artırılan bir sayıdır) oluşturulur. Hizmet süreci, StartServiceCtrlDispatcher() işlevi çağırarak boruya bağlanır , ardından SCM hizmete bir "başlat" komutu gönderir.
Gecikmeli otomatik başlatma hizmetleri
Windows Vista'ya gecikmeli otomatik başlatma hizmetleri, uzun süreli sistem başlatma sorununu çözmek ve geciktirilemeyen kritik hizmetlerin başlamasını hızlandırmak için eklenmiştir . Başlangıçta otomatik başlatma yöntemi, diğer uygulamaların ve hizmetlerin bağlı olduğu temel sistem hizmetleri için tasarlanmıştır. SCM, gecikmeli hizmetleri yalnızca tüm gecikmesiz otomatik başlatma hizmetlerini işledikten sonra ScInitDelayStart() işlevi çağırarak başlatır . Bu işlev, karşılık gelen bir çalışan iş parçacığı ile ilişkili gecikmiş (varsayılan olarak 120 saniye) bir iş öğesini kuyruğa alır. Bir gecikmeden sonra başlatılmanın dışında, gecikmeli ve gecikmesiz hizmetler arasında başka hiçbir fark yoktur.
Aygıt sürücüleri
Kimin Hizmetler Type defteri değeridir SERVICE_KERNEL_DRIVER ya SERVICE_FILE_SYSTEM_DRIVER özel olarak ele alınır: Bu kendisi için aygıt sürücülerini temsil ScStartService() çağıran ScLoadDeviceDriver() işlevi hangi yükleri uygun sürücü (bir uzantısı ile genellikle bir dosya .sys içinde yer almalıdır) %SystemRoot%\System32\Drivers\ dizinine. Bu amaçla, NtLoadDriver sistem çağrısı çağrılır ve SeLoadDriverPrivilege SCM'nin sürecine eklenir.
Ağ sürücü harfleri
SCM, Windows hizmetleriyle tamamen ilgisi olmayan ek bir işlevsellik sağlar: Bir ağ sürücü harfi bağlantısı oluşturulduğunda veya silindiğinde, Windows mesajları yayınlayarak Windows Gezgini gibi GUI uygulamalarını bilgilendirir .
WM_DEVICECHANGE
Ayrıca bakınız
Notlar
Referanslar
- Russinovich, Mark ; Solomon, David; Ionescu, Alex (2009), Windows® Internals (5. baskı), Microsoft Press , ISBN 0-7356-2530-1