建立音訊驅動程式物件
在使用者模式中,COM 物件是使用CoCreateInstance (之類的函式來建立,如Microsoft Windows SDK檔) 中所述,其中用戶端不會察覺如何設定物件所需的記憶體。 不過,在核心模式中,記憶體配置通常受到嚴格控制,因此需要建立不同的物件方法。
音訊驅動程式模型使用 COM 介面的概念,如 IUnknown 介面所定義。 不過,不需要音訊驅動程式才能存取登錄或使用進程內伺服器之類的機制。 不支援匯總時不需要迷你埠驅動程式。
依照慣例,用來建立特定類別物件的函式一律採用相同形式:
NTSTATUS CreateMyObject(
OUT PUNKNOWN *Unknown,
IN REFGUID ClassId,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType
);
參數
未知
IUnknown介面指標的指標。 函式會透過 Unknown輸出新建立物件的參考。
ClassId
指定以傳址方式傳遞的類別 GUID。 只有當 函式建立多個類別的物件時,才會使用此參數。 否則,它會設定為 Null。
OuterUnknown
指定用來匯總新物件的 IUnknown 介面。 此參數可以設定為 Null ,表示不需要任何匯總。
PoolType
指定要設定物件的記憶體集區類型, (請參閱 POOL_TYPE) 。
前三個參數與 COM CoCreateInstance 函式的參數相同。 如需此類型的建立函式範例,請參閱 Microsoft Windows Driver Kit (WDK) Fmsynth 範例音訊驅動程式中的 CreateMiniportMidiFM 函式。
另一個慣例是提供類別的新Xxx 函式。 這類函式可讓您輕鬆地具現化 (建立和初始化物件) ,如下列範例所示:
NTSTATUS NewMyObject(
OUT PMYINTERFACE *InterfacePointer,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
// ...more parameters
);
NewMyObject 函式會建立並初始化物件,然後將指標傳回介面。 因為初始化參數是類別特定的,所以是 NewXxx 函式的原型。 NewXxx 函式可讓您方便存取 物件的建構函式。
如需此類型的 NewXxx 函式範例,請參閱 PcNewDmaChannel。