[Winpcap-users] Checking whether adapter is alive

Bryan Kadzban bryan at kadzban.is-a-geek.net
Sun Mar 5 22:50:03 GMT 2006


Loris Degioanni wrote:
> Bryan, Shmuel,
> do you have a small snippet of code that we can use to replicate the
> problem? That would allow us to debug it more easily.

Well, my program (not sure about Shmuel's) runs this type of code.  I
have a .Net OO wrapper around the whole thing, but these are the API
calls it makes:

// start of setup
PacketGetAdapterNames(...);    // get size of buffer
//  allocate a buffer
PacketGetAdapterNames(...);    // get adapter list into the buffer

for each "name" in the list returned {
    handle = PacketOpenAdapter(name);

    // Get OID_GEN_PHYSICAL_MEDIUM using PacketRequest on "handle", and
    //  filter out non-wireless cards.
    //  If not filtered, add handle to the list of handles.
}
// end of setup

every second, for each item in the list of handles, do {
    PACKET_OID_DATA *req = malloc(whatever);
    req->Oid = OID_802_11_BSSID_LIST;
    req->Length = // what I passed to malloc
    PacketRequest(handle, 0, req);
    // (Actually, I do this, with increasing buffer sizes, until
    //  PacketRequest doesn't fail with the "buffer too short" status.)

    // Display all APs in range, indicating the signal strength of
    //  each, based on the list returned by this OID
}

This "every second" loop runs (with only one device) fine, until the
device in question gets disabled.  Then it BSODs.  (It may also BSOD if
other devices on the same machine get disabled, I don't remember.  I do
know it blue-screens if any device options get changed, though.)  You
can reproduce it by either removing a USB NIC while the loop is running
(if you have a USB NIC), or disabling the device in device manager (but
this may not be possible).

The *easy* way to trigger the BSOD is to go into device manager, open up
the properties of the NIC device that you have open in the loop (again,
or perhaps any other one, I don't remember for sure anymore), go to the
Advanced tab, change the value of any of the options there, and hit OK.
The machine will BSOD on the first call into PacketRequest after you hit
OK.

I also have a memory dump file from one of the blue screens, but I'm
guessing it's probably too large to send via email (it's 512MB).

Thanks!

> A simple workaround, if the frequency of the calls to PacketRequest()
> is not high, is closing and reopening the adapter every time. The
> adapter should just not open if the card is removed.

Hmm.  One open and close per second might get to be a bit much, I don't
know...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 256 bytes
Desc: OpenPGP digital signature
Url : http://www.winpcap.org/pipermail/winpcap-users/attachments/20060305/294d7f8a/signature.pgp


More information about the Winpcap-users mailing list