Freigeben über


UfxDeviceIoControl-Funktion (ufxclient.h)

Übergibt nicht interne IOCTLs aus dem Benutzermodus an UFX.

Syntax

BOOLEAN UfxDeviceIoControl(
  [in] UFXDEVICE  UfxDevice,
  [in] WDFREQUEST Request,
  [in] size_t     OutputBufferLength,
  [in] size_t     InputBufferLength,
  [in] ULONG      IoControlCode
);

Parameter

[in] UfxDevice

Ein Handle für ein UFX-Geräteobjekt, das der Treiber durch Aufrufen von UfxDeviceCreate erstellt hat.

[in] Request

Ein Handle für ein Frameworkanforderungsobjekt.

[in] OutputBufferLength

Die Länge des Ausgabepuffers der Anforderung in Bytes, wenn ein Ausgabepuffer verfügbar ist.

[in] InputBufferLength

Die Länge des Eingabepuffers der Anforderung in Bytes, wenn ein Eingabepuffer verfügbar ist.

[in] IoControlCode

Die vom Treiber definierte oder systemdefinierte IOCTL, die der Anforderung zugeordnet ist.

Rückgabewert

Ein boolescher Wert, der angibt, ob der Aufruf erfolgreich war.

Hinweise

Der Clienttreiber ruft UfxDeviceIoControl auf, um nicht interne IOCTLs, die er in seiner Rückruffunktion EvtIoDeviceControl empfängt , an UFX weiterzuleiten. Das folgende Beispiel veranschaulicht die Vorgehensweise:

VOID
DefaultQueue_EvtIoDeviceControl(
    _In_ WDFQUEUE Queue,
    _In_ WDFREQUEST Request,
    _In_ size_t OutputBufferLength,
    _In_ size_t InputBufferLength,
    _In_ ULONG IoControlCode
    )
/*++

Routine Description:

    EvtIoDeviceControl handler for the default Queue

Arguments:

    Queue -  Handle to the framework queue object that is associated with the
             I/O request.

    Request - Handle to a framework request object.

    OutputBufferLength - Size of the output buffer in bytes

    InputBufferLength - Size of the input buffer in bytes

    IoControlCode - I/O control code.

--*/
{
    WDFDEVICE WdfDevice;
    PCONTROLLER_CONTEXT ControllerContext;
    BOOLEAN HandledbyUfx;

    TraceEntry();

    TraceVerbose("Queue 0x%p, Request 0x%p, OutputBufferLength %d, "
                  "InputBufferLength %d, IoControlCode %d",
                  Queue, Request, (int) OutputBufferLength, 
                  (int) InputBufferLength, IoControlCode);
    
    WdfDevice = WdfIoQueueGetDevice(Queue);
    ControllerContext = DeviceGetControllerContext(WdfDevice);

    HandledbyUfx = UfxDeviceIoControl(
                        ControllerContext->UfxDevice,
                        Request,
                        OutputBufferLength,
                        InputBufferLength,
                        IoControlCode);

    if (!HandledbyUfx) {
        TraceError("Received an unsupported IOCTL");
        WdfRequestComplete(Request, STATUS_INVALID_DEVICE_REQUEST);
    }

    TraceExit();
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Zielplattform Windows
Kopfzeile ufxclient.h
Bibliothek ufxstub.lib
IRQL DISPATCH_LEVEL