PSCSIWMI_EXECUTE_METHOD funzione di callback (scsiwmi.h)
Viene chiamata la routine del driver miniport HwScsiWmiExecuteMethod per eseguire un metodo associato a un blocco di dati. Questa routine è facoltativa.
Sintassi
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
)
{...}
Parametri
[in] DeviceContext
Punta al valore del contesto definito dal driver miniport passato a ScsiPortWmiDispatchFunction.
[in] RequestContext
Punta alla struttura SCSIWMI_REQUEST_CONTEXT passata dal driver miniport a ScsiPortWmiDispatchFunction.
[in] GuidIndex
Specifica il blocco di dati in base al relativo indice nell'elenco dei GUID nella struttura SCSI_WMILIB_CONTEXT che il driver miniport passato a ScsiPortWmiDispatchFunction.
[in] InstanceIndex
Se il blocco specificato da GuidIndex dispone di più istanze, InstanceIndex specifica l'istanza.
[in] MethodId
Specifica l'ID del metodo da eseguire. Il driver miniport definisce l'ID del metodo come elemento in un blocco di dati.
[in] InBufferSize
Indica le dimensioni in byte dei dati di input. Se non sono presenti dati di input, InBufferSize è zero.
[in] OutBufferSize
Indica il numero di byte disponibili nel buffer per i dati di output.
[in, out] Buffer
Punta a un buffer che contiene i dati di input e riceve i dati di output, se presenti, dal metodo . Se il buffer è troppo piccolo per ricevere tutto l'output, il driver miniport chiama ScsiPortWmiPostProcess con SRB_STATUS_DATA_OVERRUN e le dimensioni necessarie.
Valore restituito
HwScsiWmiExecuteMethod restituisce SRB_STATUS_PENDING se la richiesta è in sospeso o un valore di stato SRB diverso da zero se la richiesta è stata completata. Il valore di stato SRB restituito da questa routine equivale a quello passato a ScsiPortWmiPostProcess. Anche se il tipo di dati del valore restituito è BOOLEAN, la routine HwScsiWmiExecuteMethod restituisce effettivamente un valore di stato SRB.
Osservazioni
Quando un driver miniport riceve un SRB in cui il membro funzione è impostato su SRB_FUNCTION_WMI, chiama ScsiPortWmiDispatchFunction con un puntatore a una struttura SCSI_WMILIB_CONTEXT inizializzata e MinorFunction impostato su Srb->WmiSubFunction. Il driver di porta SCSI chiama la routine del driver miniport HwScsiWmiExecuteMethod se MinorFunction indica una richiesta di esecuzione di un metodo.
Se un driver miniport non implementa una routine HwScsiWmiExecuteMethod, deve impostare ExecuteWmiMethod su NULL nel SCSI_WMILIB_CONTEXT il driver miniport passa a ScsiPortWmiDispatchFunction. In questo caso, il driver della porta restituisce SRB_STATUS_ERROR al chiamante.
Se il metodo genera l'output, il driver miniport deve controllare le dimensioni del buffer di output in OutBufferSize prima di eseguire qualsiasi operazione che potrebbe avere effetti collaterali o che non devono essere eseguite due volte. Ad esempio, se un metodo restituisce i valori di un gruppo di contatori e quindi reimposta i contatori, il driver miniport deve controllare le dimensioni del buffer prima di reimpostare i contatori. In questo modo, il driver della porta può inviare di nuovo la richiesta in modo sicuro con un buffer più grande. Se il buffer è troppo piccolo, il driver miniport deve chiamare ScsiPortWmiPostProcess con SRB_STATUS_DATA_OVERRUN e le dimensioni del buffer di output necessario per soddisfare la richiesta.
Il driver miniport esegue il metodo e scrive l'output, se presente, nel buffer. Prima di tornare da HwScsiWmiExecuteMethod, il driver miniport chiama ScsiPortWmiPostProcess con un valore SrbStatus appropriato e il numero di byte usati nel buffer di output.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Desktop |
intestazione | scsiwmi.h (include Scsiwmi.h) |