Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli sterownik używa obiektu kontrolera, musi wywołać IoCreateController po utworzeniu obiektów urządzenia, a jego urządzenie jest gotowe do we/wy, zazwyczaj po otrzymaniu żądania pnP IRP_MN_START_DEVICE. Na poniższej ilustracji przedstawiono wywołanie.
Każdy obiekt kontrolera ma skojarzone rozszerzenie kontrolera. Jak pokazano na poprzedniej ilustracji, wywołujący funkcję IoCreateController określa rozmiar rozszerzenia kontrolera. Jego struktura i zawartość są definiowane przez sterownik.
Oprócz stanu określonego dla konkretnego urządzenia, który sterownik utrzymuje w odniesieniu do kontrolera fizycznego (lub urządzenia z kanałami), poprzednia ilustracja przedstawia reprezentatywny zestaw danych zdefiniowanych przez sterownik dla rozszerzenia kontrolera.
Wskaźnik PtrToControllerObject zwrócony przez IoCreateControllernależy przekazać w wywołaniach sterownika do IoAllocateController i IoFreeController, opisane w Alokowanie obiektów kontrolera dla operacji We/Wy. Sterownik musi przechowywać zwrócony wskaźnik obiektu kontrolera w rozszerzeniach urządzenia w obiektach urządzenia utworzonych przez sterownik lub w innym obszarze pamięci rezydentnej, dostępnym dla sterownika (np. w niestronicowanej puli przydzielanej przez sterownik). Jeśli sterownik zostanie rozładowany, musi także przekazać wskaźnik obiektu kontrolera do IoDeleteController.
Większość sterowników, które konfigurują obiekty kontrolera, uważa za wygodne przechowywanie wskaźnika do bieżącego obiektu urządzenia docelowego lub rozszerzenia urządzenia w rozszerzeniu kontrolera. Zazwyczaj taki sterownik przechowuje wskaźnik do obiektu kontrolera w każdym ze swoich rozszerzeń urządzenia, aby móc używać wskaźnika ControllerObject—>ControllerExtension do uzyskania dostępu do stanu operacji we/wy zarządzanego przez sterownik, specyficznego dla kontrolera, dla każdego docelowego obiektu urządzenia.
Jeśli kontroler fizyczny reprezentowany przez obiekt kontrolera generuje przerwania, sterownik może również użyć rozszerzenia kontrolera jako magazynu dla PtrToInterruptObject wskaźniki zwracane przez IoConnectInterrupt. Aby uzyskać więcej informacji, zobacz procedury obsługi przerwań.
IoCreateController przydziela magazyn rezydentny dla obiektu i rozszerzenia kontrolera, które inicjuje zerami. Jeśli nie może przydzielić pamięci, IoCreateController zwraca wskaźnik NULL. W takim przypadku sterownik musi uniemożliwić uruchomienie urządzenia i powinien zwrócić STATUS_INSUFFICIENT_RESOURCES.