Prípad nefungujúceho Hamachi

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átor­ské 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_RE­SOURCES – 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 IfUsedNetLuidIn­dices, 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 🙂

Posted in IT

0 thoughts on “Prípad nefungujúceho Hamachi

  • tak toto mi teda dost pomohlo:) mal som tento isty problem a teraz uz je vsetko v pohode.Dobre ze si to sem dal:))

  • Ahoj. Mam tento isty problem a snazil som sa ho odstranit presne podla tvojho navodu, ale neuspesne. Neviem co som mohol zle spravit. Ten IfUsedNetLuidIn­dices 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.

  • <!--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

Comments are closed.