Можно ли написать повар ie с помощью Win32 apis InternetSetCookieEx при работе от имени пользователя? - PullRequest
0 голосов
/ 07 августа

У меня работает служба, и мне нужно, чтобы она написала повар ie для IE. Прочитав API Win32, кажется, что функции InternetSetCookieEx и InternetGetCookieEx должны выполняться под пользовательским процессом. Поэтому я олицетворяю желаемого пользователя, а затем вызываю эти функции.

Олицетворение пользователя работает нормально (используя его в другом месте без проблем) и подтвердил, что до вызова функции InternetSetCookieEx он олицетворял правильного пользователя, однако он возвращает false, и я не вижу повара ie.

Ниже приведен код для материала ie повара. Есть ли проблема с приведенным ниже кодом или это связано с тем, что он работает как служба, олицетворяющая пользователя?

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool InternetSetCookieEx(string lpszUrlName, string lpszCookieName, string lpszCookieData, uint dwFlags, IntPtr dwReserved);

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, uint dwFlags, IntPtr lpReserved);


public static bool SetIECookie(string url, string cookie)
        {
            return InternetSetCookieEx(url, null, cookie, HTTP_ONLY, IntPtr.Zero);
        }


        public static bool DoesIECookieExist(string url, string value)
        {
        uint datasize = 2048;
        StringBuilder cookieData = new StringBuilder(Convert.ToInt32(datasize));

        if (!InternetGetCookieEx(url, null, cookieData, ref datasize, HTTP_ONLY, IntPtr.Zero))
        {
            if (datasize < 0)
            {
                return false;
            }

            cookieData = new StringBuilder(Convert.ToInt32(datasize));
            if (!InternetGetCookieEx(url, null, cookieData, ref datasize, HTTP_ONLY, IntPtr.Zero))
            {
                return false;
            }
        }

        return cookieData.ToString().Contains(value);
    }

Обновление: получение кода ошибки 259 от GetLastError (), хотя повар ie обязательно присутствует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...