mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
[rdpdr,hotplug] fix passing of device::Id back to caller
This commit is contained in:
parent
017a4ca0e0
commit
3dee8895ec
@ -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 */
|
||||
|
@ -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 };
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user