#include #include "intflist.h" #include "tracing.h" #include "dialog.h" //----------------------------------------------------------------- // Dialog function to be called from within WZC when a significant // event happens (i.e. going into the failed state) DWORD WzcDlgNotify( PINTF_CONTEXT pIntfContext, PWZCDLG_DATA pDlgData) { DWORD dwErr = ERROR_SUCCESS; BSTR bsDlgData; GUID guidIntf; DbgPrint((TRC_TRACK, "[WzcDlgNotify(0x%p, 0x%p:%d)", pIntfContext, pDlgData, pDlgData->dwCode)); // prepare the BSTR data that goes with this dialog notification bsDlgData = SysAllocStringByteLen ((LPCSTR)pDlgData, sizeof(WZCDLG_DATA)); if (bsDlgData == NULL) dwErr = ERROR_NOT_ENOUGH_MEMORY; // send everything down the COM pipe now.. if (dwErr == ERROR_SUCCESS && SUCCEEDED(CLSIDFromString(pIntfContext->wszGuid, &guidIntf)) && SUCCEEDED(CoInitializeEx (NULL, COINIT_MULTITHREADED))) { INetConnectionRefresh *pNetman; if(SUCCEEDED(CoCreateInstance ( &CLSID_ConnectionManager, NULL, CLSCTX_ALL, &IID_INetConnectionRefresh, (LPVOID *)&pNetman))) { pNetman->lpVtbl->ShowBalloon(pNetman, &guidIntf, bsDlgData, NULL); // no message text pNetman->lpVtbl->Release(pNetman); } CoUninitialize (); } if (bsDlgData != NULL) SysFreeString (bsDlgData); DbgPrint((TRC_TRACK, "WzcDlgNotify]=%d", dwErr)); return dwErr; } //----------------------------------------------------------------- // Called from within WZC when the internal association state changes WzcNetmanNotify( PINTF_CONTEXT pIntfContext) { DWORD dwErr = ERROR_SUCCESS; GUID guidIntf; DbgPrint((TRC_TRACK, "[WzcNetmanNotify(0x%p)", pIntfContext)); // For now (WinXP client RTM), Zero Config should report to NETMAN only the // disconnected state. This is to fix bug #401130 which is NETSHELL displaying // the bogus SSID from the {SF} state, while the IP address is lost and until // the media disconnect is received (10 seconds later). // // Do notify NETMAN only in the case when the device is under WZC control, that is // when it supports the OIDs and WZC is acting on it. if ((pIntfContext->dwCtlFlags & INTFCTL_OIDSSUPP) && (pIntfContext->ncStatus == NCS_MEDIA_DISCONNECTED)) { // send everything down the COM pipe now.. if (SUCCEEDED(CLSIDFromString(pIntfContext->wszGuid, &guidIntf)) && SUCCEEDED(CoInitializeEx (NULL, COINIT_MULTITHREADED))) { INetConnectionRefresh *pNetman; if(SUCCEEDED(CoCreateInstance ( &CLSID_ConnectionManager, NULL, CLSCTX_ALL, &IID_INetConnectionRefresh, (LPVOID *)&pNetman))) { pNetman->lpVtbl->ConnectionStatusChanged(pNetman, &guidIntf, pIntfContext->ncStatus); pNetman->lpVtbl->Release(pNetman); } CoUninitialize (); } else { DbgAssert((FALSE,"Failed initializing COM pipe to NETMAN!")); dwErr = ERROR_GEN_FAILURE; } } DbgPrint((TRC_TRACK, "WzcNetmanNotify]=%d", dwErr)); return dwErr; }