Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud lze vstupní IRP dokončit okamžitě, rutina odeslání provede následující:
Nastaví členy stavu a informací bloku stavu vstupně-výstupních operací protokolu IRP s příslušnými hodnotami obecně:
Rutina odesílání nastaví stav buď na STATUS_SUCCESS, nebo na příslušnou chybu (STATUS_XXX), což může být hodnota vrácená voláním rutiny podpory nebo u určitých synchronních požadavků nižším ovladačem.
Pokud ovladač nižší úrovně vrátí STATUS_PENDING, ovladač vyšší úrovně by neměl volat IoCompleteRequest pro IRP, s jednou výjimkou: Ovladač vyšší úrovně může použít událost k synchronizaci mezi jeho rutinou IoCompletion a rutinou odeslání, v takovém případě rutina IoCompletion signalizuje událost a vrací STATUS_MORE_PROCESSING_REQUIRED. Rutina odeslání čeká na událost a potom zavolá IoCompleteRequest k dokončení IRP.
Nastaví informace na počet bajtů, které byly úspěšně přeneseny, pokud byla splněna žádost o přenos dat, například požadavek na čtení nebo zápis.
Nastaví informace na hodnotu, která se liší podle konkrétního požadavku na jiné IRP, které dokončí se STATUS_SUCCESS.
Nastaví Informace na hodnotu, která se liší podle konkrétního požadavku na IRP, jež se dokončí s upozorněním STATUS_XXX. Například by nastavil informace na počet bajtů přenesených pro takové upozornění jako STATUS_BUFFER_OVERFLOW.
Obvykle nastaví informace na nulu pro požadavky, které se dokončí s chybou STATUS_XXX.
Volá IoCompleteRequest s IRP a PriorityBoost = IO_NO_INCREMENT.
Vrátí odpovídající STATUS_XXX , který už je nastavený v bloku stavu vstupně-výstupních operací. Všimněte si, že volání IoCompleteRequest činí daný IRP nepřístupným pro volajícího, takže návratovou hodnotu z dispečerské rutiny nelze nastavit z bloku stavu vstupně-výstupních operací již dokončeného IRP.
Postupujte podle těchto pokynů k implementaci volání IoCompleteRequest s použitím protokolu IRP:
Před voláním IoCompleteRequest vždy uvolněte všechny spinlocky, které ovladač drží.
Dokončení protokolu IRP trvá neurčitou dobu, zejména v řetězci vrstvených ovladačů. Navíc může dojít k vzájemnému zablokování, pokud rutina IoCompletion ovladače vyšší úrovně odešle vstupně-výstupní operace zpět dolů na nižší ovladač, který drží zámek otáčení.