Fungsi ScsiPortWmiSetData (scsiwmi.h)

ScsiPortWmiSetData rutin memperbarui struktur WNODE_ALL_DATA dalam konteks permintaan untuk menentukan posisi dan panjang data untuk instans.

Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan model driver Storport dan driver miniport Storport .
 

Sintaks

PVOID ScsiPortWmiSetData(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    DataLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

Parameter

[in] RequestContext

Penunjuk ke struktur jenis SCSIWMI_REQUEST_CONTEXT yang berisi konteks permintaan untuk WMI SRB.

[in] InstanceIndex

Berisi indeks yang menunjukkan instans tempat posisi dan panjang data instans akan ditentukan.

[in] DataLength

Menentukan jumlah byte data yang diperlukan untuk menjelaskan instans.

[out] BufferAvail

Harus berisi, pada input, jumlah byte ruang buffer dalam struktur WNODE_ALL_DATA yang dapat digunakan untuk menjelaskan nama dan data instans. Saat kembali, anggota ini berisi jumlah byte ruang buffer yang tersisa.

Ada tiga rutinitas SCSI Port WMI yang mengembalikan nilai untuk ukuran buffer yang tersedia dalam parameter BufferAvail mereka:

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

Driver miniport harus memanggil ScsiPortWmiSetInstanceCount terlebih dahulu, tetapi setelah ScsiPortWmiSetInstanceCount dipanggil, tidak masalah dalam urutan apa minidriver memanggil ScsiPortWmiSetData dan ScsiPortWmiSetInstanceName. Saat memanggil ScsiPortWmiSetData atau ScsiPortWmiSetInstanceName, nilai yang diteruskan ke rutinitas dalam parameter BufferAvail-nya harus sama dengan nilai yang dikembalikan dalam parameter BufferAvail oleh yang terbaru disebut rutinitas SCSI Port WMI. Misalnya, minidriver memanggil ScsiPortWmiSetInstanceCount terlebih dahulu, dan rutinitas ini mengembalikan nilai 1.000 dalam parameter BufferAvail-nya . Selanjutnya, minidriver memanggil ScsiPortWmiSetData yang mengembalikan nilai 500 dalam parameter BufferAvail-nya . Terakhir, minidriver memanggil ScsiPortWmiSetInstanceName yang mengembalikan nilai 200 dalam parameter BufferAvail-nya . Nilai awal 1.000 harus diteruskan ke ScsiPortWmiSetData di BufferAvail, dan nilai 500 harus diteruskan ke ScsiPortWmiSetInstanceName.

Jika tidak ada cukup memori yang tersedia untuk menambahkan data instans baru berukuran byte DataLength, nol akan dikembalikan di anggota BufferAvail.

[in, out] SizeNeeded

Menunjukkan, pada input, jumlah byte yang diperlukan untuk menjelaskan seluruh WNODE sebelum menambahkan data deskriptif untuk instans yang ditentukan oleh InstanceIndex. Saat kembali, anggota ini akan berisi ukuran WNODE, termasuk data untuk instans baru.

Mengembalikan nilai

Rutinitas ScsiPortWmiSetData mengembalikan penunjuk ke buffer tempat pemanggil dapat menyimpan informasi deskriptif tentang instans yang diidentifikasi oleh InstanceIndex. Jika ScsiPortWmiSetData tidak dapat mengalokasikan memori yang cukup untuk data instans, atau jika WNODE yang terkandung dalam konteks permintaan tidak berjenis WNODE_ALL_DATA, ScsiPortWmiSetData mengembalikan NULL.

Keterangan

Minidriver harus memanggil ScsiPortWmiSetInstanceCount sebelum memanggil ScsiPortWmiSetData.

Parameter RequestContext menunjuk ke struktur konteks permintaan, SCSIWMI_REQUEST_CONTEXT, yang berisi informasi yang terkait dengan blok permintaan SCSI Windows Management Instrumentation (WMI). Struktur konteks permintaan, pada gilirannya, berisi salah satu Struktur WNODE_XXX WMI yang digunakan oleh sistem WMI untuk meneruskan data antara konsumen data mode pengguna dan penyedia data mode kernel seperti driver.

Rutinitas ScsiPortWmiSetData memerlukan struktur WNODE yang ditentukan dalam konteks permintaan untuk berjenis WNODE_ALL_DATA. Ini karena ScsiPortWmiSetData dapat menentukan lokasi dan panjang buffer data untuk salah satu instans yang terkait dengan blok data WMI. Tidak seperti struktur WNODE_SINGLE_INSTANCE yang berisi informasi tentang satu instans, struktur WNODE_ALL_DATA berisi array pointer ke area buffer untuk beberapa instans, dan ScsiPortWmiSetData menggunakan parameter InstanceIndex sebagai indeks ke dalam array ini untuk menginisialisasi elemen array yang sesuai untuk instans tertentu. Setiap elemen array, setelah diinisialisasi, berisi ukuran dan lokasi area buffer untuk instans.

Memori yang dialokasikan untuk konteks permintaan harus tetap valid sampai setelah driver miniport memanggil ScsiPortWmiPostProcess, dan ScsiPortWmiPostProcess mengembalikan status SRB akhir dan ukuran buffer. Jika SRB dapat tertunda, memori untuk konteks permintaan harus dialokasikan dari ekstensi SRB. Jika SRB tidak dapat tertunda, memori dapat dialokasikan dari bingkai tumpukan yang tidak keluar dari cakupan.

Persyaratan

   
Target Platform Desktop
Header scsiwmi.h (termasuk Miniport.h, Scsi.h)

Lihat juga

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE