[Winpcap-users] While testing Gianlucas winpcap 3.1 [prerelease]...

Marc Wetzel mwse at gmx.de
Mon Aug 1 19:43:13 GMT 2005


>>
>> But you might remember, that I had trouble using winpcap3.1.b4/WAN 
>> devices with Delphi,
>> because of some kind of COM initialization problems.
>> It only worked if I do a CoInitializeEx(NIL, COINIT_MULTITHREADED) at 
>> the very start of the code.
>
>
> I know. This is one of the biggest headaches I had with WinPcap and 
> NdisWan.
>
It really really only works if I set it to COINIT_MULTITHREADED (not the 
other way around).

I use winpcap the following way... maybe there is a problem with my code?

in the main process I fetch the devices (pcap_findalldevs) to look if 
there is a WAN device.
I such device is found I create a new thread and tell it to open the 
specific device (I found out in the main process)
inside the thread I use pcap_open to open this device...

And I really have to initialize to COINIT_MULTITHREADED, get it going 
(in beta4)
In beta4 this had nothing to do with pcap_findalldevs(). This just ever 
worked, regardless which
ComThreadModel I choosed.
The failure just happened on pcap_open()

I just tested it again (this time I tried to use multiple threads 
opening NdisWanBh)
And I found out, that my second call to pcap_open blocks until I close 
the first winpcap handle.



>>
>> #2:
>> With the prerelease I have now other problems...
>> If I use CoInitializeEx(NIL, COINIT_MULTITHREADED) I only see my 
>> Ethernet-Device (using pcap_findalldevs).
>
>
> This is correct. Basically, the NetMon COM component used by WinPcap 
> to capture from PPP does NOT work in the MULTITHREADED threading model 
> on Windows XP. As a consequence, that device is not listed *if* COM 
> has already been initialized with that threading model.
>
>
Is there any official documentation to this? I didnt found anything on 
MSDN on this subject.

>
>> And if I comment the CoInitializeEx call out, I see all devices as 
>> expected, but then it fails
>> in the call to  pcap_open() with the error message "The system cannot 
>> find the device" (just as before).
>
>
> Uhm, are you sure? I've thoroughly tested it without any problem on my 
> machine. Have you tried building a small C app (or one in the devpack) 
> and see if it works?
>
> If you don't initialize COM, winpcap initializes it with 
> CoInitialize(NULL) before opening the GenericDialupAdapter.
>
Delphi normally does not initialize COM. Only if needed (by using 
certain libraries, I dont use).

>>
>>
>> Just an addendum:
>> #3:
>> Using CoInitializeEx(NIL, COINIT_MULTITHREADED) in a Com-Application 
>> is not possible,
>> e.g. embedding the IE-ActiveX object will always fail. This means 
>> that having an application which uses
>> both the IE-ActiveX and winpcap (sniffing on WAN devices) is not 
>> possible.
>>
>> Sniffing ethernet devices is not touched by this problem.
>>
>> Maybe I am completely wrong?
>> Does anybody have a clue, or is this a bug?
>
>
> I think that's what I explained before. On Windows XP the MS NetMon 
> COM component does NOT support the MULTITHREADED threading model. At 
> the moment I haven't found an easy solution to this issue.
>

Gianluca,
Is there maybe a newer release I can test against?


TIA
/Marc


More information about the Winpcap-users mailing list