다음을 통해 공유


라이선스 및 IClassFactory2

클래스 개체의 IClassFactory 인터페이스는 COM의 기본 개체 만들기 메커니즘을 제공합니다. 서버는 IClassFactory를 사용하여 컴퓨터별로 개체 만들기를 제어할 수 있습니다. IClassFactory::CreateInstance 메서드의 구현은 컴퓨터 라이선스의 존재 여부에 따라 개체 생성을 허용하거나 허용하지 않습니다. 컴퓨터 라이선스는 소프트웨어가 공급업체의 설치 디스크와 같은 유효한 원본에서 설치되었음을 나타내기 위해 컴퓨터에 있는 애플리케이션과는 별개인 정보입니다. 컴퓨터 라이선스가 없으면 서버에서 개체 생성을 허용하지 않을 수 있습니다. 컴퓨터 라이선스는 라이선스 정보가 소프트웨어와 함께 복사되지 않고 복사본을 받는 컴퓨터가 라이선스가 없기 때문에 사용자가 한 컴퓨터에서 다른 컴퓨터로 소프트웨어를 복사하려고 시도하는 경우 불법 복제를 방지합니다.

그러나 구성 요소 소프트웨어 업계에서 공급업체는 라이선스에 대한 보다 세부적인 제어 수준이 필요합니다. 공급업체는 컴퓨터 라이선스 제어 외에도 일부 클라이언트가 구성 요소 개체를 만들 수 있도록 허용하고 다른 클라이언트는 동일한 기능을 거부해야 합니다. 이렇게 하려면 클라이언트 애플리케이션이 아직 개발 중인 동안 클라이언트 애플리케이션이 구성 요소에서 라이선스 키를 가져와야 합니다. 클라이언트 애플리케이션은 런타임에 라이선스 키를 사용하여 허가되지 않은 머신에 개체를 만듭니다.

예를 들어 공급업체가 개발자에게 컨트롤 라이브러리를 제공하는 경우 라이브러리를 구매하는 개발자는 개발 머신에서 개체를 만들 수 있는 전체 컴퓨터 라이선스를 갖게 됩니다. 그런 다음 개발자는 하나 이상의 컨트롤을 통합하는 라이선스가 부여된 머신에서 클라이언트 애플리케이션을 빌드할 수 있습니다. 결과 클라이언트 애플리케이션이 다른 컴퓨터에서 실행되는 경우 해당 컴퓨터가 원래 공급업체의 컨트롤에 대한 컴퓨터 라이선스가 없더라도 클라이언트 애플리케이션에서 사용되는 컨트롤을 다른 컴퓨터에 만들어야 합니다.

IClassFactory2 인터페이스는 이 수준의 제어를 제공합니다. 지정된 구성 요소에 대한 키 기반 라이선스를 허용하려면 해당 구성 요소에 대한 클래스 팩터리 개체에 IClassFactory2 를 구현합니다. IClassFactory2IClassFactory에서 파생되므로 IClassFactory2를 구현하면 클래스 팩터리 개체가 기본 COM 요구 사항을 충족합니다.

라이선스가 부여된 구성 요소를 클라이언트 애플리케이션에 통합하려면 IClassFactory2에서 다음 방법을 사용합니다.

  • GetLicInfo 메서드는 클래스 팩터리의 라이선스 동작을 설명하는 정보로 LICINFO 구조를 채웁니다. 예를 들어 fRunTimeKeyAvail 멤버가 TRUE인 경우 클래스 팩터리는 런타임 라이선스에 대한 라이선스 키를 제공할 수 있습니다.
  • RequestLicKey 메서드는 구성 요소에 대한 라이선스 키를 제공합니다. 클라이언트가 이 메서드를 호출할 때 컴퓨터 라이선스를 사용할 수 있어야 합니다.
  • 라이선스 키 매개 변수(BSTRÂ bstrKey)가 유효한 경우 CreateInstanceLic 메서드는 라이선스가 부여된 구성 요소의 instance 만듭니다.

참고

형식 정보에서 구성 요소는 라이선스가 부여된 특성을 사용하여 IClassFactory2를 통한 라이선스를 지원하는 coclass를 표시합니다.

 

먼저 라이선스가 부여된 구성 요소의 클라이언트이기도 한 별도의 개발 도구가 필요합니다. 이 도구의 목적은 런타임 라이선스 키를 가져와 클라이언트 애플리케이션에 저장하는 것입니다. 이 도구는 구성 요소에 대한 컴퓨터 라이선스가 있는 컴퓨터에서만 실행됩니다. 이 도구는 GetLicInfoRequestLicKey 메서드를 호출하여 런타임 라이선스 키를 가져온 다음 클라이언트 애플리케이션에 라이선스 키를 저장합니다. 예를 들어 개발 도구는 BSTR 라이선스 키가 포함된 헤더(.h) 파일을 만든 다음 클라이언트 애플리케이션에 해당 .h 파일을 포함할 수 있습니다.

클라이언트 애플리케이션 내에서 구성 요소를 인스턴스화하려면 먼저 IClassFactory::CreateInstance를 사용하여 개체를 직접 인스턴스화합니다. CreateInstance가 성공하면 두 번째 컴퓨터는 구성 요소에 대한 라이선스가 부여되고 개체는 언제든지 만들 수 있습니다. 반환 코드 CLASS_E_NOTLICENSED CreateInstance가 실패하는 경우 개체를 만드는 유일한 방법은 런타임 키를 CreateInstanceLic 메서드에 전달하는 것입니다. CreateInstanceLic 은 키를 확인하고 키가 유효한 경우 개체를 만듭니다.

이러한 방식으로 구성 요소(예: 컨트롤)로 빌드된 애플리케이션은 다른 라이선스가 없는 컴퓨터에서 실행할 수 있습니다. 런타임 라이선스가 포함된 클라이언트 애플리케이션만 해당 구성 요소 개체를 만들 수 있습니다.

IClassFactory2 인터페이스는 라이선스 체계의 유연성을 지원합니다. 예를 들어 서버 구현자는 추가 보안을 위해 구성 요소의 라이선스 키를 암호화할 수 있습니다. 서버 구현자는 다른 기능에 대해 다른 라이선스 키를 제공하여 개체의 기능 수준을 사용하거나 사용하지 않도록 설정할 수도 있습니다. 예를 들어 한 키는 기본 수준의 기능을 허용하는 반면 다른 키는 기본 및 고급 기능 등을 허용할 수 있습니다.

COM 서버 책임