//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: // // Contents: Common routines for dealing with INetCfg interfaces. // // Notes: // // Author: shaunco 24 Mar 1997 // //---------------------------------------------------------------------------- #pragma once #ifndef _NCNETCFG_H_ #define _NCNETCFG_H_ #include "ncbase.h" #include "nccom.h" #include "ncstring.h" #include "netcfgp.h" #include "netcfgx.h" BOOL FClassGuidFromComponentId ( PCWSTR pszComponentId, const GUID** ppguidClass); BOOL FInfFileFromComponentId ( PCWSTR pszComponentId, PWSTR pszInfFile); //+--------------------------------------------------------------------------- // // Function: FEqualComponentId // // Purpose: Compares 2 components IDs to see if they are equal. // // Arguments: // pszComp1 [in] Name of first component ID. // pszComp2 [in] Name of second compoennt ID. // // Returns: TRUE if component IDs are equal, FALSE if not. // // Author: danielwe 9 Apr 1997 // // Notes: Current comparison is case-INSENSITIVE // inline FEqualComponentId ( PCWSTR pszComp1, PCWSTR pszComp2) { return !lstrcmpiW(pszComp1, pszComp2); } BOOL FGetInstanceGuidOfComponentFromAnswerFileMap ( IN PCWSTR pszComponentId, OUT GUID* pguid); BOOL FGetInstanceGuidOfComponentInAnswerFile ( PCWSTR pszComponentId, INetCfg* pnc, LPGUID pguid); enum FIBN_FLAGS { FIBN_NORMAL = 0x00000000, FIBN_PREFIX = 0x00000001 }; BOOL FIsBindingName ( PCWSTR pszName, DWORD dwFlags, INetCfgBindingInterface* pncbi); BOOL FIsComponentId ( PCWSTR pszComponentId, INetCfgComponent* pncc); struct NETWORK_INSTALL_PARAMS { DWORD dwSetupFlags; DWORD dwUpgradeFromBuildNo; PCWSTR pszAnswerFile; PCWSTR pszAnswerSection; }; struct FILTER_INSTALL_PARAMS { void * pnccAdapter; void * pnccFilter; tstring * pstrInterface; }; enum ARA_FLAGS { ARA_ADD = 0x01, ARA_REMOVE = 0x02, }; HRESULT HrAddOrRemoveAdapter ( INetCfg* pnc, PCWSTR pszComponentId, DWORD dwFlags, OBO_TOKEN* pOboToken, UINT cInstances, INetCfgComponent** ppncc); HRESULT HrCreateAndInitializeINetCfg ( BOOL* pfInitCom, INetCfg** ppnc, BOOL fGetWriteLock, DWORD cmsTimeout, PCWSTR pszwClientDesc, PWSTR* ppszwClientDesc); HRESULT HrFindAndRemoveAllInstancesOfAdapter ( INetCfg* pnc, PCWSTR pszwComponentId); HRESULT HrFindAndRemoveAllInstancesOfAdapters ( INetCfg* pnc, ULONG cComponents, const PCWSTR* apszwComponentId); HRESULT HrFindAndRemoveComponent ( INetCfg* pnc, const GUID* pguidClass, PCWSTR pszwComponentId, OBO_TOKEN* pOboToken); HRESULT HrFindAndRemoveComponents ( INetCfg* pnc, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId, OBO_TOKEN* pOboToken); HRESULT HrFindAndRemoveComponentsOboComponent ( INetCfg* pnc, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId, INetCfgComponent* pnccObo); HRESULT HrFindAndRemoveComponentsOboUser ( INetCfg* pnc, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId); HRESULT HrFindComponents ( INetCfg* pnc, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId, INetCfgComponent** apncc); HRESULT HrGetBindingInterfaceComponents ( INetCfgBindingInterface* pncbi, INetCfgComponent** ppnccUpper, INetCfgComponent** ppnccLower); HRESULT HrGetLastComponentAndInterface ( INetCfgBindingPath* pncbp, INetCfgComponent** ppncc, PWSTR* ppszwInterfaceName); HRESULT HrInstallComponent ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, const GUID* pguidClass, PCWSTR pszwComponentId, OBO_TOKEN* pOboToken, INetCfgComponent** ppncc); HRESULT HrInstallComponents ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId, OBO_TOKEN* pOboToken); HRESULT HrInstallComponentsOboComponent ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId, INetCfgComponent* pnccObo); HRESULT HrInstallComponentsOboUser ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, ULONG cComponents, const GUID** apguidClass, const PCWSTR* apszwComponentId); HRESULT HrInstallComponentOboComponent ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, const GUID& rguidClass, PCWSTR pszwComponentId, INetCfgComponent* pnccObo, INetCfgComponent** ppncc); HRESULT HrInstallComponentOboSoftware( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, const GUID& rguidClass, PCWSTR pszwComponentId, PCWSTR pszwManufacturer, PCWSTR pszwProduct, PCWSTR pszwDisplayName, INetCfgComponent** ppncc); HRESULT HrInstallComponentOboUser ( INetCfg* pnc, const NETWORK_INSTALL_PARAMS* pnip, const GUID& rguidClass, PCWSTR pszwComponentId, INetCfgComponent** ppncc); HRESULT HrInstallRasIfNeeded ( INetCfg* pnc); HRESULT HrIsLanCapableAdapter ( INetCfgComponent* pncc); HRESULT HrIsLanCapableProtocol ( INetCfgComponent* pncc); HRESULT HrQueryNotifyObject ( INetCfgComponent* pncc, REFIID riid, VOID** ppvObject); HRESULT HrRemoveComponent ( INetCfg* pnc, INetCfgComponent* pnccToRemove, OBO_TOKEN* pOboToken, PWSTR * pmszwRefs); HRESULT HrRemoveComponentOboComponent ( INetCfg* pnc, const GUID& rguidClass, PCWSTR pszwComponentId, INetCfgComponent* pnccObo); HRESULT HrRemoveComponentOboSoftware ( INetCfg* pnc, const GUID& rguidClass, PCWSTR pszwComponentId, PCWSTR pszwManufacturer, PCWSTR pszwProduct, PCWSTR pszwDisplayName); HRESULT HrRemoveComponentOboUser ( INetCfg* pnc, const GUID& rguidClass, PCWSTR pszwComponentId); HRESULT HrUninitializeAndReleaseINetCfg ( BOOL fUninitCom, INetCfg* pnc, BOOL fHasLock = FALSE); HRESULT HrUninitializeAndUnlockINetCfg ( INetCfg* pnc); HRESULT HrRunWinsock2Migration(); HRESULT HrNcRemoveComponent(INetCfg* pinc, const GUID& guidClass, PCWSTR pszInstanceGuid); EXTERN_C HRESULT WINAPI HrDiAddComponentToINetCfg( IN INetCfg* pINetCfg, IN INetCfgInternalSetup* pInternalSetup, IN const NIQ_INFO* pInfo); EXTERN_C VOID WINAPI UpdateLanaConfigUsingAnswerfile ( IN PCWSTR pszAnswerFile, IN PCWSTR pszSection); HRESULT HrNcRegCreateComponentNetworkKeyForDevice(const GUID& guidClass, HKEY* phkey, PCWSTR pszInstanceGuid, PCWSTR pszPnpId); HRESULT HrNcRegCreateComponentNetworkKey(const GUID& guidClass, PHKEY phkeyComponent, PCWSTR pszInstanceGuid); HRESULT HrNcNotifyINetCfgAndConnectionWizardOfInstallation( IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN PCWSTR pszPnpId, IN const GUID& InstanceGuid, IN NC_INSTALL_TYPE eType); HRESULT HrNcNotifyINetCfgAndConnectionWizardOfInstallation(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, PCWSTR pszwPnpId, PCWSTR pszInstanceGuid, NC_INSTALL_TYPE eType); HRESULT HrNcNotifyINetCfgOfRemoval(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, PCWSTR pszwInstanceGuid); struct COMPONENT_INFO { PCWSTR pszComponentId; const GUID * pguidClass; PCWSTR pszInfFile; }; extern const COMPONENT_INFO* PComponentInfoFromComponentId ( PCWSTR pszComponentId); //------------------------------------------------------------------------ // CIterNetCfgBindingPath - iterator for IEnumNetCfgBindingPath // // This class is is a simple wrapper around CIEnumIter with a call // to INetCfgComponent::EnumBindingPaths to get the enumerator. // class CIterNetCfgBindingPath : public CIEnumIter { public: NOTHROW CIterNetCfgBindingPath (INetCfgComponent* pncc); NOTHROW ~CIterNetCfgBindingPath () { ReleaseObj(m_pebp); } protected: IEnumNetCfgBindingPath* m_pebp; }; //------------------------------------------------------------------------ // CIterNetCfgUpperBindingPath - iterator for IEnumNetCfgBindingPath // // This class is is a simple wrapper around CIEnumIter with a call // to INetCfgComponent::EnumUpperBindingPaths to get the enumerator. // class CIterNetCfgUpperBindingPath : public CIEnumIter { public: NOTHROW CIterNetCfgUpperBindingPath (INetCfgComponent* pncc); NOTHROW ~CIterNetCfgUpperBindingPath () { ReleaseObj(m_pebp); } protected: IEnumNetCfgBindingPath* m_pebp; }; //------------------------------------------------------------------------ // CIterNetCfgBindingInterface - iterator for IEnumNetCfgBindingInterface // // This class is is a simple wrapper around CIEnumIter with a call // to INetCfgBindingPath::EnumBindingInterfaces to get the enumerator. // class CIterNetCfgBindingInterface : public CIEnumIter { public: NOTHROW CIterNetCfgBindingInterface (INetCfgBindingPath* pncbp); NOTHROW ~CIterNetCfgBindingInterface () { ReleaseObj(m_pebi); } protected: IEnumNetCfgBindingInterface* m_pebi; }; //------------------------------------------------------------------------ // CIterNetCfgComponent - iterator for IEnumNetCfgComponent // // This class is is a simple wrapper around CIEnumIter with a call // to INetCfgClass::EnumComponents to get the enumerator. // class CIterNetCfgComponent : public CIEnumIter { public: NOTHROW CIterNetCfgComponent (INetCfg* pnc, const GUID* pguid); NOTHROW CIterNetCfgComponent (INetCfgClass* pncclass); NOTHROW ~CIterNetCfgComponent () { ReleaseObj(m_pec); } protected: IEnumNetCfgComponent* m_pec; }; inline NOTHROW CIterNetCfgBindingPath::CIterNetCfgBindingPath(INetCfgComponent* pncc) : CIEnumIter (NULL) { AssertH(pncc); INetCfgComponentBindings* pnccb; // If EnumBindingPaths() fails, make sure ReleaseObj() won't die. m_pebp = NULL; m_hrLast = pncc->QueryInterface( IID_INetCfgComponentBindings, reinterpret_cast(&pnccb) ); if (SUCCEEDED(m_hrLast)) { // Get the enumerator and set it for the base class. // Important to set m_hrLast so that if this fails, we'll also // fail any subsequent calls to HrNext. m_hrLast = pnccb->EnumBindingPaths(EBP_BELOW, &m_pebp); if (SUCCEEDED(m_hrLast)) { SetEnumerator(m_pebp); } ReleaseObj( pnccb ); } TraceHr (ttidError, FAL, m_hrLast, FALSE, "CIterNetCfgBindingPath::CIterNetCfgBindingPath"); } inline NOTHROW CIterNetCfgUpperBindingPath::CIterNetCfgUpperBindingPath(INetCfgComponent* pncc) : CIEnumIter (NULL) { AssertH(pncc); INetCfgComponentBindings* pnccb; // If EnumBindingPaths() fails, make sure ReleaseObj() won't die. m_pebp = NULL; m_hrLast = pncc->QueryInterface( IID_INetCfgComponentBindings, reinterpret_cast(&pnccb) ); if (SUCCEEDED(m_hrLast)) { // Get the enumerator and set it for the base class. // Important to set m_hrLast so that if this fails, we'll also // fail any subsequent calls to HrNext. m_hrLast = pnccb->EnumBindingPaths(EBP_ABOVE, &m_pebp); if (SUCCEEDED(m_hrLast)) { SetEnumerator(m_pebp); } ReleaseObj( pnccb ); } TraceHr (ttidError, FAL, m_hrLast, FALSE, "CIterNetCfgUpperBindingPath::CIterNetCfgUpperBindingPath"); } inline NOTHROW CIterNetCfgBindingInterface::CIterNetCfgBindingInterface(INetCfgBindingPath* pncbp) : CIEnumIter (NULL) { AssertH(pncbp); // If EnumBindingInterfaces() fails, make sure ReleaseObj() won't die. m_pebi = NULL; // Get the enumerator and set it for the base class. // Important to set m_hrLast so that if this fails, we'll also // fail any subsequent calls to HrNext. m_hrLast = pncbp->EnumBindingInterfaces(&m_pebi); if (SUCCEEDED(m_hrLast)) { SetEnumerator(m_pebi); } TraceHr (ttidError, FAL, m_hrLast, FALSE, "CIterNetCfgBindingInterface::CIterNetCfgBindingInterface"); } inline NOTHROW CIterNetCfgComponent::CIterNetCfgComponent(INetCfg* pnc, const GUID* pguid) : CIEnumIter (NULL) { AssertH(pnc); // If EnumComponents() fails, make sure ReleaseObj() won't die. m_pec = NULL; INetCfgClass* pncclass; m_hrLast = pnc->QueryNetCfgClass(pguid, IID_INetCfgClass, reinterpret_cast(&pncclass)); if (SUCCEEDED(m_hrLast)) { // Get the enumerator and set it for the base class. // Important to set m_hrLast so that if this fails, we'll also // fail any subsequent calls to HrNext. m_hrLast = pncclass->EnumComponents(&m_pec); if (SUCCEEDED(m_hrLast)) { SetEnumerator(m_pec); } ReleaseObj(pncclass); } TraceHr (ttidError, FAL, m_hrLast, FALSE, "CIterNetCfgComponent::CIterNetCfgComponent"); } inline NOTHROW CIterNetCfgComponent::CIterNetCfgComponent(INetCfgClass* pncclass) : CIEnumIter (NULL) { AssertH(pncclass); // If EnumComponents() fails, make sure ReleaseObj() won't die. m_pec = NULL; // Get the enumerator and set it for the base class. // Important to set m_hrLast so that if this fails, we'll also // fail any subsequent calls to HrNext. m_hrLast = pncclass->EnumComponents(&m_pec); if (SUCCEEDED(m_hrLast)) { SetEnumerator(m_pec); } TraceHr (ttidError, FAL, m_hrLast, FALSE, "CIterNetCfgComponent::CIterNetCfgComponent"); } #endif // _NCNETCFG_H_