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.
Mnoho ovladačů, zejména ovladačů nižší úrovně v řetězci vrstevnatých ovladačů, potřebuje pouze stanovit svou existenci při přijetí žádosti o vytvoření a musí pouze potvrdit přijetí žádosti o uzavření.
Například ovladač portu pro kontrolér zařízení, který obsahuje jeden nebo více úzce propojených ovladačů tříd, volajících IoGetDeviceObjectPointer, může mít minimální rutinu DispatchCreateClose. Rutina nemusí udělat nic jiného než dokončit IRP následujícím způsobem:
: :
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
Tato minimální rutina DispatchCreateClose nastaví člen Informace ve vstupně-výstupním bloku stavu na nulu, což označuje, že objekt souboru je otevřen na žádost o vytvoření; Informace nemá význam pro žádost o uzavření. Rutina nastaví člena Status na STATUS_SUCCESS a také vrátí tuto hodnotu stavu, což znamená, že ovladač je připraven přijímat vstupně-výstupní požadavky.
Tato minimální rutina DispatchCreateClose dokončí vytvoření IRP bez zvýšení priority původce IRP (IO_NO_INCREMENT), protože původce se předpokládá, že čeká na neurčitý, ale velmi malý interval, než se požadavek dokončí.
Jak velkou práci vykonává rutina DispatchCreateClose, závisí částečně na povaze zařízení ovladače nebo podkladového zařízení a částečně na designu ovladače. Pokud ovladač provádí velmi odlišné operace pro vytváření a zavření požadavků, měl by tyto požadavky zpracovávat v samostatných rutinách DispatchCreate a DispatchClose.
Pokud chcete zpracovat požadavek na vytvoření pro otevření objektu souboru představujícího logické nebo fyzické zařízení, měl by ovladač nejvyšší úrovně provést následující:
Zavolejte IoGetCurrentIrpStackLocation k získání ukazatele na umístění zásobníku vstupně-výstupních operací v IRP.
Zkontrolujte FileObject.FileName v umístění zásobníku vstupně-výstupních operací a dokončete IRP s STATUS_SUCCESS, pokud řetězec Unicode ve FileName má nulovou délku; jinak dokončete IRP s STATUS_INVALID_PARAMETER.
Podle předchozích kroků zajistíte, že pokus o otevření pseudosouboru na zařízení nezpůsobí problémy později. To například brání pokusům o otevření neexistující \\device\parallel0\temp.dat.