Funzione ScsiPortWmiSetData (scsiwmi.h)

La routine ScsiPortWmiSetData aggiorna la struttura WNODE_ALL_DATA all'interno del contesto della richiesta per specificare la posizione e la lunghezza dei dati per un'istanza di .

Nota I modelli di driver di porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i modelli di driver miniport Storport .
 

Sintassi

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

Parametri

[in] RequestContext

Puntatore a una struttura di tipo SCSIWMI_REQUEST_CONTEXT che contiene il contesto della richiesta per un SRB WMI.

[in] InstanceIndex

Contiene un indice che indica l'istanza per cui specificare la posizione e la lunghezza dei dati dell'istanza.

[in] DataLength

Specifica il numero di byte di dati necessari per descrivere l'istanza.

[out] BufferAvail

Deve contenere, all'input, il numero di byte di spazio buffer nella struttura WNODE_ALL_DATA che può essere usata per descrivere i nomi e i dati delle istanze. In caso di restituzione, questo membro contiene il numero di byte di spazio buffer che rimangono.

Esistono tre routine WMI della porta SCSI che restituiscono un valore per le dimensioni del buffer disponibili nel parametro BufferAvail :

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

Il driver miniport deve chiamare innanzitutto ScsiPortWmiSetInstanceCount , ma dopo la chiamata a ScsiPortWmiSetInstanceCount , non è importante in quale ordine il minidriver chiama ScsiPortWmiSetData e ScsiPortWmiSetInstanceName. Quando si chiama ScsiPortWmiSetData o ScsiPortWmiSetInstanceName, il valore passato alla routine nel parametro BufferAvail deve corrispondere al valore restituito nel parametro BufferAvail dalla routine WMI porta SCSI più di recente chiamata . Si supponga, ad esempio, che il minidriver chiami prima ScsiPortWmiSetInstanceCount e che questa routine restituisca un valore pari a 1.000 nel parametro BufferAvail . Il minidriver chiama quindi ScsiPortWmiSetData che restituisce un valore pari a 500 nel parametro BufferAvail . Infine, il minidriver chiama ScsiPortWmiSetInstanceName che restituisce un valore pari a 200 nel parametro BufferAvail . Il valore iniziale di 1.000 deve essere passato a ScsiPortWmiSetData in BufferAvail e il valore di 500 deve essere passato a ScsiPortWmiSetInstanceName.

Se non è disponibile memoria sufficiente per aggiungere nuovi dati di istanza di dimensioni DataLength byte, verrà restituito uno zero nel membro BufferAvail .

[in, out] SizeNeeded

Indica, all'input, il numero di byte necessari per descrivere l'intero WNODE prima di aggiungere i dati descrittivi per l'istanza specificata da InstanceIndex. In caso di restituzione, questo membro conterrà le dimensioni di WNODE, inclusi i dati per la nuova istanza.

Valore restituito

La routine ScsiPortWmiSetData restituisce un puntatore al buffer in cui il chiamante può archiviare informazioni descrittive sull'istanza identificata da InstanceIndex. Se ScsiPortWmiSetData non può allocare memoria sufficiente per i dati dell'istanza o se il WNODE contenuto nel contesto della richiesta non è di tipo WNODE_ALL_DATA, ScsiPortWmiSetData restituisce NULL.

Commenti

Il minidriver deve chiamare ScsiPortWmiSetInstanceCount prima di chiamare ScsiPortWmiSetData.

Il parametro RequestContext punta a una struttura del contesto di richiesta, SCSIWMI_REQUEST_CONTEXT, che contiene informazioni associate a un blocco di richieste SCSI (WMI) di Strumentazione gestione Windows (WMI). La struttura del contesto della richiesta, a sua volta, contiene una delle strutture wmi WNODE_XXX utilizzate dal sistema WMI per passare i dati tra consumer di dati in modalità utente e provider di dati in modalità kernel, ad esempio i driver.

La routine ScsiPortWmiSetData richiede che la struttura WNODE definita all'interno del contesto della richiesta sia di tipo WNODE_ALL_DATA. Ciò è dovuto al fatto che ScsiPortWmiSetData può specificare il percorso e la lunghezza dei buffer di dati per qualsiasi istanza associata a un blocco di dati WMI. A differenza della struttura WNODE_SINGLE_INSTANCE che contiene informazioni su una singola istanza, la struttura WNODE_ALL_DATA contiene una matrice di puntatori alle aree di buffer per più istanze e ScsiPortWmiSetData usa il parametro InstanceIndex come indice in questa matrice per inizializzare l'elemento matrice appropriato per una particolare istanza. Ogni elemento di matrice, una volta inizializzato, contiene le dimensioni e la posizione di un'area del buffer per un'istanza di .

La memoria allocata per il contesto della richiesta deve rimanere valida fino a quando il driver miniport chiama ScsiPortWmiPostProcess e ScsiPortWmiPostProcess restituisce lo stato ERB finale e le dimensioni del buffer. Se SRB può eseguire la penna, la memoria per il contesto della richiesta deve essere allocata dall'estensione SRB. Se non è possibile eseguire la penna di SRB, la memoria può essere allocata da un frame dello stack che non esce dall'ambito.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione scsiwmi.h (include Miniport.h, Scsi.h)

Vedi anche

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE