다음을 통해 공유


컬렉션에서 개체 열거

참고

IAS(인터넷 인증 서비스)의 이름이 Windows Server 2008부터 NPS(네트워크 정책 서버)로 바뀌었습니다. 이 항목의 내용은 IAS 및 NPS 모두에 적용됩니다. 텍스트 전체에서 NPS는 원래 IAS라고 하는 버전을 포함하여 서비스의 모든 버전을 참조하는 데 사용됩니다.

 

다음 코드는 NPS 프로토콜 컬렉션의 프로토콜을 열거합니다.

   HRESULT hr;

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

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

   //
   // Retrieve the enumeration interface, IEnumVARIANT
   //
   CComPtr<IUnknown> pUnknownProtocol;
   hr = pIASProtocolsCollection->get__NewEnum(&pUnknownProtocol);
   if (FAILED(hr))
   {
      return hr;
   }

   CComPtr<IEnumVARIANT> pEnumProtocols;
   hr = pUnknownProtocol->QueryInterface(
      __uuidof(IEnumVARIANT), 
      (void **) &pEnumProtocols
   );
   if (FAILED(hr))
   {
      return hr;
   }

   //
   // Retrieve the first protocol from the collection
   //
   DWORD      dwRetrieved = 1;
   _variant_t vtProtocol;
   hr = pEnumProtocols->Next(1, &vtProtocol, &dwRetrieved);
   if (FAILED(hr))
   {
      return hr;
   }

   while (hr != S_FALSE) {
      // 
      // Retrieve the name of the protocol
      //
      CComPtr<ISdo> pLocalSdo;
      hr = vtProtocol.pdispVal->QueryInterface(
         __uuidof(ISdo), 
         (void**)&pLocalSdo
      );
      if (FAILED(hr))
      {
         return hr;
      }

      _variant_t vtName;
      hr = pLocalSdo->GetProperty(PROPERTY_SDO_NAME, &vtName);
      if (FAILED(hr))
      {
         return hr;
      }

      vtProtocol.Clear();
      vtName.Clear();

      //
      // Retrieve the next protocol from the collection
      //
      dwRetrieved = 1;
      hr = pEnumProtocols->Next(1, &vtProtocol, &dwRetrieved);
      if (FAILED(hr))
      {
         return hr;
      }
   }

설명

vtName 및 vtProtocol 변수는 _variant_t 형식입니다. _variant_t 개체는 VARIANT 데이터 형식을 캡슐화하거나 묶습니다. 클래스는 리소스 할당 및 할당 취소를 관리하고 VariantInitVariantClear 에 대한 함수 호출을 적절하게 수행합니다.

_variant_t

클라이언트 추가

IASCOMMONPROPERTIES

IEnumVARIANT

ISdo::GetProperty

서비스 SDO 검색

VariantClear

VariantInit

변형