구성 요소에 대한 바인딩 변경
네트워크 구성 하위 시스템은 항상 알림 개체의 네트워크 구성 요소에 영향을 주는 바인딩의 변경 내용에 대해 알림 개체에 알립니다. 하위 시스템은 notify 개체의 INetCfgComponentNotifyBinding::NotifyBindingPath 메서드를 호출하고 변경과 관련된 바인딩 경로의 INetCfgBindingPath 인터페이스에 대한 포인터와 함께 변경 사항을 지정하는 값을 전달합니다. 하위 시스템이 NCN_DISABLE 전달하여 알림 개체의 네트워크 구성 요소가 특정 네트워크 카드 공유하는 바인딩 경로를 사용하지 않도록 설정하는 경우 notify 개체는 다음 코드와 같이 다른 네트워크 카드 바인딩을 활성화할 수 있습니다.
HRESULT CSample::NotifyBindingPath(DWORD dwChangeFlag,
INetCfgBindingPath* pncbp1)
{
INetCfgComponent *pnccLow;
INetCfgComponentBindings *pncbind;
IEnumNetCfgBindingPath *penumncbp;
INetCfgBindingPath *pncbp2;
IEnumNetCfgBindingInterface *penumncbi;
INetCfgBindingInterface *pncbi;
DWORD dwFlags = EBP_BELOW;
ULONG celt = 1; // Request one enumeration element.
HRESULT hr = S_OK;
// Retrieve bindings for the notify object's component (m_pncc)
hr = m_pncc->QueryInterface(IID_INetCfgComponentBindings,
(LPVOID*)&pncbind);
// Determine if notification is about disabling a binding path.
if (SUCCEEDED(hr) && (NCN_DISABLE & dwChangeFlag)) {
// Retrieve enumerator for binding paths for the component.
hr = pncbind->EnumBindingPaths(dwFlags, &penumncbp);
// Reset the sequence and retrieve a binding path.
hr = penumncbp->Reset();
hr = penumncbp->Next(celt, &pncbp2, NULL);
// Ensure the binding path is different.
do {
if (pncbp1 != pncbp2) break;
hr = penumncbp->Skip(celt); // skip one element
hr = penumncbp->Next(celt, &pncbp2, NULL);
} while (SUCCEEDED(hr));
if (SUCCEEDED(hr)) {
// Retrieve enumerator for interfaces of the binding path.
hr = pncbp2->EnumBindingInterfaces(&penumncbi);
// Retrieve a binding interface for the binding path.
hr = penumncbi->Next(celt, &pncbi, NULL);
// Retrieve the lower network component.
hr = pncbi->GetLowerComponent(&pnccLow);
// If the component is a physical network card and binding
// is currently disabled, enable binding.
DWORD dwcc;
hr = pnccLow->GetCharacteristics(&dwcc);
if (SUCCEEDED(hr) && (dwcc & NCF_PHYSICAL)) {
hr = pncbp2->IsEnabled(); // S_FALSE for disabled
if (hr == S_FALSE) hr = pncbp2->Enable(TRUE);
}
}
else return hr;
}
return hr;
}