Disclaimer: opisywane czynności nie są informacjami stricté technicznymi! jest to opis dokonany po własnoręcznych doświadczeniach “zabawy” z systemem. nieumiejętne korzystanie z edytora rejestru może spowodować, że uszkodzisz swój system!
Services
Kiedy zajrzy się do listy procesów systemowych okaże się, że usługi systemowe w w2k+ nie są uruchamiane jako oddzielne procesy. W zamian można zobaczyć, że działa kilka procesów o nazwie svchost. Osobom, które tego jeszcze nie zrobiły, polecam ściągnąć niezastąpione narzędzie, jakim jest Process Explorer. Można co prawda posłużyć się poleceniem 'tasklist /svc', aby uzyskać informacje o tym, który svchost przetrzymuje którą usługę… tylko po co?
Oto widok usług, obsługiwanych przez najbardziej przeciążonego svchosta - netsvcs:

Jak widać jest ich całkiem sporo. Kilkukrotnie szukałem dobrego wyjaśnienia, czemu procesy rozłożone są tak a nie inaczej, czy na prawdę wpływa to na wydajność lub chroni zasoby - i nie udało mi się póki co odpowiedzi na to pytanie znaleść. Generalnie svchost jest głównym procesem, uruchmiającym usługi w postaci DLL, co można porównać do programu master i pluginów. Tylko czemu są one rozłożone tak a nie inaczej?
Po co izolować?
Windows jaki jest, każdy widzi. Są osoby, które mając problem z windą - reinstalują ją. To najgorszy z możliwych sposobów, bo problemy są jak bumerangi. Nie dywagując nad sensownością tego rodzaju rozwiązywania problemu - jak pokazuje google svchost potrafi zdenerwować (ja miałem ponad 75o.ooo wyników), i często odpowiedzią jest - “trzeba najpierw sprawdzić, który konkretnie serwis jest przyczyną”.
W moim przypadku, do izolacji procesów pchnął mnie problem z zawieszającym się modemem GPRS. Po zawieszeniu się modemu, zwisały również procesy TapiSrv oraz RasMan. Oba te procesy znajdują się w obrębie przedstawionego powyżej svchosta, więc skillowanie czy restart wiązały się w restartem maszyny. O ile wyizolowanie nie rozwiązało ostatecznie mojej sytuacji [nawet po restarcie procesów nie mogłem się połączyć], o tyle bez restartu mogłem przywrócić serwisy do działania… nie wspominając o zabawie, jaką jest zawsze grzebanie w rejestrze i adrenalinka “rozleci sie ta winda, czy sie nie rozleci?” (;.
Izolacja - jak
Jeśli z jakiegoś powodu chciałbyś, drogi czytelniku, wyizolować którąś z usług systemowych, zapoznaj się najpierw z tym artem ze strony Microsoftu. Wyjaśni on kilka podstawowych kwestii dotyczących bohatera niniejszego textu, i ujawni dwie bardzo ważne informacje, które są clue do izolacji procesu systemowego do oddzielnego mastera. Informacje te, to dwa klucze rejestru, które pokazują gdzie będzie należało dokonać zmian:
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Svchost HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\%ServiceName%
A zmian należy dokonać w obu kluczach. Ale zanim się do tego przystąpi, proponuję oba wymienione klucze zbackupować - wystarczy je wyexportować do rega za pomocą regedita.
Po pierwsze trzeba stworzyć nowego svchosta, modyfikując pierwszy klucz:
SvcHost:
(Default) REG_MULTI_SZ (value not set)
DcomLaunch REG_MULTI_SZ HttpFilter
imgsvc REG_MULTI_SZ StiSvc
LocalService REG_MULTI_SZ Alerter WebClient LmHosts RemoteRegistry upnphost SSDPSRV
netsvcs REG_MULTI_SZ 6to4 AppMgmt AudioSrv Browser CryptSvc DMServer \
DHCP ERSvc EventSystem FastUserSwitchingCompatibility HidServ Ias Iprip \
Irmon LanmanServer LanmanWorkstation Messenger Netman Nla Ntmssvc NWCWorkstation \
Nwsapagent Remoteaccess Schedule Seclogon SENS Sharedaccess SRService Themes \
TrkWks W32Time WZCSVC Wmi WmdmPmSp winmgmt TermService wuauserv BITS ShellHWDetection \
helpsvc xmlprov wscsvc WmdmPmSN Rasauto Rasman Tapisrv
NetworkService REG_MULTI_SZ DnsCache
rpcss REG_MULTI_SZ RpcSs
termsvcs REG_MULTI_SZ TermService
Oczywistym jest, że jest to informacja jak są poprzydzielane procesy, i że niemal wszystkie usługi sieciowe zostały pchnięte do jednego procesu master, o nazwie netsvcs. Dodajmy swój własny klucz:
Telephony REG_MULTI_SZ Rasauto Rasman Tapisrv Netman
Następnie wszystkie 4 wartości wymienone w nowym kluczu, należy usunąć z netsvcs.
Należy się tu chwilka wyjaśnienia - czemu akurat cztery procesy a nie jeden? Otóż jak się okazło, niektóre procesy będące w obszarze innego mastera, nie potrafiły się wzajemnie komunikować [nie wiem jak bardzo to stwierdzenie odzwierciedla rzeczywisty mechanizm, ale fakt jest iż] - jeśli wyizolowało się tylko serwis TapiSrv (telephony), to Netman, który jest odpowiedzialny m.in. za wyświetlanie dostępnych połączeń seciowych (lamersko - ikonek w “network connections”), nie wyświetlał połączeń modemowych. Trzeba zatem zatem urzyć intuicji co do powiązania między procesami, lub poszukać jakiegoś stricté technicznego dokumentu opisującego te zależności. Osobiście wątpie, aby takowy istniał [jeśli znajdziesz - sprawisz mi olbrzymią radość, podsyłając linka! (:]. Z tego też powodu, niestety, nigdy nie będzie się miało pewności, czy dokonanie izolacji nie wpłynie w jakimś stopniu na funkcjonalność systemu.
Następnie trzeba dodać gałąź o nazwie stworzonego klucza, i wpisać tam dwa klucze, dokładnie tak, jak jest to w netsvc:
SvcHost
netsvcs
AuthenticationCapabilities REG_DWORD 0x00003020 (12320)
CoInitializeSecurityParam REG_DWORD 0x00000001 (1)
Telephony
AuthenticationCapabilities REG_DWORD 0x00003020 (12320)
CoInitializeSecurityParam REG_DWORD 0x00000001 (1)
… tak na prawde bardziej poprawnym, byłoby stwierdzenie “wydaje mi się, iż trzeba”. Klucz o wartości 1 (ten co-cośtam) definiuje, iż ma być brany pod uwagę ten pierwszy (auth-cośtam). Ten z kolei, jest maskowym zapisem uprawnień, jakie mają procesy z niego korzystające. Szczegółów można szukać w SDK, w kodzie bibliotek. Myślę, że nawet developerzy korzystają z API, żeby niewiedzieć takich szczegółów - i ja także nie dociekałem. Czynność wykonałem “na intuicję”.
To, co pozostało do zrobienia, to zdefiniowanie w odpowiednich kluczach, odpowiedzialnych za wymienione 4 procesy, iż powinny uruchamiać się w oddzielnym svchoście. W każdej z gałęzi:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rasauto HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TapiSrv HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netman
znajduje się klucz o wartości:
ImagePath REG_EXPAND_SZ %SystemRoot%\System32\svchost.exe -k netsvcs
Nie cięzko się domyśleć, iż “netsvcs” należy zmienić na własną wartość - w opisywanym przypadku - “telephony”.
Teraz już tylko restart systemu - i voilá

Refs
- svchost w Windows XP
- więcej o svchoście - jeden z ciekawszych, chociaż generalnie wszystkie jakie można znaleść traktują o tym samym.
sa takie procesy ktore sie uruchamiaja i sa nieurzywane bo np przegladasz tylko int. albo grasz to po co ci uruchomiony proces do javy czy jakiegos odtwarzacza filmow a trojany niech sobie sa ;p