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.
Počínaje Windows 7 můžou ovladače provádět akce správy v sadě dat zařízení. Seznam akcí správy datových sad (DSM), které je možné provést na úložném zařízení, definuje Microsoft.
Použití IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
Konstanta DEVICE_DSM_ACTION určuje akci. Tato konstanta se předává v členu Action struktury DEVICE_DSM_INPUT obsažené v systémové vyrovnávací paměti žádosti IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES. Pokud akce vyžaduje další parametry, blok parametrů bude okamžitě následovat strukturu DEVICE_DSM_INPUT a ParameterBlockOffset určí posun od začátku struktury DEVICE_DSM_INPUT, kde začíná blok parametrů. Rozsahy datových sad, pokud existují, okamžitě následují za blokem parametrů a DataSetRangesOffset určí posun od začátku struktury DEVICE_DSM_INPUT, kde rozsahy začínají. Struktura vyrovnávací paměti systému je znázorněna v následujícím diagramu.
Pokud akce správy vrátí výstup, předá se v IOCTL "outputBufferu" ukazatel na strukturu "DEVICE_DSM_OUTPUT". Pokud akce vrátí další výstup specifický pro akci, bude výstupní blok okamžitě následovat DEVICE_DSM_OUTPUT strukturu a OutputBlockOffset určí posun od začátku struktury DEVICE_DSM_OUTPUT, ve které se spustí blok parametrů. Struktura výstupní vyrovnávací paměti je znázorněna v následujícím diagramu.
Procesní tok akce DSM
Tok procesu akce DSM je popsaný níže, kde Odesílatel je žadatel o akci a obslužná rutina zpracovává požadovanou akci. Uvědomte si, že v zásobníku může být více než jeden Handler.
Odesílatel inicializuje DSM a odešle ho do prvního Handleru v zásobníku tímto způsobem:
- Přidělení a inicializace struktury DEVICE_DSM_DEFINITION s definicí přidruženou k akci.
- Zavolejte DeviceDsmGetInputLength , abyste určili velikost potřebnou pro vstupní vyrovnávací paměť akce a pak přidělte paměť pro tuto vyrovnávací paměť.
- Voláním DeviceDsmInitializeInput inicializujte strukturu DSM_DEVICE_INPUT a pokud akce obsahuje parametry, také blok parametrů. Formát bloku parametru závisí na akci. Další podrobnosti najdete v DEVICE_DSM_ACTION popisy.
- Pokud akce obsahuje rozsahy, zavolejte DeviceDsmAddDataSetRange pro každou oblast, aby se do vstupní vyrovnávací paměti přidaly DEVICE_DSM_RANGE struktury.
- Pokud DSM obsahuje výstup, zavolejte DeviceDsmGetOutputLength pro určení velikosti potřebné pro výstupní vyrovnávací paměť akce a pak přidělte paměť pro tuto vyrovnávací paměť.
- Odešlete požadavek IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES a předejte inicializovaná vstupní data v systémové vyrovnávací paměti IOCTL spolu s přidělenou výstupní vyrovnávací pamětí (pokud existuje).
Handler zpracovává požadavek IOCTL DSM třemi způsoby:
- Zpracovat požadavek a vrátit výstup, pokud existuje.
- Zpracujte ten požadavek a předejte ho nižšímu dalšímu ovladači ve stacku.
- Předat požadavek dalšímu nižšímu ovladači v zásobníku bez zpracování DSM.
Poznámka:
Bez ohledu na to, jestli ovladač zpracovává DSM, může bezpečně předat požadavek pouze v případě, že je nastaven nejvýznamnější bit DEVICE_DSM_ACTION (DeviceDsmActionFlag_NonDestructive). Pokud DeviceDsmActionFlag_NonDestructive není nastaven, měl by se ovladač vrátit s chybou.
Pokud obslužná rutina zpracovává DSM, provede následující kroky:
- Ověřte vstup voláním DeviceDsmValidateInput.
- Pokud je vstup platný, Handler extrahuje vstup pro získání akce. Pokud akce obsahuje blok parametrů, obslužná rutina volá DeviceDsmParameterBlock k získání bloku parametru. Pokud akce obsahuje data rozsahu, obslužná rutina volá DeviceDsmDataSetRanges , aby získal ukazatel na blok rozsahů sad dat a pak provede normální zpracování bloku. Tento blok se nachází v DataSetRangesOffset a skládá se z jedné nebo více souvislých položek formátovaných jako DEVICE_DSM_RANGE struktury. Délka rozsahů množiny dat v bajtech je nastavena ve členu DataSetRangesLengthDEVICE_DSM_INPUT.
- Pokud akce vyžaduje výstup, obslužná rutina volá DeviceDsmValidateOutputLength k ověření výstupní vyrovnávací paměti zadané odesílatelem. Pokud je tato hodnota platná, obslužná rutina inicializuje DEVICE_DSM_OUTPUT část výstupní vyrovnávací paměti voláním DeviceDsmInitializeOutput a naplní výstupní blok výstupem specifickým pro akci, pokud existuje. Obslužná rutina pak dokončí IOCTL a buď vrátí, nebo předá IOCTL dalšímu ovladači v zásobníku.
Jakmile se dsM zpracuje a vrátí odesílateli, ověří výstup, pokud existuje, voláním DeviceDsmValidateOutput. Pokud je výstup platný, Odesílatel extrahuje výstupní blok(pokud existuje) voláním DeviceDsmOutputBlock.
Podrobnosti o každé konkrétní akci DSM najdete v tématu Popisy akcí DSM zařízení.