The bug seems to be in the way WinPcap parses the registry under Win9x.
The problem is:
- the way Win9x stores information about the adapters in the registry is
weird, complex and not well documented
- I and the rest of the winpcap team do no more support Win9x actively. We
have limited resources and we prefer to allocate them on the WinNTx version.
The consequence is that I will not be able to address this bug in the short
period, unless I receive a patch that solves it.
Loris
> Hey I did not notice, its you!!! cuz I read your Italian presentation
> nearly every hour or call to the functions. Hey thanks again, saved lots
> of hair. I was about to reinvent the cycly when i came accross your lib.
> great. thanks again.( will try to convert the thanks to .....)
>
> The problem was not there. the problem in GetNetInfoEx. i mimic the
> calls and found the same wrong result.
>
>
> The following are the result of dry run:
>
> Lets look for "SISNIC"
>
> First call for the key SYSTEM\\CurrentControlSet\\Services\\class\\net
>
> IIndex=0 != "SISNIC"
>
> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0000]
> ....
>
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0000\NDIS]
> "MajorNdisVersion"=hex:04
> "MinorNdisVersion"=hex:00
> "LogDriverName"="*PNP0510"
>
>
> IIndex=1 != "SISNIC"
>
> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0001]
> ....
>
>
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0001\NDIS]
> "MajorNdisVersion"=hex:03
> "MinorNdisVersion"=hex:0a
> "LogDriverName"="NIC1394"
>
> IIndex=2 != "SISNIC"
>
> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0002]
> ....
>
> IIndex=2 != "SISNIC"
>
>
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0002\NDIS]
> "LogDriverName"="PPPMAC"
> "MajorNdisVersion"=hex:03
> "MinorNdisVersion"=hex:0a
>
> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0003]
> ....
>
> IIndex=3 != "SISNIC"
>
>
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0003\NDIS]
> "LogDriverName"="pptp"
> "MajorNdisVersion"="03"
> "MinorNdisVersion"="0A"
>
>
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0004\NDIS]
> "LogDriverName"="SISNIC"
> "MajorNdisVersion"=hex:03
> "MinorNdisVersion"=hex:0a
>
> IIndex=4 Heyyyyyy this one so the index is 4
>
>
> now let look at [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP]
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0000]
> "Class"="NetTrans"
> "Driver"="NetTrans\\0001"
> "MasterCopy"="Enum\\Network\\MSTCP\\0000"
> "DeviceDesc"="TCP/IP"
> "CompatibleIDs"="MSTCP"
> "Mfg"="Microsoft"
> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
> "ConfigFlags"=hex:10,00,00,00
> "Capabilities"=hex:14,00,00,00
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0000\Bindings]
> "VREDIR\\0000"=""
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0001]
> "Class"="NetTrans"
> "Driver"="NetTrans\\0002"
> "MasterCopy"="Enum\\Network\\MSTCP\\0001"
> "DeviceDesc"="TCP/IP"
> "CompatibleIDs"="MSTCP"
> "Mfg"="Microsoft"
> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
> "ConfigFlags"=hex:10,00,00,00
> "Capabilities"=hex:14,00,00,00
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0001\Bindings]
> "VREDIR\\0001"=""
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0002]
> "Class"="NetTrans"
> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
> "Driver"="NetTrans\\0004"
> "MasterCopy"="Enum\\Network\\MSTCP\\0002"
> "DeviceDesc"="TCP/IP"
> "CompatibleIDs"="MSTCP"
> "Mfg"="Microsoft"
> "ConfigFlags"=hex:10,00,00,00
> "Capabilities"=hex:14,00,00,00
>
> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0002\Bindings]
> "VREDIR\\0002"=""
>
> oops IINDEX 4 not up there so GetNetInfoEx returns FALSE
>
> so i made the changes for now for my ongoing project ( hey wanna know
> for waat?)
>
>
> this is the change I made for now in my WINME+autoupdate feature ( dont
> know what Microsoft updates automatically , did not check the
> logs)enabled box.
> //begining of w30a3->jhn
> WORD wVersionRequested;
> WSADATA wsaData;
> struct hostent* h;
> char szBuff[80];
> LPIN_ADDR p;
>
> if(gethostname(szBuff, 79))
> { wVersionRequested = MAKEWORD( 1, 1);
> if(WSAStartup( wVersionRequested, &wsaData )!=0) return FALSE;
> }
>
> h=gethostbyname(szBuff);
>
> p=(LPIN_ADDR)h->h_addr_list[0];
> strncpy(String,inet_ntoa(*p),16);//ipv4 only
>
> StringPos = 0;
> BufLen = sizeof String;
>
> for(naddrs = 0;naddrs < *NEntries;naddrs++){
> TmpAddr = (struct sockaddr_in *) &(buffer[naddrs].IPAddress);
>
> if((TmpAddr->sin_addr.S_un.S_addr = inet_addrU(String + StringPos))!= -1){
> TmpAddr->sin_family = AF_INET;
>
> TmpBroad = (struct sockaddr_in *) &(buffer[naddrs].Broadcast);
> TmpBroad->sin_family = AF_INET;
> // Don't know where to find the broadcast adrr under Win9x, default to
> 255.255.255.255
> TmpBroad->sin_addr.S_un.S_addr = 0x00ffffff & p->S_un.S_addr;
> TmpBroad->sin_addr.S_un.S_addr |=0xff000000;
>
> while(*(String + StringPos) != '\0' && *(String + StringPos) !=
> ',')StringPos++;
> StringPos++;
>
> if(*(String + StringPos) == 0 || StringPos >= BufLen)
> break;
> }
> else break;
> }
>
> BufLen = sizeof String;
> // Open the key with the addresses
> // scan the key to obtain the masks
> strcpy(String,"255.255.255.0");
> StringPos = 0;
> for(nmasks = 0;nmasks <* NEntries;nmasks++){
> TmpAddr = (struct sockaddr_in *) &(buffer[nmasks].SubnetMask);
>
> if((TmpAddr->sin_addr.S_un.S_addr = inet_addrU(String + StringPos))!= -1){
> TmpAddr->sin_family = AF_INET;
>
> while(*(String + StringPos) != '\0' && *(String + StringPos) !=
> ',')StringPos++;
> StringPos++;
>
> if(*(String + StringPos) == 0 || StringPos >= BufLen)
> break;
> }
> else break;
> }
>
> *NEntries = 1;
>
> return TRUE;
>
> //end of w30a3->jhn
>
>
> // Reach the class\net registry key
>
status=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\
\class\\net",0,KEY_READ,&InterfaceKey);
> if (status != ERROR_SUCCESS) return FALSE;
>
> ..............
>
>
> Now ok. its not solution of course. its just enables running properly in
> win me, for me.
>
> I was talking about the SNMP and INETMIB1.DLL. its in the windows core
sdk.
>
>
> Aftab Jahan Subedar
> Software Engineer/Overseas Business Development Manager
> Suvastu Software Ltd.
> Suvastu Tower
> 69/1 Pathapath Green Road
> Dhaka 1205
> Bangladesh
> sms:++447765341890
>
>
>
> Loris Degioanni wrote:
>
> > Hi,
> >
> >
> >
> >>hi all,
> >>
> >>cuz the add_or_find_if could not open does not mean failure.
> >>
> >>izzit better this way in the follwoing function ?
> >>
> >>
> >>
> >>static int
> >>pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
> >> char *errbuf)
> >>{
> >>pcap_if_t *curdev;
> >>npf_if_addr if_addrs[16];
> >>LONG if_addr_size;
> >>int res = 0;
> >>struct sockaddr_in *addr, *netmask;
> >>
> >>if_addr_size = 16;
> >>
> >>/*
> >>* Add an entry for this interfacwe, with no addresses.
> >>*/
> >>/*
> >>if (add_or_find_if(&curdev, devlist, (char *)name, 0, (char *)desc,
> >> errbuf) == -1) {
> >>
> >>wcap30a3 -> jhn
> >>*/
> >>curdev=NULL;
> >>if (add_or_find_if(&curdev, devlist, (char *)name, 0, (char *)desc,
> >> errbuf) == -1 ) {
> >>/*
> >>* Failure.
> >>*/
> >>/*
> >>return (-1);
> >>wcap30a3 -> jhn
> >>*/
> >>if(curdev==NULL)
> >> return (0); //did not add but error!! see add_or_find_if
> >>else
> >>return (-1);
> >>}
> >>
> >
> > Yes, you are rigth, but consider that all the interfaces received by
> > pcap_add_if_win32() can be opened. The reason is that the list of
adapters
> > is obtained in pcap_findalldevs() by means of the
PacketGetAdapterNames()
> > packet.dll function. This function returns only the adapters that it's
> > actually able to open.
> > Therefore, the check that you propose should not be necessary, because
the
> > call to pcap_open_live() inside add_or_find_if() will always succeed.
> >
> > However, does this patch solve your problem?
> >
> >
> >>Izzit asso something wrong with PacketGetNetInfoEx/should use mib?
> >>manually checked the registry , it does not map, or enum does not
> >>contain desired index. ( removed the NICs and reinstalled-> Nada)
> >>
> >
> > What do you mean by 'mib'?
> >
> > Loris
> >
> >
> >>Aftab Jahan Subedar
> >>Software Engineer/Overseas Business Development Manager
> >>Suvastu Software
> >>Suvastu Tower
> >>69/1 Pathapath Green Road
> >>Dhaka 1205
> >>Bangladesh
> >>
> >>
> >>
> >>
> >>==================================================================
> >> This is the WinPcap users list. It is archived at
> >> http://www.mail-archive.com/[email protected]/
> >>
> >> To unsubscribe use
> >> mailto: [EMAIL PROTECTED]?body=unsubscribe
> >>==================================================================
> >>
> >>
> >
> >
> >
> > ==================================================================
> > This is the WinPcap users list. It is archived at
> > http://www.mail-archive.com/[email protected]/
> >
> > To unsubscribe use
> > mailto: [EMAIL PROTECTED]?body=unsubscribe
> > ==================================================================
> >
> >
> >
>
>
>
>
> ==================================================================
> This is the WinPcap users list. It is archived at
> http://www.mail-archive.com/[email protected]/
>
> To unsubscribe use
> mailto: [EMAIL PROTECTED]?body=unsubscribe
> ==================================================================
==================================================================
This is the WinPcap users list. It is archived at
http://www.mail-archive.com/[email protected]/
To unsubscribe use
mailto: [EMAIL PROTECTED]?body=unsubscribe
==================================================================