Bagikan melalui


Melakukan manajemen himpunan data driver penyimpanan

Dimulai dengan Windows 7, driver dapat melakukan tindakan manajemen pada himpunan data perangkat. Daftar tindakan manajemen himpunan data (DSM) yang dapat dilakukan pada perangkat penyimpanan ditentukan oleh Microsoft.

Menggunakan IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES

Konstanta DEVICE_DSM_ACTION menentukan tindakan. Konstanta ini diteruskan dalam anggota Tindakan dari struktur DEVICE_DSM_INPUT yang terkandung dalam buffer sistem permintaan IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES . Jika tindakan memerlukan parameter tambahan, blok parameter akan segera mengikuti struktur DEVICE_DSM_INPUT, dan ParameterBlockOffset akan menentukan offset dari awal struktur DEVICE_DSM_INPUT tempat blok parameter dimulai. Rentang himpunan data, jika ada, akan segera mengikuti blok parameter, dan DataSetRangesOffset akan menentukan offset dari awal struktur DEVICE_DSM_INPUT di mana rentang dimulai. Struktur buffer sistem diperlihatkan dalam diagram berikut.

Buffer Input IOCTL DSM.

Jika tindakan manajemen akan mengembalikan output, penunjuk ke struktur DEVICE_DSM_OUTPUT diteruskan di OutputBuffer IOCTL. Jika tindakan akan mengembalikan output khusus tindakan tambahan, blok output akan segera mengikuti struktur DEVICE_DSM_OUTPUT, dan OutputBlockOffset akan menentukan offset dari awal struktur DEVICE_DSM_OUTPUT di mana blok parameter dimulai. Struktur buffer output diperlihatkan dalam diagram berikut.

Buffer Output DSM IOCTL.

Alur proses tindakan DSM

Alur proses tindakan DSM dijelaskan di bawah ini, di mana Pengirim adalah pemohon tindakan dan Handler memproses tindakan yang diminta. Perhatikan bahwa mungkin ada lebih dari satu Handler di tumpukan.

Alur Tindakan DSM.

  1. Pengirim menginisialisasi DSM dan mengirimkannya ke Handler pertama di tumpukan dengan melakukan hal berikut:

  2. Handler menangani permintaan DSM IOCTL dengan salah satu dari tiga cara:

    1. Tangani permintaan dan kembalikan dengan output, jika ada.
    2. Tangani permintaan dan teruskan ke driver bawah berikutnya di tumpukan.
    3. Teruskan permintaan ke driver bawah berikutnya di tumpukan tanpa menangani DSM.

    Catatan

    Terlepas dari apakah driver menangani DSM, driver dapat meneruskan permintaan dengan aman hanya jika bit DEVICE_DSM_ACTION yang paling signifikan (DeviceDsmActionFlag_NonDestructive) diatur. Jika DeviceDsmActionFlag_NonDestructivetidak diatur, driver harus kembali dengan kesalahan.

    Jika Handler menangani DSM, handler melakukan langkah-langkah berikut:

    • Validasi input dengan memanggil DeviceDsmValidateInput.
    • Jika input valid, Handler mengekstrak input untuk mendapatkan tindakan. Jika tindakan memiliki blok parameter, Handler memanggil DeviceDsmParameterBlock untuk mendapatkan blok parameter. Jika tindakan memiliki data rentang, Handler memanggil DeviceDsmDataSetRanges untuk mendapatkan penunjuk ke blok rentang himpunan data, lalu melakukan pemrosesan normal pada blok. Blok ini terletak di DataSetRangesOffset dan terdiri dari satu atau beberapa entri berdampingan yang diformat sebagai struktur DEVICE_DSM_RANGE . Panjang, dalam byte, dari rentang himpunan data diatur dalam anggota dataSetRangesLengthdari DEVICE_DSM_INPUT.
    • Jika tindakan memerlukan output, Handler memanggil DeviceDsmValidateOutputLength untuk memvalidasi buffer output yang disediakan pengirim. Jika valid, handler menginisialisasi bagian DEVICE_DSM_OUTPUT dari buffer output dengan memanggil DeviceDsmInitializeOutput, dan mengisi blok output dengan output khusus tindakan, jika ada. Handler kemudian menyelesaikan IOCTL dan mengembalikan atau meneruskan IOCTL ke driver berikutnya di tumpukan.
  3. Setelah DSM ditangani dan dikembalikan ke Pengirim, Pengirim memvalidasi output, jika ada, dengan memanggil DeviceDsmValidateOutput. Jika output valid, Pengirim mengekstrak blok output, jika ada, dengan memanggil DeviceDsmOutputBlock.

Untuk detail tentang setiap tindakan DSM tertentu, lihat Deskripsi Tindakan DSM Perangkat.