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.
Podczas implementowania procedury StartIo należy pamiętać o następujących kwestiach:
Procedura StartIo musi synchronizować dostęp do urządzenia fizycznego i do wszelkich udostępnionych informacji o stanie lub zasobów, które sterownik utrzymuje w rozszerzeniu urządzenia, przy użyciu innych procedur sterownika, które uzyskują dostęp do tego samego urządzenia, lokalizacji pamięci lub zasobów.
Jeśli procedura StartIo współużytkuje urządzenie lub stan z ISR, musi użyć polecenia KeSynchronizeExecution , aby wywołać procedurę SynchCritSection dostarczoną przez sterownik w celu zaprogramowania urządzenia lub uzyskania dostępu do stanu udostępnionego. Aby uzyskać więcej informacji, zobacz Używanie sekcji krytycznych.
Jeśli procedura StartIo dzieli stan lub zasoby z procedurami innymi niż ISR, musi chronić udostępniony stan lub zasoby za pomocą zainicjowanej przez sterownik blokady spinlock, dla której sterownik zapewnia miejsce w pamięci. Aby uzyskać więcej informacji, zobacz Spin Locks.
Jeśli monolityczny sterownik urządzenia innego niż WDM konfiguruje obiekt kontrolera, jego procedura StartIo może używać obiektu kontrolera do synchronizowania operacji za pośrednictwem udostępnionego urządzenia fizycznego z dołączonymi (podobnymi) urządzeniami.
Aby uzyskać więcej informacji, zobacz Obiekty kontrolera .
Chyba że ściśle powiązany sterownik wyższego poziomu presplituje duże żądania transferu DMA dla jego podstawowego sterownika urządzenia, podstawowa procedura StartIo sterownika urządzenia musi podzielić duże żądania transferu na zakresy częściowego transferu, a sterownik musi przeprowadzić sekwencję operacji urządzenia transferu częściowego. Każdy transfer częściowy musi mieć rozmiar odpowiadający możliwościom sprzętu: możliwości urządzenia sterownika lub podrzędnego urządzenia DMA, możliwości kontrolera DMA systemu, w zależności od tego, co ma ściślejsze ograniczenia.
Aby uzyskać więcej informacji na temat używania DMA systemu lub magistrali głównego, zobacz Obiekty adapterów i DMA.
Procedura StartIo sterownika korzystającego z narzędzia DMA musi synchronizować transfery przy użyciu obiektu adaptera.
Procedury StartIo są uruchamiane w IRQL = DISPATCH_LEVEL, co ogranicza zestaw procedur pomocy technicznej, które może wywołać.
Na przykład, rutyna StartIo nie może uzyskać dostępu do ani przydzielić pamięci stronicowalnej i nie może czekać, aż obiekt dyspozytora zostanie ustawiony w stanie zasygnalizowanym. Z drugiej strony, procedura StartIo może uzyskać i zwolnić spinlock przydzielony przez sterownik za pomocą KeAcquireSpinLockAtDpcLevel i KeReleaseSpinLockFromDpcLevel, które działają szybciej niż KeAcquireSpinLock i KeReleaseSpinLock.
Aby uzyskać więcej informacji, zobacz Zarządzanie priorytetami sprzętu i blokadami spin .
Jeśli sterownik przechowuje IRPs w stanie, który można anulować, jego procedura StartIo musi sprawdzić, czy wejściowy IRP został już anulowany, zanim zacznie przetwarzanie tego żądania na urządzeniu. Aby uzyskać więcej informacji, zobacz Anulowanie IRPs.