Udostępnij przez


Metody uzyskiwania dostępu do buforów danych

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).