在使用者模式中,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 驅動程式套件 (WDK) 中 Fmsynth 範例音訊驅動程式中的 CreateMiniportMidiFM 函式。
另一個慣例是提供 類別的新Xxx 函式。 這類函式提供簡單的方式來具現化 (建立和初始化) 物件,如下列範例所示:
NTSTATUS NewMyObject(
OUT PMYINTERFACE *InterfacePointer,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
// ...more parameters
);
NewMyObject 函式會建立並初始化對象,然後將指標傳回介面。 因為初始化參數是類別特定的,所以 NewXxx 函式的原型也是如此。 NewXxx 函式可讓您方便存取 物件的建構函式。
如需此類型之 NewXxx 函式的範例,請參閱 PcNewDmaChannel。