UfxDeviceCreate 関数 (ufxclient.h)
UFX デバイス オブジェクトを作成し、イベント コールバック ルーチンを登録し、コントローラーに固有の機能を指定します。
構文
NTSTATUS UfxDeviceCreate(
WDFDEVICE WdfDevice,
[in] PUFX_DEVICE_CALLBACKS Callbacks,
[in] PUFX_DEVICE_CAPABILITIES Capabilities,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] UFXDEVICE *UfxDevice
);
パラメーター
WdfDevice
WDF デバイス オブジェクトへのハンドル。
[in] Callbacks
UFX デバイス オブジェクトに関連付けるドライバー指定のコールバック ルーチンへのポインターを含む UFX_DEVICE_CALLBACKS 型の構造体。
[in] Capabilities
UFX_DEVICE_CAPABILITIES 構造体へのポインター。
[in, optional] Attributes
新しいオブジェクトのドライバー指定の属性を含む WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。
[out] UfxDevice
新しい UFX デバイス オブジェクトへのハンドルを受け取る場所へのポインター。
戻り値
操作が成功した場合、メソッドはSTATUS_SUCCESSを返すか、NT_SUCCESS(status) が TRUE の別の状態値を返します。 それ以外の場合は、NT_SUCCESS(status) が FALSE の状態値を返します。
備考
クライアント ドライバーは、UfxDeviceCreate 呼び出す前に、WdfDeviceCreate呼び出す必要があります。 通常、クライアント ドライバーは、EvtDriverDeviceAdd コールバック ルーチンから UfxDeviceCreate を呼び出します。
次のコード スニペットは、UfxDeviceCreate 呼び出す方法を示しています。
NTSTATUS
UfxDevice_DeviceCreate (
_In_ WDFDEVICE WdfDevice
)
/*++
Routine Description:
Routine that registers with UFX and creates the UFX device object.
Arguments:
WdfDevice - Wdf object representing the device.
Return Value:
NTSTATUS.
--*/
{
NTSTATUS Status;
PCONTROLLER_CONTEXT ControllerContext;
UFX_DEVICE_CALLBACKS UfxDeviceCallbacks;
UFX_DEVICE_CAPABILITIES UfxDeviceCapabilities;
PUFXDEVICE_CONTEXT UfxDeviceContext;
UFXDEVICE UfxDevice;
WDF_OBJECT_ATTRIBUTES Attributes;
PAGED_CODE();
TraceEntry();
ControllerContext = DeviceGetControllerContext(WdfDevice);
UFX_DEVICE_CAPABILITIES_INIT(&UfxDeviceCapabilities);
UfxDeviceCapabilities.MaxSpeed = UsbSuperSpeed;
UfxDeviceCapabilities.RemoteWakeSignalDelay = REMOTE_WAKEUP_TIMEOUT_INTERVAL_MS;
//
// Set bitmasks that define the IN and OUT endpoint numbers that are available on the controller
//
//
// #### TODO: Set the IN endpoint mask here if not all endpoint addresses are supported ####
//
// For illustration purposes sample will set default control endpoint 0, 1-4, 8
UfxDeviceCapabilities.InEndpointBitmap = 0x011F;
//
// #### TODO: Set the OUT endpoint mask here if not all endpoint addresses are supported ####
//
// For illustration purposes sample will set default control endpoint 0, 2-7
//
UfxDeviceCapabilities.OutEndpointBitmap = 0x00FD;
//
// Set the event callbacks for the ufxdevice
//
UFX_DEVICE_CALLBACKS_INIT(&UfxDeviceCallbacks);
UfxDeviceCallbacks.EvtDeviceHostConnect = UfxDevice_EvtDeviceHostConnect;
UfxDeviceCallbacks.EvtDeviceHostDisconnect = UfxDevice_EvtDeviceHostDisconnect;
UfxDeviceCallbacks.EvtDeviceAddressed = UfxDevice_EvtDeviceAddressed;
UfxDeviceCallbacks.EvtDeviceEndpointAdd = UfxDevice_EvtDeviceEndpointAdd;
UfxDeviceCallbacks.EvtDeviceDefaultEndpointAdd = UfxDevice_EvtDeviceDefaultEndpointAdd;
UfxDeviceCallbacks.EvtDeviceUsbStateChange = UfxDevice_EvtDeviceUsbStateChange;
UfxDeviceCallbacks.EvtDevicePortChange = UfxDevice_EvtDevicePortChange;
UfxDeviceCallbacks.EvtDevicePortDetect = UfxDevice_EvtDevicePortDetect;
UfxDeviceCallbacks.EvtDeviceRemoteWakeupSignal = UfxDevice_EvtDeviceRemoteWakeupSignal;
UfxDeviceCallbacks.EvtDeviceTestModeSet = UfxDevice_EvtDeviceTestModeSet;
UfxDeviceCallbacks.EvtDeviceSuperSpeedPowerFeature = UfxDevice_EvtDeviceSuperSpeedPowerFeature;
// Context associated with UFXDEVICE object
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&Attributes, UFXDEVICE_CONTEXT);
Attributes.EvtCleanupCallback = UfxDevice_EvtCleanupCallback;
// Create the UFXDEVICE object
Status = UfxDeviceCreate(WdfDevice,
&UfxDeviceCallbacks,
&UfxDeviceCapabilities,
&Attributes,
&UfxDevice);
...
}
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ufxclient.h |
ライブラリ | ufxstub.lib |
IRQL | PASSIVE_LEVEL |