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.
Když se aplikace nebo ovladač pokusí o přístup k zařízení, obvykle vytvořením nebo otevřením souboru, operační systém odešle žádost o vytvoření souboru do zásobníku ovladačů. Jakmile aplikace nebo ovladač dokončí používání zařízení, systém odešle požadavky na vyčištění a uzavření souborů do zásobníku ovladačů. Typy požadavků těchto tří požadavků jsou WdfRequestTypeCreate, WdfRequestTypeCleanup a WdfRequestTypeClose.
Obvykle, pokud ovladač nevolal WdfDeviceInitSetExclusive, musí ovladač, když přijme požadavky na vytvoření, vyčištění a zavření souborů, provádět operace specifické pro přístup k souboru nebo jiné operace přístupu, protože k zařízení může současně přistupovat více souborů nebo více aplikací. Ovladač proto musí sledovat vstupně-výstupní požadavky, které jsou přidružené ke každému souboru nebo aplikaci.
Architektura definuje objekty souboru rámce, které představují prostředky aplikace nebo ovladače pro přístup k zařízení, například soubor, adresář, svazek, slot pošty, pojmenovaný kanál nebo celé zařízení. Název souboru může být přidružen k objektu souboru, ale význam názvu souboru je specifický pro ovladač. Další informace o názvech souborů naleznete v tématu "Řízení přístupu k oboru názvů zařízení".
Pokud ovladač musí zpracovávat operace se soubory, musí volat WdfDeviceInitSetFileObjectConfig ze své funkce EvtDriverDeviceAdd zpětného volání. Metoda WdfDeviceInitSetFileObjectConfig přijímá strukturu WDF_FILEOBJECT_CONFIG jako vstup. Ovladač používá tuto datovou strukturu k registraci svých EvtDeviceFileCreate, EvtFileCleanup a EvtFileClose funkcí zpětného volání a volitelně určují, zda má rámec vytvořit rámcový objekt souboru pokaždé, když ovladač obdrží požadavek na vytvoření souboru.
Většina ovladačů, které zpracovávají operace se soubory, ukládají informace specifické pro soubor v kontextovém prostoru objektu souboru ve frameworku. Pokud ovladač zpracovává operace se soubory, ale nepotřebuje ukládat informace do kontextového prostoru objektu souboru, architektura nemusí pro ovladač vytvářet objekty souboru architektury.
Vytvoření nebo otevření souboru
Když rozhraní obdrží požadavek na vytvoření souboru pro váš ovladač funkce, provede následující:
Vytvoří objekt souboru architektury, který představuje soubor, pokud ovladač dříve nezoznačoval, že nepotřebuje používat objekty souboru architektury.
Volá zpětnou volací funkci vašeho ovladače EvtDeviceFileCreate, pokud ovladač zaregistroval funkci zpětného volání.
Funkce zpětného volání EvtDeviceFileCreate obvykle získá informace o souboru, například jeho název a příznaky objektu souboru. Ovladač obvykle ukládá tyto informace do kontextového prostoru objektu souboru architektury.
Místo poskytnutí funkce zpětného volání EvtDeviceFileCreate může ovladač volat WdfDeviceConfigureRequestDispatching k nastavení I/O fronty pro příjem všech žádostí o vytvoření souboru (typ požadavku WdfRequestTypeCreate). Ovladač následně obdrží žádosti o vytvoření souboru v obslužné rutině požadavků fronty EvtIoDefault. (Vstupně-výstupní fronta nemůže přijímat žádosti o vytvoření souboru, jestliže je člen fronty struktury WDF_IO_QUEUE_CONFIG s názvem DefaultQueue nastaven na TRUE.)
Pokud ovladač neposkytuje funkci zpětného volání EvtDeviceFileCreate a nenastaví vstupně-výstupní frontu pro zpracování WdfRequestTypeCreate vstupně-výstupních požadavků, rámec:
Dokončí všechny žádosti o vytvoření souboru pro ovladač s hodnotou stavu STATUS_SUCCESS, pokud je ovladač ovladačem funkce.
Přepošluje všechny požadavky na vytvoření souboru na další nižší ovladač, pokud je ovladač ovladačem filtru.
(Pokud chcete zjistit, jak toto chování změnit, podívejte se na AutoForwardCleanupClose člena struktury WDF_FILEOBJECT_CONFIG.)
Poznámka: Pokud váš ovladač funkce neposkytuje žádná rozhraní zařízení, která mohou aplikace používat pro přístup k zařízením ovladače, musí ovladač zajistit zpětné volání EvtDeviceFileCreate, které dokončí všechny žádosti o vytvoření souboru stavovou hodnotou, pro kterou NT_SUCCESS(stav) se rovná FALSE. Jinak se škodlivá aplikace může pokusit o přístup k zařízení pomocí názvu objektu fyzického zařízení (PDO) zařízení. (Všechny PDOs mají názvy.)
Pokud ovladač předá žádost o vytvoření do V/V cíle, nesmí ji poté dokončit s hodnotou stavu selhání, pokud od V/V cíle neobdrží hodnotu stavu selhání. V opačném případě nebudou nižší ovladače informováni, že žádost o vytvoření selhala, a mohou se pokusit pracovat, jako by soubor byl otevřen.
Pokud ovladač předá požadavek na vytvoření do cíle vstupu/výstupu, nemůže ovladač nastavit příznak WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, pokud rámec vytvořil objekt souboru rámce pro požadavek na vytvoření. Ovladač proto nemůže nastavit příznak WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET pro požadavek na vytvoření, pokud nenastaví také příznak WdfFileObjectNotRequired, protože ovladač nebude moci vyčistit objekt WDFFILEOBJECT v případě, že ovladač na nižší úrovni v zásobníku selže požadavek na vytvoření. Místo toho může ovladač použít jakékoli jiné možnosti odeslání, například odesílat asynchronně s rutinou dokončení nebo odesílat synchronně. V obou případech musí ovladač zavolat WdfRequestComplete, když znovu získá kontrolu.
Všimněte si, že pokud ovladač dokončí žádost o vytvoření se stavem chyby, rámec odstraní souborový objekt rámce, ale nevolá funkce zpětného volání EvtFileCleanup nebo EvtFileClose. Proto, pokud ovladač přiděluje dodatečnou objektově specifickou paměť mimo kontextový prostor objektu souboru, musí poskytnout buď zpětnou volací funkci EvtCleanupCallback, nebo EvtDestroyCallback, která tuto přidělenou paměť odstraní.
V systému Windows Vista a novějších lze žádosti o vytvoření souboru zrušit. Starší verze operačního systému Windows nepodporují zrušení požadavků na vytváření souborů.
Systém vždy vytvoří objekt souboru WDM (Windows Driver Model) pro každou žádost o vytvoření, která pochází z uživatelské aplikace. Pokud ovladač odešle žádost o vytvoření, nemusí pro požadavek vytvořit objekt souboru WDM. Rámec běžně nevytváří rámcový souborový objekt, pokud neexistuje objekt souboru WDM. Pokud však ovladač volal WdfDeviceInitSetExclusive a pokud ovladač nastavil WdfFileObjectWdfCannotUseFsContexts v členu FileObjectClass struktury WDF_FILEOBJECT_CONFIG, rozhraní vytvoří objekt souboru rozhraní i v případě, že objekt souboru WDM neexistuje.
Získání informací o souboru
Zpětná volací funkce ovladače EvtDeviceFileCreate může volat jednu nebo více z následujících metod objektu k získání informací o přístupu aplikace nebo ovladače k zařízení:
#B0 #A1 #A2 WdfFileObjectGetFileName #A3 #C4
Vrátí název souboru obsažený v objektu souboru architektury.
WdfFileObjectGetFlags
Vrátí příznaky obsažené v objektu souboru architektury.
WdfFileObjectWdmGetFileObject
Vrátí objekt souboru WDM přidružený k objektu souboru architektury.
WdfRequestGetParameters
Načte parametry přidružené k objektu požadavku architektury. Pokud je typ požadavku WdfRequestTypeCreate, člen Parameters.Create struktury WDF_REQUEST_PARAMETERS obsahuje informace o žádosti o vytvoření souboru.
Ovladač obvykle ukládá informace o souboru v kontextovém prostoru objektu souboru architektury. Když ovladač získá vstupně-výstupní požadavek z jedné ze svých vstupně-výstupních front, může zavolat WdfRequestGetFileObject pro získání popisovače objektu souboru frameworku, který je přidružen k požadavku. Ovladač pak může načíst informace o souboru uložené v kontextovém prostoru objektu souboru architektury.
Ovladač může hledat ve vstupně-výstupní frontě žádosti, které jsou přidruženy k určitému souboru, voláním #B0 #A1 WdfIoQueueRetrieveRequestByFileObject #A2 #A3.
Pokud má ovladač ukazatel na strukturu WDM DEVICE_OBJECT, může ovladač volat WdfDeviceGetFileObject pro získání popisovače frameworkového objektu souboru, který je přidružen k objektu zařízení WDM.
Zavření souboru
Když aplikace nebo jiný ovladač soubor zavře, architektura obdrží požadavek na vyčištění a žádost o uzavření ovladače. Rámec:
Zavolá EvtFileCleanup a EvtFileClose funkce zpětného volání, pokud ovladač zaregistroval tyto funkce zpětného volání.
Odstraní objekt souboru architektury, který představuje soubor.
Funkce zpětného volání EvtFileCleanup a EvtFileClose ovladače obdrží popisovač objektu souboru frameworku. Ovladač může volat WdfFileObjectGetDevice k určení, který objekt zařízení frameworku je přidružen k objektu souboru frameworku.