[PATCH 6/6] Implement SxsLookupClrGuid

Nikolay Sivov nsivov at codeweavers.com
Tue Aug 7 13:34:10 CDT 2018


On 08/07/2018 08:45 PM, Fabian Maurer wrote:

> +BOOL WINAPI SxsLookupClrGuid(DWORD dwFlags, LPGUID pClsid, HANDLE hActCtx, PVOID pvOutputBuffer, SIZE_T cbOutputBuffer, PSIZE_T pcbOutputBuffer)

Please fix argument type names.

> +    if (!FindActCtxSectionGuid(FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, 0, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, pClsid, &guid_info))
> +    {
> +        DWORD error = GetLastError();
> +        if (error != ERROR_SXS_KEY_NOT_FOUND)
> +            ERR("Failed to find guid: %d\n", error);
> +        SetLastError(ERROR_NOT_FOUND);
> +        return FALSE;
> +    }
This looks too complicated.

> +    QueryActCtxW(0, guid_info.hActCtx, &guid_info.ulAssemblyRosterIndex, AssemblyDetailedInformationInActivationContext, NULL, 0, &bytes_assembly_info);
> +    assembly_info = heap_alloc(bytes_assembly_info);
> +    if (!QueryActCtxW(0, guid_info.hActCtx, &guid_info.ulAssemblyRosterIndex,
> +            AssemblyDetailedInformationInActivationContext, assembly_info, bytes_assembly_info, &bytes_assembly_info))
First call should also be checked for failure.

> +    len_identity = (lstrlenW(ptr_identity) + 1) * sizeof(WCHAR);
> +    len_name = (lstrlenW(ptr_name) + 1) * sizeof(WCHAR);
> +    if (class_data->version_len > 0)
> +        len_version = (lstrlenW(ptr_version) + 1) * sizeof(WCHAR);
You already have lengths of all three fields at this point.


> +#define copy_str(target, ptr, len)                 \
> +        target = len ? (void *)ret_strings : NULL; \
> +        memcpy(ret_strings, ptr, len);             \
> +        ret_strings += len;
> +    copy_str(ret->pcwszAssemblyIdentity, ptr_identity, len_identity);
> +    copy_str(ret->pcwszTypeName , ptr_name, len_name);
> +    copy_str(ret->pcwszRuntimeVersion, ptr_version, len_version);
> +#undef copy_str
Could you add a test for this layout? And probably remove a macro too.




More information about the wine-devel mailing list