Override la configuración de privacidad de IE usando IInternetSecurityManager en el control de Webbrowser

Necesito crear un administrador de seguridad personalizado para un control de WebBrowser alojado en mi aplicación C #. El control de WebBrowser alojado debe ser independiente de la configuración de seguridad y privacidad de IE.

Problema: si la configuración de privacidad de IE está establecida en "Alta", los sitios web que dependen de cookies no funcionan correctamente en el control de WebBrowser alojado (los sitios funcionan bien si la configuración de privacidad está configurada en "Medio").

El winform que aloja el control WebBrowser proporciona la siguiente implementación para GetSecurityId, MapUrlToZone y ProcessUrlAction. ProcessUrlAction recibe una llamada del navegador incorporado para acciones de URL como ACTIVEX_RUN, SCRIPT_RUN; pero no se llama para ninguna acción de URL relacionada con cookies.

¿Hay alguna forma de habilitar las cookies para el control del navegador web? ¿O hay algo mal con el siguiente código?

private void InitBrowserSecurityData()
{
    securityID = new byte[MAX_SIZE_SECURITY_ID];

    securityID[0] = (byte)'f';
    securityID[1] = (byte)'i';
    securityID[2] = (byte)'l';
    securityID[3] = (byte)'e';
    securityID[4] = (byte)':';
    securityID[5] = 0;
    securityID[6] = 3;
    securityID[7] = 0;
    securityID[8] = 0;
    securityID[9] = 0;
}

//GetSecurityId
int IInternetSecurityManager.GetSecurityId(string pwszUrl, IntPtr pbSecurityId, ref uint pcbSecurityId, ref uint dwReserved)
{
    if (pcbSecurityId >= MAX_SIZE_SECURITY_ID)
    {
        Marshal.Copy(securityID, 0, pbSecurityId, MAX_SIZE_SECURITY_ID);
        pcbSecurityId = 9;
        return HResults.S_OK;
    }
    return (int)WinInetErrors.INET_E_DEFAULT_ACTION;
}

//MapUrlToZone
int IInternetSecurityManager.MapUrlToZone(string pwszUrl, out uint pdwZone, uint dwFlags)
{
    pdwZone = (uint)tagURLZONE.URLZONE_LOCAL_MACHINE;
    return HResults.S_OK;
}

//ProcessUrlAction
int IInternetSecurityManager.ProcessUrlAction(string pwszUrl, uint dwAction, IntPtr pPolicy, 
    uint cbPolicy, IntPtr pContext, uint cbContext, uint dwFlags, uint dwReserved)
{
    URLACTION action = (URLACTION)dwAction;

    bool hasUrlPolicy = (cbPolicy >= unchecked((uint)Marshal.SizeOf(typeof(int))));
    URLPOLICY urlPolicy = (hasUrlPolicy) ? (URLPOLICY)Marshal.ReadInt32(pPolicy) : URLPOLICY.ALLOW;

    bool hasContext = (cbContext >= unchecked((uint)Marshal.SizeOf(typeof(Guid))));
    Guid context = (hasContext) ? (Guid)Marshal.PtrToStructure(pContext, typeof(Guid)) : Guid.Empty;
    //all URL actions are allowed
    if (hasUrlPolicy)
    {
        urlPolicy = URLPOLICY.ALLOW;
        Marshal.WriteInt32(pPolicy, (int)urlPolicy);
        return HResults.S_OK;
    }
    return (int)WinInetErrors.INET_E_DEFAULT_ACTION;
}

Ya he visto estas preguntas, pero no funcionan para mí.

Nivel de seguridad para el control de WebBrowser

Custom IInternetSecurityManager no se llama con cuadros de diálogo

overriding GetSecurityId en IInternetSecurityManager

Respuestas a la pregunta(1)

Su respuesta a la pregunta