Správa datové sady ovladačů úložiště

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.

Vstupní vyrovnávací paměť DSM IOCTL.

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.

Výstupní vyrovnávací paměť DSM IOCTL.

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.

Průběh akcí DSM.

  1. Odesílatel inicializuje DSM a odešle ho do prvního Handleru v zásobníku tímto způsobem:

  2. Handler zpracovává požadavek IOCTL DSM třemi způsoby:

    1. Zpracovat požadavek a vrátit výstup, pokud existuje.
    2. Zpracujte ten požadavek a předejte ho nižšímu dalšímu ovladači ve stacku.
    3. 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.
  3. 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í.