Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

UfxDeviceIoControl function (ufxclient.h)

Passes non-internal IOCTLs from user-mode to UFX.

Syntax

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

Parameters

[in] UfxDevice

A handle to a UFX device object that the driver created by calling UfxDeviceCreate.

[in] Request

A handle to a framework request object.

[in] OutputBufferLength

The length, in bytes, of the request's output buffer, if an output buffer is available.

[in] InputBufferLength

The length, in bytes, of the request's input buffer, if an input buffer is available.

[in] IoControlCode

The driver-defined or system-defined IOCTL that is associated with the request.

Return value

A Boolean value indicating if the call was successful.

Remarks

The client driver calls UfxDeviceIoControl to forward non-internal IOCTLs that it receives in its EvtIoDeviceControl callback function to UFX. The following example shows how:

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();
}

Requirements

Requirement Value
Minimum supported client Windows 10
Target Platform Windows
Header ufxclient.h
Library ufxstub.lib
IRQL DISPATCH_LEVEL

Feedback

Was this page helpful?

Additional resources