[freerdp,channels] mark function pointers [[nodiscard]]

This commit is contained in:
Armin Novak
2026-02-15 22:45:39 +01:00
parent 6a1cc0f031
commit 775ee2615a
7 changed files with 100 additions and 94 deletions

View File

@@ -33,35 +33,35 @@ typedef UINT(VCAPITYPE* static_entry_fn_t)();
typedef struct typedef struct
{ {
const char* name; const char* name;
static_entry_fn_t entry; WINPR_ATTR_NODISCARD static_entry_fn_t entry;
} STATIC_ENTRY; } STATIC_ENTRY;
typedef BOOL(VCAPITYPE* static_entry_vc_fn_t)(PCHANNEL_ENTRY_POINTS); typedef BOOL(VCAPITYPE* static_entry_vc_fn_t)(PCHANNEL_ENTRY_POINTS);
typedef struct typedef struct
{ {
const char* name; const char* name;
static_entry_vc_fn_t entry; WINPR_ATTR_NODISCARD static_entry_vc_fn_t entry;
} STATIC_ENTRY_VC; } STATIC_ENTRY_VC;
typedef BOOL(VCAPITYPE* static_entry_vcex_fn_t)(PCHANNEL_ENTRY_POINTS_EX, PVOID); typedef BOOL(VCAPITYPE* static_entry_vcex_fn_t)(PCHANNEL_ENTRY_POINTS_EX, PVOID);
typedef struct typedef struct
{ {
const char* name; const char* name;
static_entry_vcex_fn_t entry; WINPR_ATTR_NODISCARD static_entry_vcex_fn_t entry;
} STATIC_ENTRY_VCEX; } STATIC_ENTRY_VCEX;
typedef UINT(VCAPITYPE* static_entry_dvc_fn_t)(IDRDYNVC_ENTRY_POINTS*); typedef UINT(VCAPITYPE* static_entry_dvc_fn_t)(IDRDYNVC_ENTRY_POINTS*);
typedef struct typedef struct
{ {
const char* name; const char* name;
static_entry_dvc_fn_t entry; WINPR_ATTR_NODISCARD static_entry_dvc_fn_t entry;
} STATIC_ENTRY_DVC; } STATIC_ENTRY_DVC;
typedef UINT(VCAPITYPE* static_entry_dse_fn_t)(PDEVICE_SERVICE_ENTRY_POINTS); typedef UINT(VCAPITYPE* static_entry_dse_fn_t)(PDEVICE_SERVICE_ENTRY_POINTS);
typedef struct typedef struct
{ {
const char* name; const char* name;
static_entry_dse_fn_t entry; WINPR_ATTR_NODISCARD static_entry_dse_fn_t entry;
} STATIC_ENTRY_DSE; } STATIC_ENTRY_DSE;
typedef union typedef union
@@ -75,11 +75,11 @@ typedef union
typedef union typedef union
{ {
static_entry_fn_t cse; WINPR_ATTR_NODISCARD static_entry_fn_t cse;
static_entry_vc_fn_t csevc; WINPR_ATTR_NODISCARD static_entry_vc_fn_t csevc;
static_entry_vcex_fn_t csevcex; WINPR_ATTR_NODISCARD static_entry_vcex_fn_t csevcex;
static_entry_dvc_fn_t csedvc; WINPR_ATTR_NODISCARD static_entry_dvc_fn_t csedvc;
static_entry_dse_fn_t csedse; WINPR_ATTR_NODISCARD static_entry_dse_fn_t csedse;
} static_entry_fn_u; } static_entry_fn_u;
typedef struct typedef struct
@@ -93,7 +93,7 @@ typedef struct
{ {
const char* name; const char* name;
const char* type; const char* type;
static_subsystem_entry_fn_t entry; WINPR_ATTR_NODISCARD static_subsystem_entry_fn_t entry;
} STATIC_SUBSYSTEM_ENTRY; } STATIC_SUBSYSTEM_ENTRY;
typedef struct typedef struct

View File

