[Winpcap-users] WanPacket.cpp, DllMain, and LoadLibrary
Gianluca Varenni
gianluca.varenni at cacetech.com
Mon Aug 29 16:17:03 GMT 2005
----- Original Message -----
From: "Bryan Kadzban" <bryan at kadzban.is-a-geek.net>
To: <winpcap-users at winpcap.org>
Sent: Sunday, August 28, 2005 7:17 PM
Subject: [Winpcap-users] WanPacket.cpp, DllMain, and LoadLibrary
>I was recently looking into the WanPacket.dll sources (due to a long
> delay when starting a process that used it - the delay didn't have to do
> with it directly, but rather what else it loads, and what they do at
> load time). I am wondering why WanPacket.cpp does a LoadLibrary on
> npp/ndisnpp.dll. The DllMain documentation ([1]) says that calling
> LoadLibrary from inside DllMain is prohibited, and a few technical
> people at Microsoft agree ([2], [3], and [4]). Plus, the module handle
> that LoadLibrary returns is never used (it is checked in a couple
> places, to ensure it's not NULL, but it isn't passed to GetProcAddress
> or similar).
>
> Is it only being loaded so that other functions can check whether it
> exists before using it (presumably so they don't try to use it on
> NT4/9x/ME)? If that's the reason, then wouldn't it make more sense to
> attempt the LoadLibrary at the start of those functions, and then do the
> FreeLibrary right after checking the result? (To keep the DLL lifetime
> correct.) Or have a separate static-linkage variable instead of the
> module handle, and set it to 1 or 2 depending on whether LoadLibrary
> works from any of these functions, so that you don't have to call it
> more than once? (Of course, you might not call it at all, depending on
> the functions called by the program.)
The reason for that "strange" LoadLibrary is to fix a bug in the Microsoft
NetMon COM component (which is used to capture from Dialup/VPN adapters).
Basically, that DLL should be manually loaded before any attempt to call one
of the NetMon functions, otherwise you'll experience random Access violation
crashes. This "dirty" solution was provided directly by the Microsoft
Support to one of the WinPcap users, and it did fix the issue. It was my
fault not to add some more comment in the WinPcap code for that weird code.
However, as you mentioned, there is a bug in that code. In fact, as the MSDN
documentation clearly states (and I didn't see it, my bad), you should not
call LoadLibrary from with the DllMain function. I plan to add a fix to this
in the next weeks, and maybe put a test version of WanPacket.dll on the
website.
Have a nice day
GV
>
> (Both of these options would basically delay-load the DLL instead of
> loading it at DllMain time. I don't believe linking directly against it
> is possible, since it's in the npp/ subdirectory of system32/. But it
> only hosts COM stuff anyway, and COM knows how to load it when needed,
> so directly linking against it should not be required.)
>
> Or am I missing something?
>
> Thanks!
>
> [1]
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp
>
> [2] http://blogs.msdn.com/larryosterman/archive/2004/04/23/118979.aspx
>
> [3] http://blogs.msdn.com/oldnewthing/archive/2004/01/28/63880.aspx
>
> [4] http://blogs.msdn.com/oleglv/archive/2003/12/12/43069.aspx
> _______________________________________________
> Winpcap-users mailing list
> Winpcap-users at winpcap.org
> https://www.winpcap.org/mailman/listinfo/winpcap-users
>
More information about the Winpcap-users
mailing list