Получение коллекции

Заметка

Служба проверки подлинности Интернета (IAS) была переименована в сервер политики сети (NPS) начиная с Windows Server 2008. Содержимое этого раздела относится как к IAS, так и к NPS. В тексте NPS используется для ссылки на все версии службы, включая версии, которые первоначально называются IAS.

 

Следующий код извлекает коллекцию клиентов для сервера политики сети.

// Retrieve the clients collection 
   HRESULT hr;
   CComPtr<ISdo>  pSdo;
   hr = pSdoServiceControl->QueryInterface(
      __uuidof(ISdo),
      (void**) &pSdo
   );
   if (FAILED(hr))
   {
      return hr;
   }

   //
   // First Retrieve the protocols collection
   //
   _variant_t  vtProtocolsCollection;
   hr = pSdo->GetProperty(
      PROPERTY_IAS_PROTOCOLS_COLLECTION,
      &vtProtocolsCollection
   );
   if (FAILED(hr))
   {
      return hr;
   }

   //
   // Get the ISdoCollection interface 
   // for the object.
   //
   CComPtr<ISdoCollection>  pProtocolsCollection;
   hr = vtProtocolsCollection.pdispVal->QueryInterface(
      __uuidof(ISdoCollection), 
      (void **) &pProtocolsCollection
   );
   if (FAILED(hr))
   {
      return hr;
   }

   //
   // Then retrieve the RADIUS protocol
   //
   CComPtr<IDispatch> pRadiusDispatch;
   _variant_t  vtProtocolName = L"Microsoft Radius Protocol";
   hr = pProtocolsCollection->Item(&vtProtocolName, &pRadiusDispatch);
   if (FAILED(hr))
   {
      return hr;
   }

   CComPtr<ISdo> pRadiusSdo;
   hr = pRadiusDispatch->QueryInterface(      
      __uuidof(ISdo), 
      (void **) &pRadiusSdo
   );

   if (FAILED(hr))
   {
      return hr;
   }

   //
   // Then retrieve the clients collection
   //
   _variant_t  vtClientsCollection;
   hr = pRadiusSdo->GetProperty(PROPERTY_RADIUS_CLIENTS_COLLECTION, &vtClientsCollection);
   if (FAILED(hr))
   {
      return hr;
   }

   CComPtr<ISdoCollection> pClientsCollection;
   hr = vtClientsCollection.pdispVal->QueryInterface(      
      __uuidof(ISdoCollection), 
      (void **) &pClientsCollection
   );

   if (FAILED(hr))
   {
      return hr;
   }

Замечания

Переменная pSdoServiceControl содержит указатель на объект данных сервера для NPS. Более подробную информацию см. в разделе «Извлечение службы SDO».

Переменная vtClientsCollection имеет тип _variant_t. Объект _variant_t инкапсулирует или заключает в себя тип данных VARIANT. Класс управляет выделением и освобождением ресурсов и вызывает функции VariantInit и VariantClear, когда это необходимо.

После вызова pSdo->GetProperty(), переменная vtProtocolsCollection указывает объект. Элемент pdispVal элемента vtProtocolsCollection содержит указатель на интерфейс IDispatch для объекта.

Приведенный выше пример кода можно адаптировать для получения других коллекций NPS, например коллекций обработчиков запросов NPS. Перечисление типа IASPROPERTIES включает значения, которые соответствуют доступным коллекциям NPS.

_variant_t

IASPROPERTIES

ISdo::GetProperty

ISdoCollection

извлечение службы SDO

VariantClear

VariantInit

ВАРИАНТ