PSCSIWMI_EXECUTE_METHOD fungsi panggilan balik (scsiwmi.h)
Rutinitas HwScsiWmiExecuteMethod driver miniport dipanggil untuk menjalankan metode yang terkait dengan blok data. Rutinitas ini bersifat opsional.
Sintaks
PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;
BOOLEAN PscsiwmiExecuteMethod(
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG MethodId,
[in] ULONG InBufferSize,
[in] ULONG OutBufferSize,
[in, out] PUCHAR Buffer
)
{...}
Parameter
[in] DeviceContext
Menunjuk ke nilai konteks miniport yang ditentukan driver yang diteruskan ke ScsiPortWmiDispatchFunction.
[in] RequestContext
Menunjuk ke struktur SCSIWMI_REQUEST_CONTEXT yang diteruskan driver miniport ke ScsiPortWmiDispatchFunction.
[in] GuidIndex
Menentukan blok data menurut indeksnya ke dalam daftar GUID dalam struktur SCSI_WMILIB_CONTEXT yang diteruskan driver miniport ke ScsiPortWmiDispatchFunction.
[in] InstanceIndex
Jika blok yang ditentukan oleh GuidIndex memiliki beberapa instans, InstanceIndex menentukan instans.
[in] MethodId
Menentukan ID metode yang akan dijalankan. Driver miniport mendefinisikan ID metode sebagai item dalam blok data.
[in] InBufferSize
Menunjukkan ukuran dalam byte data input. Jika tidak ada data input, InBufferSize adalah nol.
[in] OutBufferSize
Menunjukkan jumlah byte yang tersedia di buffer untuk data output.
[in, out] Buffer
Menunjuk ke buffer yang menyimpan data input dan menerima data output, jika ada, dari metode . Jika buffer terlalu kecil untuk menerima semua output, driver miniport memanggil ScsiPortWmiPostProcess dengan SRB_STATUS_DATA_OVERRUN dan ukuran yang diperlukan.
Nilai kembali
HwScsiWmiExecuteMethod mengembalikan SRB_STATUS_PENDING jika permintaan tertunda, atau nilai status SRB bukan nol jika permintaan selesai. Nilai status SRB yang dikembalikan oleh rutinitas ini sama dengan apa yang diteruskan ke ScsiPortWmiPostProcess. Meskipun jenis data nilai yang dikembalikan adalah BOOLEAN, rutinitas HwScsiWmiExecuteMethod benar-benar mengembalikan nilai status SRB.
Keterangan
Ketika driver miniport menerima SRB di mana anggota Fungsi diatur ke SRB_FUNCTION_WMI, ia memanggil ScsiPortWmiDispatchFunction dengan pointer ke struktur SCSI_WMILIB_CONTEXT yang diinisialisasi dan MinorFunction diatur ke Srb-WmiSubFunction>. Driver port SCSI memanggil rutinitas HwScsiWmiExecuteMethod driver miniport jika MinorFunction menunjukkan permintaan untuk menjalankan metode.
Jika driver miniport tidak mengimplementasikan rutinitas HwScsiWmiExecuteMethod , driver miniport harus mengatur ExecuteWmiMethod ke NULL di SCSI_WMILIB_CONTEXT driver miniport lolos ke ScsiPortWmiDispatchFunction. Dalam hal ini, driver port mengembalikan SRB_STATUS_ERROR ke pemanggil.
Jika metode menghasilkan output, driver miniport harus memeriksa ukuran buffer output di OutBufferSize sebelum melakukan operasi apa pun yang mungkin memiliki efek samping atau yang tidak boleh dilakukan dua kali. Misalnya, jika metode mengembalikan nilai sekelompok penghitung dan kemudian mengatur ulang penghitung, driver miniport harus memeriksa ukuran buffer sebelum mengatur ulang penghitung. Ini memastikan bahwa driver port dapat mengirim ulang permintaan dengan aman dengan buffer yang lebih besar. Jika buffer terlalu kecil, driver miniport harus memanggil ScsiPortWmiPostProcess dengan SRB_STATUS_DATA_OVERRUN dan ukuran buffer output yang diperlukan untuk memenuhi permintaan.
Driver miniport menjalankan metode dan menulis output, jika ada, ke buffer. Sebelum kembali dari HwScsiWmiExecuteMethod, driver miniport memanggil ScsiPortWmiPostProcess dengan nilai SrbStatus yang sesuai dan jumlah byte yang digunakan dalam buffer output.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Desktop |
Header | scsiwmi.h (termasuk Scsiwmi.h) |