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 🙂