@@ -923,7 +923,7 @@ static void drive_message_free(void* obj)
if (!irp) if (!irp)
return; return;
WINPR_ASSERT(irp->Discard); WINPR_ASSERT(irp->Discard);
irp->Discard(irp); (void)irp->Discard(irp);
} }
/** /**

View File

@@ -1536,13 +1536,12 @@ static UINT dummy_irp_response(rdpdrPlugin* rdpdr, wStream* s)
*/ */
static UINT rdpdr_process_irp(rdpdrPlugin* rdpdr, wStream* s) static UINT rdpdr_process_irp(rdpdrPlugin* rdpdr, wStream* s)
{ {
IRP* irp = NULL;
UINT error = CHANNEL_RC_OK; UINT error = CHANNEL_RC_OK;
WINPR_ASSERT(rdpdr); WINPR_ASSERT(rdpdr);
WINPR_ASSERT(s); WINPR_ASSERT(s);
irp = irp_new(rdpdr->devman, rdpdr->pool, s, rdpdr->log, &error); IRP* irp = irp_new(rdpdr->devman, rdpdr->pool, s, rdpdr->log, &error);
if (!irp) if (!irp)
{ {
@@ -1557,16 +1556,14 @@ static UINT rdpdr_process_irp(rdpdrPlugin* rdpdr, wStream* s)
} }
if (irp->device->IRPRequest) if (irp->device->IRPRequest)
IFCALLRET(irp->device->IRPRequest, error, irp->device, irp); error = irp->device->IRPRequest(irp->device, irp);
else
irp->Discard(irp);
if (error != CHANNEL_RC_OK) if (error != CHANNEL_RC_OK)
{ {
WLog_Print(rdpdr->log, WLOG_ERROR, "device->IRPRequest failed with error %" PRIu32 "", WLog_Print(rdpdr->log, WLOG_ERROR, "device->IRPRequest failed with error %" PRIu32 "",
error); error);
irp->Discard(irp);
} }
(void)irp->Discard(irp);
return error; return error;
} }

View File

@@ -76,8 +76,8 @@ extern "C"
{ {
NdrTypeArity arity; NdrTypeArity arity;
size_t itemSize; size_t itemSize;
NDR_READER_FN readFn; WINPR_ATTR_NODISCARD NDR_READER_FN readFn;
NDR_WRITER_FN writeFn; WINPR_ATTR_NODISCARD NDR_WRITER_FN writeFn;
NDR_DESTROY_FN destroyFn; NDR_DESTROY_FN destroyFn;
NDR_DUMP_FN dumpFn; NDR_DUMP_FN dumpFn;
} NdrMessageDescr; } NdrMessageDescr;

View File

