Condividi tramite


Funzione WdfRequestProbeAndLockUserBufferForWrite (wdfrequest.h)

[Si applica solo a KMDF]

Il metodo WdfRequestProbeAndLockUserBufferForWrite verifica che il buffer in modalità utente di una richiesta di I/O sia scrivibile e quindi blocca le pagine di memoria fisica del buffer in modo che i driver nello stack di driver possano scrivere nel buffer.

Sintassi

NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
  [in]  WDFREQUEST Request,
  [in]  PVOID      Buffer,
  [in]  size_t     Length,
  [out] WDFMEMORY  *MemoryObject
);

Parametri

[in] Request

Handle per un oggetto richiesta framework.

[in] Buffer

Puntatore al buffer di output della richiesta. Per altre informazioni, vedere la sezione Osservazioni seguente.

[in] Length

Lunghezza, in byte, del buffer di output della richiesta.

[out] MemoryObject

Puntatore a una posizione che riceve un handle per un oggetto memoria framework che rappresenta il buffer di output dell'utente.

Valore restituito

WdfRequestProbeAndLockUserBufferForWrite restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER
Un parametro di input non è valido.
STATUS_INVALID_USER_BUFFER
Il parametro Length è zero.
STATUS_INVALID_DEVICE_REQUEST
La richiesta è già stata completata o non è valida.
STATUS_ACCESS_VIOLATION
Il thread corrente non è l'autore della richiesta di I/O.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente per completare l'operazione.
 

Questo metodo può anche restituire altri valori NTSTATUS .

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Osservazioni

Il buffer di output dell'utente riceve in genere informazioni che il driver ha letto dal dispositivo.

Solo un driver di primo livello può chiamare il metodo WdfRequestProbeAndLockUserBufferForWrite, perché il metodo richiede il contesto del processo che ha creato la richiesta di I/O.

Il buffer in modalità utente specificato dal parametro Buffer può essere il buffer che WdfRequestRetrieveUnsafeUserOutputBuffer recupera oppure può essere un buffer di output in modalità utente diverso. Ad esempio, un codice di controllo di I/O che usa il metodo di accesso memorizzato nel buffer potrebbe passare una struttura che contiene un puntatore incorporato a un buffer in modalità utente. In tal caso, il driver può usareWdfRequestProbeAndLockUserBufferForWrite per ottenere un oggetto memoria per il buffer.

La lunghezza del buffer specificata dal parametro length non deve essere maggiore della dimensione effettiva del buffer. In caso contrario, i driver possono accedere alla memoria all'esterno del buffer, ovvero un rischio per la sicurezza.

Se WdfRequestProbeAndLockUserBufferForWrite restituisce STATUS_SUCCESS, il driver riceve un handle per un oggetto memoria framework che rappresenta il buffer in modalità utente. Per accedere al buffer, il driver deve chiamare WdfMemoryGetBuffer.

L'oggetto memoria framework viene rilasciato automaticamente quando il driver chiama WdfRequestComplete.

Per altre informazioni su WdfRequestProbeAndLockUserBufferForWrite, vedere Accesso ai buffer di dati nei driver Framework-Based.

Esempi

Per un esempio di codice che usa WdfRequestProbeAndLockUserBufferForWrite, vedere WdfRequestProbeAndLockUserBufferForRead.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
versione minima di KMDF 1.0
intestazione wdfrequest.h (include Wdf.h)
libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL PASSIVE_LEVEL
regole di conformità DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedere anche

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer