[Spice-devel] [vdagent-win PATCH] vdservice: add quotes to service path

Hans de Goede hdegoede at redhat.com
Tue Apr 9 06:12:59 PDT 2013


Hi,

On 04/09/2013 03:02 PM, Arnon Gilboa wrote:
> for the case path contains a space, see CreateService() doc:
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms682450.aspx
>
> rhbz #918635
> ---
>   vdservice/vdservice.cpp |    8 ++++++--
>   1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/vdservice/vdservice.cpp b/vdservice/vdservice.cpp
> index 9134c4b..89e0dbb 100644
> --- a/vdservice/vdservice.cpp
> +++ b/vdservice/vdservice.cpp
> @@ -170,12 +170,16 @@ bool VDService::install()
>           printf("OpenSCManager failed\n");
>           return false;
>       }
> -    TCHAR path[_MAX_PATH + 1];
> -    if (!GetModuleFileName(0, path, sizeof(path) / sizeof(path[0]))) {
> +    TCHAR path[_MAX_PATH + 2];

Shouldn't that be _MAX_PATH + 3, 2 quotes + 0, or does GetModuleFileName
already take the terminating 0 into account and was the old + 1 bogus ?



> +    DWORD len = GetModuleFileName(0, path + 1, _MAX_PATH);
> +    if (len == 0 || len == _MAX_PATH) {
>           printf("GetModuleFileName failed\n");
>           CloseServiceHandle(service_control_manager);
>           return false;
>       }
> +    // add quotes for the case path contains a space (see CreateService doc)
> +    path[0] = path[len + 1] = TEXT('\"');
> +    path[len + 2] = 0;
>       SC_HANDLE service = CreateService(service_control_manager, VD_SERVICE_NAME,
>                                         VD_SERVICE_DISPLAY_NAME, SERVICE_ALL_ACCESS,
>                                         SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,
>

Regards,

Hans


More information about the Spice-devel mailing list