[Winpcap-users] While testing Gianlucas winpcap
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
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 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
And I found out, that my second call to pcap_open blocks until I close
the first winpcap handle.
>> 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:
>> 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
>> 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.
Is there maybe a newer release I can test against?
More information about the Winpcap-users