What the OP is seeing is a process using the MUX DLL as a COM in-process server creating an instance of the CMuxNotify object, releasing (hence destroying) it, and then doing it a second time before the DLL is unloaded (even when DllCanUnloadNow succeeds, it is often best to wait for a while before unloading the DLL in case it is needed again, which in this case it was- loading a DLL can be REALLY expensive in terms of performance).
DllMain process attach
DllGetClassObject->CMuxNotify construor
Buncha calls on the INetCfgNotifyGlobal interfaces
CMuxNotify destructor (as in someone called IUnknown::Release on it).
DllCanUnloadNow succeeds
Then back to DllGetClassObject to start that last bit over again.
Perhaps the underlying process is making sure it can initialize the object, then releasing it while it does something else, then coming back, initializing it again and then actually using it.
I’m not sure why that should cause any concern, though. Perhaps there are some invalid assumptions about some global state being kept somewhere in the DLL?
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Peter Wieland
Sent: Friday, January 05, 2007 9:54 AM
To: Windows System Software Devs Interest List
Subject: RE: Re: [ntdev] Loading configuration for adapter {0854672E-C0FE-4D99-92A6-388A9D02C693}…
Are the lines like this:
–>CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
<–CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
Leading you to believe that the function is called twice?
Look at the arrows at the beginning of the line (–> or <–). Clearly (at least to me) the log is indicating the entry (–>) and exit (<–) for each function. It’s not that each function is invoked twice, it’s that each function logs two entries.
-p
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Thomas F. Divine
Sent: Friday, January 05, 2007 8:44 AM
To: Windows System Software Devs Interest List
Subject: RE: Re: [ntdev] Loading configuration for adapter {0854672E-C0FE-4D99-92A6-388A9D02C693}…
My guess is that you may not get an answer to this question because nobody cares.
If a DLL does its job correctly, then why should it care how many times it is called?
Thomas F. Divine
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of A P
Sent: Friday, January 05, 2007 10:49 AM
To: Windows System Software Devs Interest List
Subject: Re: Re: [ntdev] Loading configuration for adapter {0854672E-C0FE-4D99-92A6-388A9D02C693}…
hell man…do you understand c/c++?
I do apologise for the postg, i sincerely do, however, what I had meant was different.
I had copy pasted only a portion of the logs, which added to your confusion. Beg your pardon folks!
–>DllMain.
Reason: Attach.
<–DllMain.
–>DllGetClassObject.
–>CMuxNotify::CMuxNotify(Constructor).
<–CMuxNotify::CMuxNotify(Constructor).
–>CMuxNotify INetCfgNotifyGlobal::GetSupportedNotifications.
<–CMuxNotify INetCfgNotifyGlobal::GetSupportedNotifications(HRESULT = 0).
–>CMuxNotify INetCfgControl::Initialize.
–>CMuxNotify::HrLoadAdapterConfiguration.
Loading configuration for adapter {0854672E-C0FE-4D99-92A6-388A9D02C693}…
–>CMuxPhysicalAdapter::CMuxPhysicalAdapter(Constructor).
<–CMuxPhysicalAdapter::CMuxPhysicalAdapter(Constructor).
–>CMuxPhysicalAdapter::LoadConfiguration.
Loading configuration for miniport {648BEED3-347B-423B-A0BE-B00294D89927}…
–>CMuxVirtualMiniport::CMuxVirtualMiniport(Constructor).
<–CMuxVirtualMiniport::CMuxVirtualMiniport(Constructor).
–>CMuxVirtualMiniport::LoadConfiguration.
<–CMuxVirtualMiniport::LoadConfiguration(HRESULT = 0).
<–CMuxPhysicalAdapter::LoadConfiguration(HRESULT = 0).
<–CMuxNotify::HrLoadAdapterConfiguration(HRESULT = 0).
<–CMuxNotify INetCfgControl::Initialize(HRESULT = 0).
–>CMuxNotify::~CMuxNotify(Destructor).
–>CMuxPhysicalAdapter::~CMuxPhysicalAdapter(Destructor).
–>CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
<–CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
<–CMuxPhysicalAdapter::~CMuxPhysicalAdapter(Destructor).
<–CMuxNotify::~CMuxNotify(Destructor).
–>DllCanUnloadNow.
–>DllCanUnloadNow(HRESULT = 0).
–>DllGetClassObject.
–>CMuxNotify::CMuxNotify(Constructor).
<–CMuxNotify::CMuxNotify(Constructor).
–>CMuxNotify INetCfgNotifyGlobal::GetSupportedNotifications.
<–CMuxNotify INetCfgNotifyGlobal::GetSupportedNotifications(HRESULT = 0).
–>CMuxNotify INetCfgControl::Initialize.
–>CMuxNotify::HrLoadAdapterConfiguration.
Loading configuration for adapter {0854672E-C0FE-4D99-92A6-388A9D02C693}…
–>CMuxPhysicalAdapter::CMuxPhysicalAdapter(Constructor).
<–CMuxPhysicalAdapter::CMuxPhysicalAdapter(Constructor).
–>CMuxPhysicalAdapter::LoadConfiguration.
Loading configuration for miniport {648BEED3-347B-423B-A0BE-B00294D89927}…
–>CMuxVirtualMiniport::CMuxVirtualMiniport(Constructor).
<–CMuxVirtualMiniport::CMuxVirtualMiniport(Constructor).
–>CMuxVirtualMiniport::LoadConfiguration.
<–CMuxVirtualMiniport::LoadConfiguration(HRESULT = 0).
<–CMuxPhysicalAdapter::LoadConfiguration(HRESULT = 0).
<–CMuxNotify::HrLoadAdapterConfiguration(HRESULT = 0).
<–CMuxNotify INetCfgControl::Initialize(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::QueryPropertyUi
<–CMuxNotify INetCfgPropertyUi::QueryPropertyUi(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::SetContext
<–CMuxNotify INetCfgPropertyUi::SetContext(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::MergePropPages
<–CMuxNotify INetCfgPropertyUi::MergePropPages(HRESULT = 0).
–>CMuxNotify::OnCancel
<–CMuxNotify::OnCancel
–>CMuxNotify INetCfgPropertyUi::CancelProperties
<–CMuxNotify INetCfgPropertyUi::CancelProperties(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::SetContext
<–CMuxNotify INetCfgPropertyUi::SetContext(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::QueryPropertyUi
<–CMuxNotify INetCfgPropertyUi::QueryPropertyUi(HRESULT = 0).
–>CMuxNotify INetCfgPropertyUi::QueryPropertyUi
<–CMuxNotify INetCfgPropertyUi::QueryPropertyUi(HRESULT = 0).
–>CMuxNotify::~CMuxNotify(Destructor).
–>CMuxPhysicalAdapter::~CMuxPhysicalAdapter(Destructor).
–>CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
<–CMuxVirtualMiniport::~CMuxVirtualMiniport(Destructor).
<–CMuxPhysicalAdapter::~CMuxPhysicalAdapter(Destructor).
<–CMuxNotify::~CMuxNotify(Destructor).
–>DllCanUnloadNow.
–>DllCanUnloadNow(HRESULT = 0).
Look at this log, it clearly shows th functions called twice.
Can someone tell y it is being called trice?
A P
— Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256 To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer