시스템/윈도우

Distributed CommonObject Model 및 DCE-RPC의 천재와 공용

cyanhe_wh 2021. 1. 13. 20:09
반응형

Distributed Common Object Model (DCOM), DCE-RPC, NT의 스레딩, 프로세스 아키텍처, NT의 인증 토큰은

모든 상호연결되어 있다.

COM이 Unix와 다른점을 이해하기 위해서는 COM의 전반적인 철학을 먼저 이해하는 것이 좋다.

소프트웨어에 대한 마이크로소프트의 입장은 항상 돈을 위해 바이너리 패키지를 배포하고

이를 지원하는 경제를 구축하는 것이었다.

따라서, 모든 MS 소프트웨어 아키텍처는 이 모델을 지원한다.

여러 공급 업체에서 타사 COM 모듈을 구입하여 디렉터리 구조에 넣은 다음

VB 스크립트를 사용하여 서로 연결함으로써 상당히 복잡한 응용 프로그램을 완전히 구축할 수 있다.

COM 개체는 COM이 지원하는 모든 언어로 작성될 수 있으며, 원활하게 상호운용 된다.

대부분의 COM의 특이성은 자연스러운 설계 결정으로 나타난다.

예를 들어 C++의 정수는 VB의 정수가 아닐 수 있다.

COM에 대해 자세히 알아보려면 일반적인 IDL (Interface Description Language) 파일을 살펴보아야한다.

나중에 알 수 있는 DCOM IDL파일을 사용한다.

[ uuid(e33c0cc4-0482-101a-bc0c-02608c6ba218),
version(1.0),
implicit_handle(handle_t rpc_binding)
] interface ???
{
typedef struct {
TYPE_2 element_1;
TYPE_3 element_2;
} TYPE_1;

short Function_00(
[in] long element_9,
[in] [unique] [string] wchar_t *element_10,
[in] [unique] TYPE_1 *element_11,
[in] [unique] TYPE_1 *element_12,
[in] [unique] TYPE_2 *element_13,
[in] long element_14,
[in] long element_15,
[out] [context_handle] void *element_16
);

여기에서 정의한 내용은 C++ 클래스의 헤더 파일과 유사하다.

이는 단순히 해당 UUID에 의해 정의된 특정 인터페이스의 특정 함수에 대한 인수 및 반환 값이라고 말한다.

고유한 모든 이름은 COM의 GUID이다.

이 128 bit 숫자는 전역적으로 고유해야한다. 즉, 하나만 존재!

특정 UUID에 대한 참조를 볼 떄마다 이 정확한 인터페이스에 대해 이야기하고 있다.

COM 개체에 대한 인터페이스 설명은 임의로 복잡할 수 있다.

언어에 대한 컴파일러(and COM 지원)는 IDL이 언어를 표현해야하는 형식으로 지정하는한 변환할 수 있는

약간의 코드를 생성해야한다.

문자, 배열, 배열과 함께 저장된 포인터, 다른 배열이있는 구조 등도 마찬가지이다.

실제로 허용되는 속도를 유지하기 위해 여러가지 단축키를 사용할 수 있다.

long이 little-endian 순서로 32비트가 될 것이라고 말하면

C++에서 다른 C++ COM 개체 표현으로 변환하는 것은 간단하다.

COM 개체는 두 가지 방법으로 효출할 수 있다. 프로세스 공간에 DLL로 직접로드하거나 서비스

(SYSTEM으로 인해 실행되는 특수 프로세스인 Service Control Manager에 의해)로 시작할 수 있다.

 

다른 프로세스에서 COM 서버를 실행하면 훨씬 느리지만 프로세스가 안정적이고 더 안전해진다.

데이터 유형의 변환이 필요하지 않은 In-Process 호출은 동일한 시스템에서 다른 프로세스에서 COM 인터페이스를 호출하는 것보다 문자 그대로 1000배 더 빠르다.

동일한 시스템으로 이동하는 것은 일반적으로 동일한 네트워크에있는 시스템으로 이동하는 것보다 10배 이상 빠르다.

 

더 있음!!

반응형

'시스템 > 윈도우' 카테고리의 다른 글

Threading  (0) 2021.01.13
문자열 테이블  (0) 2019.09.12