[rdpdr,hotplug] fix passing of device::Id back to caller

This commit is contained in:
akallabeth 2025-05-22 11:17:00 +02:00
parent 017a4ca0e0
commit 3dee8895ec
No known key found for this signature in database
GPG Key ID: A49454A3FC909FD5
4 changed files with 11 additions and 7 deletions

View File

@ -932,8 +932,10 @@ static void drive_message_free(void* obj)
* @return 0 on success, otherwise a Win32 error code
*/
static UINT drive_register_drive_path(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints, const char* name,
const char* path, BOOL automount)
const char* path, BOOL automount, uint32_t* pid)
{
WINPR_ASSERT(pid);
size_t length = 0;
DRIVE_DEVICE* drive = NULL;
UINT error = ERROR_INTERNAL_ERROR;
@ -1035,6 +1037,7 @@ static UINT drive_register_drive_path(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints,
WLog_ERR(TAG, "RegisterDevice failed with error %" PRIu32 "!", error);
goto out_error;
}
*pid = drive->device.id;
drive->async = !freerdp_settings_get_bool(drive->rdpcontext->settings,
FreeRDP_SynchronousStaticChannels);
@ -1104,8 +1107,8 @@ FREERDP_ENTRY_POINT(
}
}
error =
drive_register_drive_path(pEntryPoints, drive->device.Name, drive->Path, drive->automount);
error = drive_register_drive_path(pEntryPoints, drive->device.Name, drive->Path,
drive->automount, &drive->device.Id);
#else
/* Special case: path[0] == '*' -> export all drives */
/* Special case: path[0] == '%' -> user home dir */

View File

@ -182,7 +182,7 @@ static const char PARALLEL_SERVICE_NAME[] = "parallel";
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT devman_load_device_service(DEVMAN* devman, const RDPDR_DEVICE* device, rdpContext* rdpcontext)
UINT devman_load_device_service(DEVMAN* devman, RDPDR_DEVICE* device, rdpContext* rdpcontext)
{
const char* ServiceName = NULL;
DEVICE_SERVICE_ENTRY_POINTS ep = { 0 };

View File

@ -26,7 +26,7 @@
#include "rdpdr_main.h"
void devman_unregister_device(DEVMAN* devman, void* key);
UINT devman_load_device_service(DEVMAN* devman, const RDPDR_DEVICE* device, rdpContext* rdpcontext);
UINT devman_load_device_service(DEVMAN* devman, RDPDR_DEVICE* device, rdpContext* rdpcontext);
DEVICE* devman_get_device_by_id(DEVMAN* devman, UINT32 id);
DEVICE* devman_get_device_by_type(DEVMAN* devman, UINT32 type);

View File

@ -1163,8 +1163,8 @@ static UINT rdpdr_add_devices(rdpdrPlugin* rdpdr)
for (UINT32 index = 0; index < freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount);
index++)
{
const RDPDR_DEVICE* device =
freerdp_settings_get_pointer_array(settings, FreeRDP_DeviceArray, index);
RDPDR_DEVICE* device =
freerdp_settings_get_pointer_array_writable(settings, FreeRDP_DeviceArray, index);
WINPR_ASSERT(device);
if (device->Type == RDPDR_DTYP_FILESYSTEM)
@ -2325,6 +2325,7 @@ static UINT rdpdr_register_device(RdpdrClientContext* context, const RDPDR_DEVIC
return ERROR_INVALID_DATA;
UINT rc = devman_load_device_service(rdpdr->devman, copy, rdpdr->rdpcontext);
*pid = copy->Id;
freerdp_device_free(copy);
if (rc == CHANNEL_RC_OK)
rc = rdpdr_try_send_device_list_announce_request(rdpdr);
return rc;