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.
Kod głównej funkcji I/O jest ustawiony w lokalizacji stosu I/O sterownika dla każdego przychodzącego IRP.
Procedura dyspozytora kierowcy musi sprawdzić lokalizację stosu we/wy sterownika dla IRP, aby określić, co zrobić, jeśli którykolwiek z następujących warunków jest spełniony:
Procedura przekazywania obsługuje więcej niż jeden główny kod funkcji I/O.
Procedury wysyłania muszą obsługiwać zestaw kodów funkcji pomocniczych dla niektórych głównych kodów funkcji. IRP-y z pomocniczymi kodami funkcji obejmują IRP_MJ_PNP i IRP_MJ_POWER, a także niektóre IRP-y, które sterowniki portów SCSI i sterowniki systemu plików muszą obsługiwać.
Procedura rutyny dispatch dla sterownika urządzenia lub ściśle powiązanego sterownika wyższego poziomu obsługuje żądania IRP_MJ_DEVICE_CONTROL lub IRP_MJ_INTERNAL_DEVICE_CONTROL, które są powiązane z określonym zestawem kodów kontrolnych I/O.
Aby uzyskać wskaźnik do lokalizacji stosu we/wy sterownika, jego procedura wysyłania wywołuje metodę IoGetCurrentIrpStackLocation.
Procedury wysyłania sterowników wyższego poziomu zawsze powodują wywołanie metody IoGetCurrentIrpStackLocation , a także wywołanie metody IoGetNextIrpStackLocation w celu uzyskania wskaźnika do lokalizacji stosu we/wy następnego niższego sterownika dla IRP skonfigurowanych dla następnego niższego sterownika, podczas przekazywania IRP w dół stosu sterowniczego.
Procedura DispatchDeviceControl lub DispatchInternalDeviceControl sterownika urządzenia, lub być może jego ściśle powiązanych sterowników klas, musi określić, który kod sterowania We/Wy jest ustawiony w lokalizacji stosu We/Wy sterownika w Parametrach.DeviceIoControl.IoControlCode dla każdego żądania. Kod kontrolny I/O znajduje się w miejscu stosu I/O sterownika.
W większości przypadków procedura DispatchDeviceControl lub DispatchInternalDeviceControl sterownika wyższego poziomu po prostu przekazuje żądanie IRP_MJ_DEVICE_CONTROL lub IRP_MJ_INTERNAL_DEVICE_CONTROL do następnego niższego sterownika, po skonfigurowaniu jego lokalizacji stosu w IRP. Jednak sterowniki klas SCSI muszą sprawdzić pewne kody sterowania We/Wy portów SCSI, aby prawidłowo skonfigurować lokalizację stosu We/Wy sterownika portu SCSI przed przekazaniem tych żądań dalej.