@@ -169,9 +169,8 @@ struct s_ICamHal
* @param hchannel the generic freerdp channel * @param hchannel the generic freerdp channel
* @return the number of found cameras * @return the number of found cameras
*/ */
UINT(*Enumerate) WINPR_ATTR_NODISCARD UINT (*Enumerate)(ICamHal* ihal, ICamHalEnumCallback callback,
(ICamHal* ihal, ICamHalEnumCallback callback, CameraPlugin* ecam, CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK* hchannel);
GENERIC_CHANNEL_CALLBACK* hchannel);
/** /**
* callback to activate a given camera device * callback to activate a given camera device
@@ -181,7 +180,8 @@ struct s_ICamHal
* @return if the operation was successful * @return if the operation was successful
* @since 3.18.0 * @since 3.18.0
*/ */
BOOL (*Activate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); WINPR_ATTR_NODISCARD BOOL (*Activate)(ICamHal* ihal, const char* deviceId,
CAM_ERROR_CODE* errorCode);
/** /**
* callback to deactivate a given camera device * callback to deactivate a given camera device
@@ -191,7 +191,8 @@ struct s_ICamHal
* @return if the operation was successful * @return if the operation was successful
* @since 3.18.0 * @since 3.18.0
*/ */
BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); WINPR_ATTR_NODISCARD BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId,
CAM_ERROR_CODE* errorCode);
/** /**
* callback that returns the list of compatible media types given a set of supported formats * callback that returns the list of compatible media types given a set of supported formats
@@ -204,10 +205,10 @@ struct s_ICamHal
* @param nMediaTypes output number of media descriptors * @param nMediaTypes output number of media descriptors
* @return number of matched supported formats * @return number of matched supported formats
*/ */
INT16(*GetMediaTypeDescriptions) WINPR_ATTR_NODISCARD INT16 (*GetMediaTypeDescriptions)(
(ICamHal* ihal, const char* deviceId, size_t streamIndex, ICamHal* ihal, const char* deviceId, size_t streamIndex,
const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats, const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats,
CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, size_t* nMediaTypes); CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, size_t* nMediaTypes);
/** /**
* callback to start a stream * callback to start a stream
@@ -218,9 +219,10 @@ struct s_ICamHal
* @param callback * @param callback
* @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise
*/ */
CAM_ERROR_CODE(*StartStream) WINPR_ATTR_NODISCARD CAM_ERROR_CODE (*StartStream)(ICamHal* ihal, CameraDevice* dev,
(ICamHal* ihal, CameraDevice* dev, size_t streamIndex, size_t streamIndex,
const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, ICamHalSampleCapturedCallback callback); const CAM_MEDIA_TYPE_DESCRIPTION* mediaType,
ICamHalSampleCapturedCallback callback);
/** /**
* callback to stop a stream * callback to stop a stream
@@ -239,12 +241,12 @@ struct s_ICamHal
CAM_ERROR_CODE (*Free)(ICamHal* ihal); CAM_ERROR_CODE (*Free)(ICamHal* ihal);
}; };
typedef UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal); typedef WINPR_ATTR_NODISCARD UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal);
typedef struct typedef struct
{ {
IWTSPlugin* plugin; IWTSPlugin* plugin;
PREGISTERCAMERAHAL pRegisterCameraHal; WINPR_ATTR_NODISCARD PREGISTERCAMERAHAL pRegisterCameraHal;
CameraPlugin* ecam; CameraPlugin* ecam;
const ADDIN_ARGV* args; const ADDIN_ARGV* args;
@@ -253,7 +255,8 @@ typedef struct
typedef FREERDP_CAMERA_HAL_ENTRY_POINTS* PFREERDP_CAMERA_HAL_ENTRY_POINTS; typedef FREERDP_CAMERA_HAL_ENTRY_POINTS* PFREERDP_CAMERA_HAL_ENTRY_POINTS;
/* entry point called by addin manager */ /* entry point called by addin manager */
typedef UINT(VCAPITYPE* PFREERDP_CAMERA_HAL_ENTRY)(PFREERDP_CAMERA_HAL_ENTRY_POINTS pEntryPoints); typedef WINPR_ATTR_NODISCARD
UINT(VCAPITYPE* PFREERDP_CAMERA_HAL_ENTRY)(PFREERDP_CAMERA_HAL_ENTRY_POINTS pEntryPoints);
/* common functions */ /* common functions */
UINT ecam_channel_send_generic_msg(CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK* hchannel, UINT ecam_channel_send_generic_msg(CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK* hchannel,

View File

@@ -27,18 +27,19 @@ typedef struct s_ITSMFAudioDevice ITSMFAudioDevice;
struct s_ITSMFAudioDevice struct s_ITSMFAudioDevice
{ {
/* Open the audio device. */ /* Open the audio device. */
BOOL (*Open)(ITSMFAudioDevice* audio, const char* device); WINPR_ATTR_NODISCARD BOOL (*Open)(ITSMFAudioDevice* audio, const char* device);
/* Set the audio data format. */ /* Set the audio data format. */
BOOL(*SetFormat) WINPR_ATTR_NODISCARD BOOL (*SetFormat)(ITSMFAudioDevice* audio, UINT32 sample_rate,
(ITSMFAudioDevice* audio, UINT32 sample_rate, UINT32 channels, UINT32 bits_per_sample); UINT32 channels, UINT32 bits_per_sample);
/* Play audio data. */ /* Play audio data. */
BOOL (*Play)(ITSMFAudioDevice* audio, const BYTE* data, UINT32 data_size); WINPR_ATTR_NODISCARD BOOL (*Play)(ITSMFAudioDevice* audio, const BYTE* data, UINT32 data_size);
/* Get the latency of the last written sample, in 100ns */ /* Get the latency of the last written sample, in 100ns */
UINT64 (*GetLatency)(ITSMFAudioDevice* audio); WINPR_ATTR_NODISCARD UINT64 (*GetLatency)(ITSMFAudioDevice* audio);
/* Change the playback volume level */ /* Change the playback volume level */
BOOL (*ChangeVolume)(ITSMFAudioDevice* audio, UINT32 newVolume, UINT32 muted); WINPR_ATTR_NODISCARD BOOL (*ChangeVolume)(ITSMFAudioDevice* audio, UINT32 newVolume,
UINT32 muted);
/* Flush queued audio data */ /* Flush queued audio data */
BOOL (*Flush)(ITSMFAudioDevice* audio); WINPR_ATTR_NODISCARD BOOL (*Flush)(ITSMFAudioDevice* audio);
/* Free the audio device */ /* Free the audio device */
void (*Free)(ITSMFAudioDevice* audio); void (*Free)(ITSMFAudioDevice* audio);
}; };

View File

@@ -45,12 +45,12 @@
typedef struct S_IUDEVICE IUDEVICE; typedef struct S_IUDEVICE IUDEVICE;
typedef struct S_IUDEVMAN IUDEVMAN; typedef struct S_IUDEVMAN IUDEVMAN;
#define BASIC_DEV_STATE_DEFINED(_arg, _type) \ #define BASIC_DEV_STATE_DEFINED(_arg, _type) \
_type (*get_##_arg)(IUDEVICE * pdev); \ WINPR_ATTR_NODISCARD _type (*get_##_arg)(IUDEVICE * pdev); \
void (*set_##_arg)(IUDEVICE * pdev, _type _arg) void (*set_##_arg)(IUDEVICE * pdev, _type _arg)
#define BASIC_DEVMAN_STATE_DEFINED(_arg, _type) \ #define BASIC_DEVMAN_STATE_DEFINED(_arg, _type) \
_type (*get_##_arg)(IUDEVMAN * udevman); \ WINPR_ATTR_NODISCARD _type (*get_##_arg)(IUDEVMAN * udevman); \
void (*set_##_arg)(IUDEVMAN * udevman, _type _arg) void (*set_##_arg)(IUDEVMAN * udevman, _type _arg)
typedef struct typedef struct
@@ -72,7 +72,7 @@ typedef BOOL (*PREGISTERURBDRCSERVICE)(IWTSPlugin* plugin, IUDEVMAN* udevman);
typedef struct typedef struct
{ {
IWTSPlugin* plugin; IWTSPlugin* plugin;
PREGISTERURBDRCSERVICE pRegisterUDEVMAN; WINPR_ATTR_NODISCARD PREGISTERURBDRCSERVICE pRegisterUDEVMAN;
const ADDIN_ARGV* args; const ADDIN_ARGV* args;
} FREERDP_URBDRC_SERVICE_ENTRY_POINTS; } FREERDP_URBDRC_SERVICE_ENTRY_POINTS;
typedef FREERDP_URBDRC_SERVICE_ENTRY_POINTS* PFREERDP_URBDRC_SERVICE_ENTRY_POINTS; typedef FREERDP_URBDRC_SERVICE_ENTRY_POINTS* PFREERDP_URBDRC_SERVICE_ENTRY_POINTS;
@@ -97,64 +97,67 @@ typedef void (*t_isoch_transfer_cb)(IUDEVICE* idev, GENERIC_CHANNEL_CALLBACK* ca
struct S_IUDEVICE struct S_IUDEVICE
{ {
/* Transfer */ /* Transfer */
int (*isoch_transfer)(IUDEVICE* idev, GENERIC_CHANNEL_CALLBACK* callback, UINT32 MessageId, WINPR_ATTR_NODISCARD int (*isoch_transfer)(
UINT32 RequestId, UINT32 EndpointAddress, UINT32 TransferFlags, IUDEVICE* idev, GENERIC_CHANNEL_CALLBACK* callback, UINT32 MessageId, UINT32 RequestId,
UINT32 StartFrame, UINT32 ErrorCount, BOOL NoAck, UINT32 EndpointAddress, UINT32 TransferFlags, UINT32 StartFrame, UINT32 ErrorCount,
const BYTE* packetDescriptorData, UINT32 NumberOfPackets, BOOL NoAck, const BYTE* packetDescriptorData, UINT32 NumberOfPackets, UINT32 BufferSize,
UINT32 BufferSize, const BYTE* Buffer, t_isoch_transfer_cb cb, const BYTE* Buffer, t_isoch_transfer_cb cb, UINT32 Timeout);
UINT32 Timeout);
BOOL(*control_transfer) WINPR_ATTR_NODISCARD BOOL (*control_transfer)(IUDEVICE* idev, UINT32 RequestId,
(IUDEVICE* idev, UINT32 RequestId, UINT32 EndpointAddress, UINT32 TransferFlags, UINT32 EndpointAddress, UINT32 TransferFlags,
BYTE bmRequestType, BYTE Request, UINT16 Value, UINT16 Index, UINT32* UrbdStatus, BYTE bmRequestType, BYTE Request, UINT16 Value,
UINT32* BufferSize, BYTE* Buffer, UINT32 Timeout); UINT16 Index, UINT32* UrbdStatus,
UINT32* BufferSize, BYTE* Buffer, UINT32 Timeout);
int (*bulk_or_interrupt_transfer)(IUDEVICE* idev, GENERIC_CHANNEL_CALLBACK* callback, WINPR_ATTR_NODISCARD int (*bulk_or_interrupt_transfer)(
UINT32 MessageId, UINT32 RequestId, UINT32 EndpointAddress, IUDEVICE* idev, GENERIC_CHANNEL_CALLBACK* callback, UINT32 MessageId, UINT32 RequestId,
UINT32 TransferFlags, BOOL NoAck, UINT32 BufferSize, UINT32 EndpointAddress, UINT32 TransferFlags, BOOL NoAck, UINT32 BufferSize,
const BYTE* data, t_isoch_transfer_cb cb, UINT32 Timeout); const BYTE* data, t_isoch_transfer_cb cb, UINT32 Timeout);
int (*select_configuration)(IUDEVICE* idev, UINT32 bConfigurationValue); WINPR_ATTR_NODISCARD int (*select_configuration)(IUDEVICE* idev, UINT32 bConfigurationValue);
int (*select_interface)(IUDEVICE* idev, BYTE InterfaceNumber, BYTE AlternateSetting); WINPR_ATTR_NODISCARD int (*select_interface)(IUDEVICE* idev, BYTE InterfaceNumber,
BYTE AlternateSetting);
int (*control_pipe_request)(IUDEVICE* idev, UINT32 RequestId, UINT32 EndpointAddress, WINPR_ATTR_NODISCARD int (*control_pipe_request)(IUDEVICE* idev, UINT32 RequestId,
UINT32* UsbdStatus, int command); UINT32 EndpointAddress, UINT32* UsbdStatus,
int command);
UINT32(*control_query_device_text) WINPR_ATTR_NODISCARD UINT32 (*control_query_device_text)(IUDEVICE* idev, UINT32 TextType,
(IUDEVICE* idev, UINT32 TextType, UINT16 LocaleId, UINT8* BufferSize, BYTE* Buffer); UINT16 LocaleId, UINT8* BufferSize,
BYTE* Buffer);
int (*os_feature_descriptor_request)(IUDEVICE* idev, UINT32 RequestId, BYTE Recipient, WINPR_ATTR_NODISCARD int (*os_feature_descriptor_request)(
BYTE InterfaceNumber, BYTE Ms_PageIndex, IUDEVICE* idev, UINT32 RequestId, BYTE Recipient, BYTE InterfaceNumber, BYTE Ms_PageIndex,
UINT16 Ms_featureDescIndex, UINT32* UsbdStatus, UINT16 Ms_featureDescIndex, UINT32* UsbdStatus, UINT32* BufferSize, BYTE* Buffer,
UINT32* BufferSize, BYTE* Buffer, UINT32 Timeout); UINT32 Timeout);
void (*cancel_all_transfer_request)(IUDEVICE* idev); void (*cancel_all_transfer_request)(IUDEVICE* idev);
int (*cancel_transfer_request)(IUDEVICE* idev, UINT32 RequestId); WINPR_ATTR_NODISCARD int (*cancel_transfer_request)(IUDEVICE* idev, UINT32 RequestId);
int (*query_device_descriptor)(IUDEVICE* idev, int offset); WINPR_ATTR_NODISCARD int (*query_device_descriptor)(IUDEVICE* idev, int offset);
BOOL (*detach_kernel_driver)(IUDEVICE* idev); WINPR_ATTR_NODISCARD BOOL (*detach_kernel_driver)(IUDEVICE* idev);
BOOL (*attach_kernel_driver)(IUDEVICE* idev); WINPR_ATTR_NODISCARD BOOL (*attach_kernel_driver)(IUDEVICE* idev);
int (*query_device_port_status)(IUDEVICE* idev, UINT32* UsbdStatus, UINT32* BufferSize, WINPR_ATTR_NODISCARD int (*query_device_port_status)(IUDEVICE* idev, UINT32* UsbdStatus,
BYTE* Buffer); UINT32* BufferSize, BYTE* Buffer);
MSUSB_CONFIG_DESCRIPTOR* (*complete_msconfig_setup)(IUDEVICE* idev, WINPR_ATTR_NODISCARD MSUSB_CONFIG_DESCRIPTOR* (*complete_msconfig_setup)(
MSUSB_CONFIG_DESCRIPTOR* MsConfig); IUDEVICE* idev, MSUSB_CONFIG_DESCRIPTOR* MsConfig);
/* Basic state */ /* Basic state */
int (*isCompositeDevice)(IUDEVICE* idev); WINPR_ATTR_NODISCARD int (*isCompositeDevice)(IUDEVICE* idev);
int (*isExist)(IUDEVICE* idev); WINPR_ATTR_NODISCARD int (*isExist)(IUDEVICE* idev);
int (*isAlreadySend)(IUDEVICE* idev); WINPR_ATTR_NODISCARD int (*isAlreadySend)(IUDEVICE* idev);
int (*isChannelClosed)(IUDEVICE* idev); WINPR_ATTR_NODISCARD int (*isChannelClosed)(IUDEVICE* idev);
void (*setAlreadySend)(IUDEVICE* idev); void (*setAlreadySend)(IUDEVICE* idev);
void (*setChannelClosed)(IUDEVICE* idev); void (*setChannelClosed)(IUDEVICE* idev);
void (*markChannelClosed)(IUDEVICE* idev); void (*markChannelClosed)(IUDEVICE* idev);
char* (*getPath)(IUDEVICE* idev); WINPR_ATTR_NODISCARD char* (*getPath)(IUDEVICE* idev);
void (*free)(IUDEVICE* idev); void (*free)(IUDEVICE* idev);
@@ -179,16 +182,18 @@ struct S_IUDEVMAN
/* Manage devices */ /* Manage devices */
void (*rewind)(IUDEVMAN* idevman); void (*rewind)(IUDEVMAN* idevman);
BOOL (*has_next)(IUDEVMAN* idevman); WINPR_ATTR_NODISCARD BOOL (*has_next)(IUDEVMAN* idevman);
BOOL (*unregister_udevice)(IUDEVMAN* idevman, BYTE bus_number, BYTE dev_number); WINPR_ATTR_NODISCARD BOOL (*unregister_udevice)(IUDEVMAN* idevman, BYTE bus_number,
size_t (*register_udevice)(IUDEVMAN* idevman, BYTE bus_number, BYTE dev_number, UINT16 idVendor, BYTE dev_number);
UINT16 idProduct, UINT32 flag); WINPR_ATTR_NODISCARD size_t (*register_udevice)(IUDEVMAN* idevman, BYTE bus_number,
IUDEVICE* (*get_next)(IUDEVMAN* idevman); BYTE dev_number, UINT16 idVendor,
IUDEVICE* (*get_udevice_by_UsbDevice)(IUDEVMAN* idevman, UINT32 UsbDevice); UINT16 idProduct, UINT32 flag);
IUDEVICE* (*get_udevice_by_ChannelID)(IUDEVMAN* idevman, UINT32 channelID); WINPR_ATTR_NODISCARD IUDEVICE* (*get_next)(IUDEVMAN* idevman);
WINPR_ATTR_NODISCARD IUDEVICE* (*get_udevice_by_UsbDevice)(IUDEVMAN* idevman, UINT32 UsbDevice);
WINPR_ATTR_NODISCARD IUDEVICE* (*get_udevice_by_ChannelID)(IUDEVMAN* idevman, UINT32 channelID);
/* Extension */ /* Extension */
int (*isAutoAdd)(IUDEVMAN* idevman); WINPR_ATTR_NODISCARD int (*isAutoAdd)(IUDEVMAN* idevman);
/* Basic state */ /* Basic state */
BASIC_DEVMAN_STATE_DEFINED(device_num, UINT32); BASIC_DEVMAN_STATE_DEFINED(device_num, UINT32);
@@ -197,8 +202,8 @@ struct S_IUDEVMAN
/* control semaphore or mutex lock */ /* control semaphore or mutex lock */
void (*loading_lock)(IUDEVMAN* idevman); void (*loading_lock)(IUDEVMAN* idevman);
void (*loading_unlock)(IUDEVMAN* idevman); void (*loading_unlock)(IUDEVMAN* idevman);
BOOL (*initialize)(IUDEVMAN* idevman, UINT32 channelId); WINPR_ATTR_NODISCARD BOOL (*initialize)(IUDEVMAN* idevman, UINT32 channelId);
UINT (*listener_created_callback)(IUDEVMAN* idevman); WINPR_ATTR_NODISCARD UINT (*listener_created_callback)(IUDEVMAN* idevman);
IWTSPlugin* plugin; IWTSPlugin* plugin;
UINT32 controlChannelId; UINT32 controlChannelId;