Index: base/system/services/rpcserver.c =================================================================== --- base/system/services/rpcserver.c (révision 56737) +++ base/system/services/rpcserver.c (copie de travail) @@ -4822,23 +4822,36 @@ if (Info.dwInfoLevel == SERVICE_CONFIG_DESCRIPTION) { - LPSERVICE_DESCRIPTIONW lpServiceDescription; + LPSERVICE_DESCRIPTIONW lpServiceDescription = (LPSERVICE_DESCRIPTIONW)Info.psd; - lpServiceDescription = (LPSERVICE_DESCRIPTIONW)Info.psd; - + /* Modify the service's description, if specified */ if (lpServiceDescription != NULL && lpServiceDescription->lpDescription != NULL) { - DPRINT("Setting value %S\n", lpServiceDescription->lpDescription); - dwError = RegSetValueExW(hServiceKey, - L"Description", - 0, - REG_SZ, - (LPBYTE)lpServiceDescription->lpDescription, - (wcslen(lpServiceDescription->lpDescription) + 1) * sizeof(WCHAR)); - if (dwError != ERROR_SUCCESS) - goto done; + /* If the description is "" then we delete it */ + if (*lpServiceDescription->lpDescription == 0) + { + DPRINT("Delete service's description\n"); + dwError = RegDeleteValueW(hServiceKey, L"Description"); + + if (dwError == ERROR_FILE_NOT_FOUND) + dwError = ERROR_SUCCESS; + } + else + { + DPRINT("Setting service's description value %S\n", lpServiceDescription->lpDescription); + dwError = RegSetValueExW(hServiceKey, + L"Description", + 0, + REG_SZ, + (LPBYTE)lpServiceDescription->lpDescription, + (wcslen(lpServiceDescription->lpDescription) + 1) * sizeof(WCHAR)); + } } + else + { + dwError = ERROR_SUCCESS; + } } else if (Info.dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS) {