Kamoš mal problém s Hamachi na Windows 7 – po nainštalovaní nefungovala Hamachi sieť a Hamachi zobrazovalo chybu „network adapter error“. Najprv som sa pokúšal zistiť, či je správne nastavený firewall a či Hamachi nevyžaduje administrátorské práva.
Za normálnych okolností Hamachi nainštaluje do systému sieťový adaptér, jednu Windows službu spúšťanú s Local System právami a GUI klienta, ktorý beží s práva bežného používateľa a využíva nainštalovanú službu. Sieťový adaptér je nastavený tak, aby poskytoval routovanie na sieť 5.0.0.1/8. Zistili sme, že sieťový adaptér nebol nainštalovaný a teda Hamachi malo problémy so správnym nainštalovaním siete. Hamachi inštaluje sieťový adaptér iba počas inštalácie – nie pri reinštalovaní – a bolo potrebné ho teda najprv odinštalovať a znovu nainštalovať. Tento postup však u kamoša nepomohol.
Inštalačný log
Najprv som sa teda pokúsil získať log z inštalácie Hamachi, či tam nie je nič podozrivé.
msiexec /log hamachi.log /i hamachi.msi ... Action 18:30:17: InstallDriver. Installing network driver Action 18:30:18: InstallServices. Installing new services ...
Žiadna chyba, tak som sa rozhodol vyskúšať nainštalovať ovládač pre Hamachi manuálne.
Manuálna inštalácia ovládača
Cez Device Manager kamoš dal manuálne nainštalovať
sieťový adaptér s Hamachi ovládačom (%PROGRAMFILE%\LogMeIn
Hamachi\hamachi.inf
). Táto inštalácia však skončila veľmi divnou
chybou: 0×5AA ERROR_NO_SYSTEM_RESOURCES – Insufficient system
resources exist to complete the requested service. Na prvý pohľad sa
zdá, že počítač nemá dostatok zdrojov a v tomto prípade človek najprv
zisťuje, či má dosť voľného miesta na disku, alebo voľnej operačnej
pamäte. Problém však bol inde a skúsili sme zapnúť
v msconfig.exe diagnostické spustenie systému s iba
základnými službami, aby sme vylúčili problém s nejakou inou aplikáciou.
Tak isto bezúspešne a s rovnakým výsledkom.
Vďaka Process Monitoru som zistil, že inštalácia ovládačov vo Windowse
je podrobne zaznamenávaná do súboru
%WINDIR%\inf\setupapi.dev.log
. Vyžiadal som si ho teda a
nasledovala podrobná analýza a porovnanie jeho obsahu voči systému, kde sa
Hamachi ovládač bezproblémov nainštaloval.
. dvi: {DIF_INSTALLDEVICE} 23:43:46.036 dvi: CoInstaller 1: Enter 23:43:46.036 cci: [NdisCoinst: Enter NcipHandleInstallPreProcessing] cci: NdisCoinst: NetCfgInstanceId does not exist cci: NdisCoinst: Guid of the adapter is {DEFD4A42-3C78-4F11-AAC6-D798EF311363} inf: Opened PNF: 'C:\Windows\INF\oem2.inf' ([strings]) cci: NdisCoinst: IfType from registry is 1 cci: NdisCoinst: IfType 1, Characteristics 0x1, IsIrdaDevice 0, PhysicalMediaType -1, MediaType -1, IsBridge 0, FoundGuidInDownlevel 0, EnableDhcp 2 cci: NdisCoinst: Connection name is Local Area Connection 35 cci: NdisCoinst: NetLuidIndex does not exist !!! cci: NdisCoinst: NcipAllocateNetLuidIndex failed with error 0x5aa cci: [NdisCoinst: Exit NcipHandleInstallPreProcessing] !!! dvi: CoInstaller 1: failed(0x000005aa)! !!! dvi: Error 1450: Insufficient system resources exist to complete the requested service. dvi: {DIF_INSTALLDEVICE - exit(0x000005aa)} 23:43:46.504
Z logu bolo vidieť, že inštalátor pri vytváraní nového sieťového
adaptéru volá funkciu NcipAllocateNetLuidIndex
ktorá skončí
chybou. Získať informácie o tejto funkcii bolo jednoduché a zložité
zároveň. Našťastie o nej existuje záznam na Internete, ale použiteľné
informácie sú skryté vo veľkej kope textu zmeišaného so záznamami log
súboru na fóre OSR Online.
Jeffrey Tippet z Microsoftu tam opisuje ako funkcia
NcipAllocateNetLuidIndex
funguje.
I don't have a good guess as to what's gone wrong, but here's some background info that might help you figure it out. (This info is an implementation detail, subject to change, but may come in handy for troubleshooting):
NDIS must allocate a (locally) unique number for each network interface, the NET_LUID. The NET_LUID consists of the ifType, paired with a unique ID number. To generate that unique ID, we keep track of the IDs that have already been assigned in
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\[ifType] ! IfUsedNetLuidIndices (REG_BINARY)
for each ifType. For example, look in \6 if your NIC is Ethernet (ifType=3D=6).In there, there is IfUsedNetLuidIndices, which is (IIRC) a bitmap of the unique IDs that have been assigned to other network interfaces. Make sure this value is present and not damaged (e.g., a huge number of 0×FF's). Typically, its value will be something like 0×FF 0×01, if you have 9 NICs. Note that you can't just whack this value and replace it with something else, since then NDIS will incorrectly assign the same NET_LUID to two interfaces, and all sorts of things will break when that happens.
NcipAllocateNetLuidIndex
teda pre daný typ sieťového
adaptéru (v prípade Hamachi to je ifType=1) potrebuje získať LUID –
Local Unique Identifier, ktorého aktuálna hodnota sa nachádza v uvedenom
kľúči v Registroch. Problém môže nastať, keď je hodnota
IfUsedNetLuidIndices
nastavená na veľmi vysoké číslo –
systém potom nemôže vytvoriť ďalšie LUID a skončí chybou 0x5AA
ERROR_NO_SYSTEM_RESOURCES
.
Nasledovala teda analýza tohto kľúča a dopracovanie sa (našťastie a konečne) k zdroju problému:
reg query HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\1 /v IfUsedNetLuidIndices HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\1 IfUsedNetLuidIndices REG_BINARY FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Hodnota IfUsedNetLuidIndices
sa z neznámich príčin
poškodila a keďže kamoš nemal v počítači nejaké špeciálne sieťové
adaptéry (ifType = 1 = IF_TYPE_OTHER) tak bolo bezpečné nastaviť
IfUsedNetLuidIndices
na 0×00. Potom však treba
reštartovať počítač. Windows si totiž načítajú pomocné LUID
čísla pri štarte systému a nenačítavajú ich počas inštalácie
zariadenia (overené pomocou Process Monitoru 🙂 ). Nasledovalo už len
nainštalovanie Hamachi – tento raz úspešne a bez problémov.
Po približne 24 hodinách som úspešne našiel príčinu problému, opravil chybu a získal cenné skúsenosti. A aj v tomto prípade nebolo potrebné na odstránenie problému načisto inštalovať Windows – k čomu by sa asi mnohí iní uchýlili. Samotné riešenie problému však trvalo iba pár hodín, natiahlo sa však kvôli poctivej dochádzke do školy 🙂
husty22 says:
tak toto mi teda dost pomohlo:) mal som tento isty problem a teraz uz je vsetko v pohode.Dobre ze si to sem dal:))
pista says:
Ahoj. Mam tento isty problem a snazil som sa ho odstranit presne podla tvojho navodu, ale neuspesne. Neviem co som mohol zle spravit. Ten IfUsedNetLuidIndices mozem nastavit aj na inu hodnotu? Rozdiel oproti tvojmu pripadu je asi len ten ze mam viacej sietovych adapterov. Nenapada ta co by som mohol spravit zle? Za odpoved vopred dakujem.
Fero says:
<!--texy-->Zdravim. Ja mam ten isty problem… Ale neviem co mam spravit :) Nemohli by ste napisat nejaky navod aj pre laikov :) ze co a ako mam spravit. Dakujem