다음을 통해 공유


오디오 드라이버 개체 만들기

사용자 모드에서 COM 개체는 CoCreateInstance(Microsoft Windows SDK 설명서에 설명되어 있음)와 같은 함수를 사용하여 만들어집니다. 여기서 클라이언트는 개체에 필요한 메모리가 할당되는 방식을 인식하지 못합니다. 그러나 커널 모드에서는 메모리 할당이 엄격하게 제어되는 경향이 있는 경우 다른 개체 생성 방법이 필요합니다.

오디오 드라이버 모델은 IUnknown 인터페이스에 정의된 COM 인터페이스의 개념을 사용합니다. 그러나 오디오 드라이버는 레지스트리에 액세스하거나 프로세스 내 서버와 같은 메커니즘을 사용할 필요가 없습니다. 미니포트 드라이버는 집계를 지원할 필요가 없습니다.

규칙에 따라 개체의 특정 클래스를 만드는 데 사용되는 함수는 항상 동일한 형식을 사용합니다.

NTSTATUS CreateMyObject(
   OUT PUNKNOWN  *Unknown,
   IN REFGUID ClassId,
   IN PUNKNOWN OuterUnknown OPTIONAL,
   IN POOL_TYPE PoolType
 );

매개 변수

알려지지 않은
IUnknown 인터페이스에 대한 포인터에 대한 포인터입니다. 함수는 알 수 없음을 통해 새로 만든 개체에 대한 참조를 출력합니다.

Classid
참조로 전달되는 클래스 GUID를 지정합니다. 이 매개 변수는 함수가 여러 클래스의 개체를 만드는 경우에만 사용됩니다. 그렇지 않으면 NULL로 설정됩니다.

OuterUnknown
새 개체를 집계하기 위한 IUnknown 인터페이스를 지정합니다. 이 매개 변수를 NULL 로 설정하여 집계가 필요하지 않음을 나타낼 수 있습니다.

PoolType
개체를 할당할 메모리 풀의 형식을 지정합니다( POOL_TYPE 참조).

처음 세 개의 매개 변수는 COM CoCreateInstance 함수의 매개 변수와 동일합니다. 이 형식의 생성 함수 예제는 Microsoft WDK(Windows 드라이버 키트)의 Fmsynth 샘플 오디오 드라이버에서 CreateMiniportMidiFM 함수를 참조하세요.

또 다른 규칙은 클래스에 대해 새Xxx 함수를 제공하는 것입니다. 이러한 함수는 다음 예제와 같이 개체를 쉽게 인스턴스화(만들고 초기화)하는 방법을 제공합니다.

NTSTATUS NewMyObject(
 OUT PMYINTERFACE  *InterfacePointer,
 IN PUNKNOWN  OuterUnknown OPTIONAL,
 IN POOL_TYPE  PoolType,
  // ...more parameters
 );

NewMyObject 함수는 개체를 만들고 초기화한 다음 포인터를 인터페이스에 다시 전달합니다. 초기화 매개 변수는 클래스별로 달라지므로 NewXxx 함수의 프로토타입도 마찬가지입니다. NewXxx 함수는 개체의 생성자에 편리하게 액세스할 수 있도록 합니다.

이 형식의 새Xxx 함수 예제는 PcNewDmaChannel을 참조하세요.