Некоторые правила брандмауэра недоступны при использовании QueryInterface

Я пытаюсь найти конкретное правило в брандмауэре в C ++, используя приведенный ниже код,

HRESULT WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2)
{
HRESULT hr = S_OK;
hr = CoCreateInstance(
__uuidof(NetFwPolicy2),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(INetFwPolicy2),
(void**)ppNetFwPolicy2);
return hr;
}

int _tmain(int argc, _TCHAR* argv[])
{

CComVariant     var;
IUnknown        *pEnumerator;
BSTR            bstrName;
HRESULT         hrComInit = S_OK;
HRESULT         hr = S_OK;
ULONG           cFetched = 0;
IEnumVARIANT*   pVariant = NULL;
INetFwPolicy2   *pNetFwPolicy2 = NULL;
INetFwRules     *pFwRules = NULL;
INetFwRule      *pFwRule = NULL;

hrComInit = CoInitialize(NULL);
if (hrComInit != RPC_E_CHANGED_MODE)
if (FAILED(hrComInit))
goto Cleanup;hr = WFCOMInitialize(&pNetFwPolicy2);

hr = pNetFwPolicy2->get_Rules(&pFwRules);
if (FAILED(hr))
goto Cleanup;

pFwRules->get__NewEnum(&pEnumerator);
if (pEnumerator)
hr = pEnumerator->QueryInterface(__uuidof(IEnumVARIANT), (void **)&pVariant);

while (SUCCEEDED(hr) && hr != S_FALSE)
{
var.Clear();
hr = pVariant->Next(1, &var, &cFetched);

if (S_FALSE != hr)
{
if (SUCCEEDED(hr))
hr = var.ChangeType(VT_DISPATCH);

if (SUCCEEDED(hr))
hr = (V_DISPATCH(&var))->QueryInterface(__uuidof(INetFwRule3), reinterpret_cast<void**>(&pFwRule));

if (SUCCEEDED(hr))
if (SUCCEEDED(pFwRule->get_Name(&bstrName)))
if(!wcscmp(bstrName, L"Mail, Calendar, and People"))
CurrentProfilesBitMask++;
}
}

Cleanup:
if (pFwRule)
pFwRule->Release();
if (pNetFwPolicy2)
pNetFwPolicy2->Release();
if (SUCCEEDED(hrComInit))
CoUninitialize();

return 0;
}

Я могу найти правило по имени Mail, Calendar, and People в брандмауэре. Но используя QueryInterface это не доступно (то есть, if(!wcscmp(bstrName, L"Mail, Calendar, and People")) это провал для всех правил). QueryInterface успешен, но сравнение строк не совпадает. но правило в брандмауэре.

я пытался этот VBScript предоставляется в MSDN и результат такой же, как указано выше. Указанное правило не может быть найдено по коду VBScript или C ++.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]