Funzione SCSIPortWmiSetInstanceName (SCSIwmi.h)

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

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

Sintassi

PWCHAR ScsiPortWmiSetInstanceName(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    InstanceNameLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

Parametri

[in] RequestContext

Puntatore a una struttura di tipo SCSIWMI_REQUEST_CONTEXT contenente il contesto della richiesta per una SRB WMI.

[in] InstanceIndex

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

[in] InstanceNameLength

Specifica le dimensioni in byte del nome dell'istanza.

[out] BufferAvail

Deve contenere, in input, il numero di byte di spazio buffer nella struttura WNODE_ALL_DATA che può essere usata per descrivere i nomi e i dati dell'istanza. Al ritorno, questo membro contiene il numero di byte di spazio buffer che rimangono.

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

SCSIPortWmiSetInstanceCount

SCSIPortWmiSetData

SCSIPortWmiSetInstanceName

Il driver miniport deve chiamare prima SCSIPortWmiSetInstanceCount , ma dopo che è stato chiamato SCSIPortWmiSetInstanceCount , non importa nell'ordine in cui il minidriver chiama SCSIPortWmiSetData e SCSIPortWmiSetInstanceName. Quando si chiama SCSIPortWmiSetData o SCSIPortWmiSetInstanceName, il valore passato alla routine nel parametro BufferAvail deve essere lo stesso del valore restituito nel parametro BufferAvail dalla routine di porta SCSI di recente denominata WMI porta SCSI. Si supponga, ad esempio, che il minidriver chiami prima SCSIPortWmiSetInstanceCount e questa routine restituisce un valore pari a 1.000 nel parametro BufferAvail . Successivamente, il minidriver chiama 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 un nome di istanza di lunghezza InstanceNameLength, verrà restituito uno zero nel membro BufferAvail .

[in, out] SizeNeeded

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

Valore restituito

La routine SCSIPortWmiSetInstanceCount restituisce un puntatore al buffer in cui il chiamante può archiviare il nome dell'istanza specificata in InstanceIndex. Se SCSIPortWmiSetInstanceCount non può allocare memoria sufficiente per il nome 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 SCSIPortWmiSetInstanceName.

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

La routine SCSIPortWmiSetInstanceName richiede che la struttura WNODE definita all'interno del contesto della richiesta sia di tipo WNODE_ALL_DATA. Ciò avviene perché SCSIPortWmiSetInstanceName può mettere a parte un'area del nome dell'istanza per una qualsiasi delle istanze associate 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 per aree di buffer per istanze diverse e SCSIPortWmiSetInstanceCount inizializza questa matrice, in modo che ogni buffer di dati dell'istanza possa essere accessibile singolarmente.

La memoria allocata per il contesto di richiesta deve rimanere valida fino a quando il driver miniport chiama SCSIPortWmiPostProcess e SCSIPortWmiPostProcess restituisce lo stato E IL buffer finale. Se SRB può eseguire la penna, la memoria per il contesto della richiesta deve essere allocata dall'estensione SRB. Se SRB non è in grado di eseguire la penna, 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 (includere Miniport.h, SCSI.h)

Vedi anche

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE