UfxDeviceIoInternalControl-Funktion (ufxclient.h)

Übergibt IOCTLs im Kernelmodus an UFX.

Syntax

BOOLEAN UfxDeviceIoInternalControl(
  [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 treiberdefinierte oder systemdefinierte IOCTL, die der Anforderung zugeordnet ist.

Rückgabewert

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

Hinweise

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

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

Routine Description:

    EvtIoInternalDeviceControl 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("InternalQueue 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 = UfxDeviceIoInternalControl(
                        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