Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W trybie użytkownika obiekty COM są tworzone przy użyciu funkcji, takiej jak CoCreateInstance (opisanej w dokumentacji zestawu SDK systemu Microsoft Windows), gdzie klient nie wie, w jaki sposób jest przydzielana pamięć wymagana dla obiektu. Jednak w trybie jądra, w którym alokacja pamięci jest zwykle ściśle kontrolowana, konieczna jest inna metoda tworzenia obiektu.
Model sterownika audio używa koncepcji interfejsu COM zdefiniowanego przez interfejs IUnknown . Sterowniki audio nie są jednak wymagane do uzyskania dostępu do rejestru ani do korzystania z mechanizmów, takich jak serwery działające w procesie. Sterowniki Miniport nie są wymagane do obsługi agregacji.
Zgodnie z konwencją funkcja używana do tworzenia określonej klasy obiektów zawsze ma taką samą formę:
NTSTATUS CreateMyObject(
OUT PUNKNOWN *Unknown,
IN REFGUID ClassId,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType
);
parametry
Nieznany
Wskaźnik do wskaźnika do interfejsu IUnknown . Funkcja zwraca odwołanie do nowo utworzonego obiektu za pomocą polecenia Nieznany.
Identyfikator klasy
Określa identyfikator GUID klasy, który jest przekazywany przez referencję. Ten parametr jest używany tylko wtedy, gdy funkcja tworzy obiekty wielu klas. W przeciwnym razie jest ustawiony na NULL.
OuterUnknown
Określa interfejs IUnknown do agregowania nowego obiektu. Ten parametr można ustawić na wartość NULL , aby wskazać, że nie jest wymagana agregacja.
Typ puli
Określa typ puli pamięci, z której ma zostać przydzielony obiekt (zobacz POOL_TYPE).
Pierwsze trzy parametry są identyczne z parametrami funkcji COM CoCreateInstance . Aby zapoznać się z przykładem funkcji tworzenia tego typu, zobacz funkcję CreateMiniportMidiFM w przykładowym sterowniku audio Fmsynth w zestawie Microsoft Windows Driver Kit (WDK).
Inną konwencją jest dostarczenie funkcji NewXxx dla klasy. Takie funkcje umożliwiają łatwe utworzenie wystąpienia (tworzenie i inicjowanie) obiektu, jak pokazano w poniższym przykładzie:
NTSTATUS NewMyObject(
OUT PMYINTERFACE *InterfacePointer,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
// ...more parameters
);
Funkcja NewMyObject tworzy i inicjuje obiekt, a następnie przekazuje wskaźnik z powrotem do interfejsu. Ponieważ parametry inicjowania są specyficzne dla klasy, więc jest prototypem funkcji NewXxx . Funkcja NewXxx zapewnia wygodny dostęp do konstruktora dla obiektu.
Aby zapoznać się z przykładem funkcji NewXxx tego typu, zobacz PcNewDmaChannel.