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.
Jedną z podstawowych obowiązków stosów sterowników jest przesyłanie danych między aplikacjami trybu użytkownika a urządzeniami systemu. System operacyjny zapewnia następujące trzy metody uzyskiwania dostępu do danych:
Buforowane we/wy
System operacyjny tworzy bufor systemu niestronicowanego o rozmiarze równym buforowi aplikacji. W przypadku operacji zapisu menedżer we/wy kopiuje dane użytkownika do buforu systemu przed wywołaniem stosu sterowników. W przypadku operacji odczytu menedżer I/O kopiuje dane z buforu systemu do buforu aplikacji, gdy stos sterowników zakończy żądaną operację.
Aby uzyskać więcej informacji, zobacz Using Buffered I/O.
Bezpośrednie wejście/wyjście
System operacyjny blokuje bufor aplikacji w pamięci. Następnie tworzy listę deskryptora pamięci (MDL), która identyfikuje zablokowane strony pamięci i przekazuje MDL do stosu sterowników. Sterowniki uzyskują dostęp do zablokowanych stron za pośrednictwem MDL.
Aby uzyskać więcej informacji, zobacz Using Direct I/O.
Ani buforowane, ani bezpośrednie wejście/wyjście
System operacyjny przekazuje wirtualny adres początkowy i rozmiar buforu aplikacji do stosu sterowników. Bufor jest dostępny tylko ze sterowników działających w kontekście wątku aplikacji.
Aby uzyskać więcej informacji, zobacz Używanie ani buforowanych, ani bezpośrednich operacji we/wy.
W przypadku żądań IRP_MJ_READ i IRP_MJ_WRITE sterowniki określają metodę I/O przy użyciu flag w każdej strukturze DEVICE_OBJECT. Aby uzyskać więcej informacji, zobacz Inicjowanie obiektu urządzenia.
W przypadku zapytania IRP_MJ_DEVICE_CONTROL i IRP_MJ_INTERNAL_DEVICE_CONTROL metoda we/wy jest określana przez wartość TransferType zawartą w każdej z wartości IOCTL. Aby uzyskać więcej informacji, zobacz Definiowanie kodów kontrolnych I/O.
Wszystkie sterowniki w stosie sterowników muszą używać tej samej metody dostępu buforu dla każdego żądania, z wyjątkiem sterowników najwyższego poziomu (który może używać metody "ani" niezależnie od metody używanej przez niższe sterowniki).