📄 netcfgapi.cpp
字号:
if (S_OK == hr) {
//
// Get the component's class GUID.
//
hr = pncc->GetClassGuid( &guidClass );
if ( hr == S_OK ) {
//
// Get component's class reference.
//
hr = pnc->QueryNetCfgClass( &guidClass,
IID_INetCfgClass,
(void**)&pncClass );
if ( hr == S_OK ) {
//
// Get Setup reference.
//
hr = pncClass->QueryInterface( IID_INetCfgClassSetup,
(void**)&pncClassSetup );
if ( hr == S_OK ) {
hr = pncClassSetup->DeInstall( pncc,
&OboToken,
NULL);
if ( hr == S_OK ) {
//
// Apply the changes
//
hr = pnc->Apply();
}
ReleaseRef( pncClassSetup );
}
ReleaseRef( pncClass );
}
}
ReleaseRef( pncc );
}
return hr;
}
//
// Function: HrGetComponentEnum
//
// Purpose: Get network component enumerator reference.
//
// Arguments:
// pnc [in] Reference to INetCfg.
// pguidClass [in] Class GUID of the network component.
// ppencc [out] Enumerator reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetComponentEnum (INetCfg* pnc,
IN const GUID* pguidClass,
OUT IEnumNetCfgComponent **ppencc)
{
INetCfgClass *pncclass;
HRESULT hr;
*ppencc = NULL;
//
// Get the class reference.
//
hr = pnc->QueryNetCfgClass( pguidClass,
IID_INetCfgClass,
(PVOID *)&pncclass );
if ( hr == S_OK ) {
//
// Get the enumerator reference.
//
hr = pncclass->EnumComponents( ppencc );
//
// We don't need the class reference any more.
//
ReleaseRef( pncclass );
}
return hr;
}
//
// Function: HrGetFirstComponent
//
// Purpose: Enumerates the first network component.
//
// Arguments:
// pencc [in] Component enumerator reference.
// ppncc [out] Network component reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetFirstComponent (IN IEnumNetCfgComponent* pencc,
OUT INetCfgComponent **ppncc)
{
HRESULT hr;
ULONG ulCount;
*ppncc = NULL;
pencc->Reset();
hr = pencc->Next( 1,
ppncc,
&ulCount );
return hr;
}
//
// Function: HrGetNextComponent
//
// Purpose: Enumerate the next network component.
//
// Arguments:
// pencc [in] Component enumerator reference.
// ppncc [out] Network component reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes: The function behaves just like HrGetFirstComponent if
// it is called right after HrGetComponentEnum.
//
//
HRESULT HrGetNextComponent (IN IEnumNetCfgComponent* pencc,
OUT INetCfgComponent **ppncc)
{
HRESULT hr;
ULONG ulCount;
*ppncc = NULL;
hr = pencc->Next( 1,
ppncc,
&ulCount );
return hr;
}
//
// Function: HrGetBindingPathEnum
//
// Purpose: Get network component's binding path enumerator reference.
//
// Arguments:
// pncc [in] Network component reference.
// dwBindingType [in] EBP_ABOVE or EBP_BELOW.
// ppencbp [out] Enumerator reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetBindingPathEnum (IN INetCfgComponent *pncc,
IN DWORD dwBindingType,
OUT IEnumNetCfgBindingPath **ppencbp)
{
INetCfgComponentBindings *pnccb = NULL;
HRESULT hr;
*ppencbp = NULL;
//
// Get component's binding.
//
hr = pncc->QueryInterface( IID_INetCfgComponentBindings,
(PVOID *)&pnccb );
if ( hr == S_OK ) {
//
// Get binding path enumerator reference.
//
hr = pnccb->EnumBindingPaths( dwBindingType,
ppencbp );
ReleaseRef( pnccb );
}
return hr;
}
//
// Function: HrGetFirstBindingPath
//
// Purpose: Enumerates the first binding path.
//
// Arguments:
// pencc [in] Binding path enumerator reference.
// ppncc [out] Binding path reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetFirstBindingPath (IN IEnumNetCfgBindingPath *pencbp,
OUT INetCfgBindingPath **ppncbp)
{
ULONG ulCount;
HRESULT hr;
*ppncbp = NULL;
pencbp->Reset();
hr = pencbp->Next( 1,
ppncbp,
&ulCount );
return hr;
}
//
// Function: HrGetNextBindingPath
//
// Purpose: Enumerate the next binding path.
//
// Arguments:
// pencbp [in] Binding path enumerator reference.
// ppncbp [out] Binding path reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes: The function behaves just like HrGetFirstBindingPath if
// it is called right after HrGetBindingPathEnum.
//
//
HRESULT HrGetNextBindingPath (IN IEnumNetCfgBindingPath *pencbp,
OUT INetCfgBindingPath **ppncbp)
{
ULONG ulCount;
HRESULT hr;
*ppncbp = NULL;
hr = pencbp->Next( 1,
ppncbp,
&ulCount );
return hr;
}
//
// Function: HrGetBindingInterfaceEnum
//
// Purpose: Get binding interface enumerator reference.
//
// Arguments:
// pncbp [in] Binding path reference.
// ppencbp [out] Enumerator reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetBindingInterfaceEnum (IN INetCfgBindingPath *pncbp,
OUT IEnumNetCfgBindingInterface **ppencbi)
{
HRESULT hr;
*ppencbi = NULL;
hr = pncbp->EnumBindingInterfaces( ppencbi );
return hr;
}
//
// Function: HrGetFirstBindingInterface
//
// Purpose: Enumerates the first binding interface.
//
// Arguments:
// pencbi [in] Binding interface enumerator reference.
// ppncbi [out] Binding interface reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes:
//
HRESULT HrGetFirstBindingInterface (IN IEnumNetCfgBindingInterface *pencbi,
OUT INetCfgBindingInterface **ppncbi)
{
ULONG ulCount;
HRESULT hr;
*ppncbi = NULL;
pencbi->Reset();
hr = pencbi->Next( 1,
ppncbi,
&ulCount );
return hr;
}
//
// Function: HrGetNextBindingInterface
//
// Purpose: Enumerate the next binding interface.
//
// Arguments:
// pencbi [in] Binding interface enumerator reference.
// ppncbi [out] Binding interface reference.
//
// Returns: S_OK on sucess, otherwise an error code.
//
// Notes: The function behaves just like HrGetFirstBindingInterface if
// it is called right after HrGetBindingInterfaceEnum.
//
//
HRESULT HrGetNextBindingInterface (IN IEnumNetCfgBindingInterface *pencbi,
OUT INetCfgBindingInterface **ppncbi)
{
ULONG ulCount;
HRESULT hr;
*ppncbi = NULL;
hr = pencbi->Next( 1,
ppncbi,
&ulCount );
return hr;
}
//
// Function: ReleaseRef
//
// Purpose: Release reference.
//
// Arguments:
// punk [in] IUnknown reference to release.
//
// Returns: Reference count.
//
// Notes:
//
VOID ReleaseRef (IN IUnknown* punk)
{
if ( punk ) {
punk->Release();
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -