- filecheck .ru
- Вот так, вы сможете исправить ошибки, связанные с wininet.exe
- Информация о файле wininet.exe
- Комментарий пользователя
- Лучшие практики для исправления проблем с wininet
- wininet сканер
- Введение в WinInet
- Необходимый минимум
- Функции WinInet API
- InternetOpen
- InternetConnect
- HttpOpenRequest
- HttpSendRequest
- InternetReadFile
- InternetCloseHandle
- Читаем страницу
- Класс CHTTPReader
- Объявление класса
- Методы
- CHTTPReader
- OpenInternet, OpenConnection
- Get, Post
- GetData
- GetDataSize
- SetDataBuffer
- CloseRequest, CloseConnection, CloseInternet
- SetDefaultHeader
- GetError
- Снова читаем страницу
- Общение с сервером
- Чтение курса валют
- Клиент — Сервер
- Вспомогательные средства
- Где эта улица, где этот дом? >8(
- Заключение
filecheck .ru
Большинство антивирусных программ распознает wininet.exe как вирус, как например, F-Secure определяет файл как W32/Malware, и Kaspersky определяет файл как Email-Worm.Win32.Agent.ghg.
Бесплатный форум с информацией о файлах поможет вам найти информацию, как удалить файл. Если вы знаете что-нибудь об этом файле, пожалуйста, оставьте комментарий для других пользователей.
Вот так, вы сможете исправить ошибки, связанные с wininet.exe
- Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
- Обновите программу Front End Client. Обновление можно найти на сайте производителя (ссылка приведена ниже).
- В следующих пунктах предоставлено описание работы wininet.exe.
Информация о файле wininet.exe
Процесс Front End Client принадлежит программе DotNetModule от DotNetModule (версия v3.06).
Описание: wininet.exe не является важным для Windows и часто вызывает проблемы. Файл wininet.exe находится в папке C:\Windows\System32. Известны следующие размеры файла для Windows 10/8/7/XP 14,848 байт (33% всех случаев), 13,824 байт, 78,848 байт или 90,112 байт.
У файла нет информации о создателе этого файла. Это неизвестный файл в папке Windows. Приложение не видно пользователям. Процесс слушает или шлет данные на открытые порты в сети или по интернету. Это не системный процесс Windows. Wininet.exe способен спрятать себя. Поэтому технический рейтинг надежности 95% опасности.
Если wininet.exe находится в подпапках «C:\Program Files», тогда рейтинг надежности 42% опасности. Размер файла 94,208 байт. Приложение не видно пользователям. Это не системный файл Windows. Wininet.exe способен записывать ввод данных и спрятать себя.
Важно: Вы должны проверить файл wininet.exe на вашем компьютере, чтобы убедится, что это вредоносный процесс. Мы рекомендуем Security Task Manager для безопасности вашего компьютера.
Комментарий пользователя
Лучшие практики для исправления проблем с wininet
Следующие программы так же полезны для грубокого анализа: Security Task Manager исследует активный процесс wininet на вашем компьютере и явно говорит, что он делает. Malwarebytes’ — популярная антивирусная утилита, которая сообщает вам, если wininet.exe на вашем компьютере отображает назойливую рекламу, замедляя быстродействие компьютера. Этот тип нежелательной рекламы не рассматривается некоторыми антивирусными программами в качестве вируса и таким образом не удаляется при лечении.
Чистый и аккуратный компьютер является ключевым требованием для избежания проблем с ПК. Это означает: проверка на наличие вредоносных программ, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые вам больше не нужны, проверка Автозагрузки (используя msconfig) и активация Автоматического обновления Windows. Всегда помните о создании периодических бэкапов, или как минимум о создании точек восстановления.
Если у вас актуальная проблема, попытайтесь вспомнить последнее, что вы сделали, или последнюю программу, которую вы установили, прежде чем проблема появилась первый раз. Используйте resmon команду, чтобы определить процесс, который вызывает у вас проблему. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
wininet сканер
Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
SpeedUpMyPC бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.
Введение в WinInet
Автор: Игорь Ткачёв
Опубликовано: 03.08.2001
Исправлено: 31.03.2005
Версия текста: 1.0
Ещё вчера Вы даже и не думали о написании программ, использующих интернет протоколы, полагая, что это удел web-программистов. Но, уже сегодня перед Вами стоит задача прочитать/записать, передать/принять, получить/послать что-либо из своей программы на какой-либо интернет-сервер. Какие средства для этого существуют? Сколько времени уйдёт на их изучение и эксперименты? Давайте рассмотрим один из способов, который позволяет решать большинство подобных задач в максимально короткие сроки.
Win32 Internet Extensions, или WinInet, представляет собой API для доступа к общим протоколам интернет, включая FTP, HTTP и Gopher. Это высокоуровневый API, позволяющий, в отличие от WinSock или TCP/IP, не заботиться о деталях реализации соответствующих интернет протоколов. Всего API содержит чуть менее сотни функций на все случаи жизни, но нам для начала работы с WinInet потребуется не более десятка.
Необходимый минимум
Рассмотрим простейший пример, позволяющий читать WWW страницу с заданного HTTP сервера. Общий алгоритм работы может быть следующим:
Функции WinInet API
Разберём все функции по порядку и рассмотрим только те параметры, которые нам будут необходимы.
InternetOpen
Эта функция инициализирует WinInet и возвращает дескриптор, который необходим для вызова других функций WinInet. В случае неудачи возвращается NULL. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError , которая возвращает один из кодов, определённых в файле wininet.h .
lpszAgent | Задаёт имя приложения, которое используется как агент в HTTP протоколе. Сервер может определять агента с помощью переменной сервера HTTP_USER_AGENT. Если ваша программа собирается выдавать себя за MS Internet Explorer, передайте в этот параметр строчку «Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914) « |
dwAccessType | Задаёт необходимый тип доступа (прямой или через прокси). Мы будем использовать значение INTERNET_OPEN_TYPE_PRECONFIG, которое устанавливает тип доступа в соответствии с установками в реестре. |
InternetConnect
Эта функция открывает FTP, HTTP или Gopher сессию для заданного сайта.
hInternet | Дескриптор, полученный вызовом предыдущей функции. |
lpszServerName | Задаёт имя сервера. Это может быть обычное имя, например www.rsdn.ru, или адрес IP. |
nServerPort | Номер TCP/IP порта к которому мы собираемся подсоединиться. Мы будем использовать значене INTERNET_DEFAULT_HTTP_PORT для обычных соединений, либо INTERNET_DEFAULT_HTTPS_PORT для SSL соединений. |
dwService | Тип сервиса — FTP, HTTP или Gopher. Мы будем использовать INTERNET_SERVICE_HTTP. |
HttpOpenRequest
HTTP запрос выполняется в несколько этапов: открытие запроса, определение HTTP заголовка, собственно отправка запроса, чтение и обработка данных. Эта функция, как следует из её названия, открывает HTTP запрос.
hConnect | Дескриптор сессии. |
lpszVerb | Задаёт имя команды запроса. Мы будем использавать методы «GET» и «POST» . |
lpszObjectName | Имя целевого объекта. Это может быть просто HTML файл, скрипт или выполняемый модуль на сервере. |
lpszReferer | URL адрес предыдущей страницы. Чаще всего этот параметр игнорируется серверами, но если вдруг сервер перестанет подавать признаки жизни, попробуйте задать его, может помочь. |
lpszAcceptTypes | Определяет тип содержимого допускаемого клиентской стороной. Иногда MS IE передаёт сюда вот такую длинную строчку: «image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*» , иногда это просто «*/*» . |
dwFlags | Комбинация интернет флагов. Например, при использовании SSL соединений мы будем указывать флаг INTERNET_FLAG_SECURE. Так же нам будет полезен флаг INTERNET_FLAG_KEEP_CONNECTION, который позволяет удерживать соединение с сервером между запросами. Это бывает полезно, если мы хотим, чтобы сервер не забыл о нас во время сессий требующих входа по паролю. |
HttpSendRequest
Отсылает запрос на сервер.
hRequest | Дескриптор, полученный вызовом предыдущей функции. |
lpszHeaders dwHeadersLength | Позволяет добавлять дополнительные заголовки к запросу. Подробнее об HTTP заголовках можно узнать на www.w3.org. |
lpOptional dwOptionalLength | Указатель на данные, которые будут посланы на сервер вместе с запросом. Используется в методах «POST» и «PUT» . |
InternetReadFile
Эта функция выполняет невероятно полезную работу, она позволяет читать данные результата запроса.
hFile | Дескриптор сессии, полученный вызовом функции HttpOpenRequest . |
lpBuffer dwNumberOfBytesToRead | Адрес и размер буфера, в который будут записаны данные. |
lpdwNumberOfBytesRead | Число прочитанных байт. |
InternetCloseHandle
Эта функция закрывает любой из дескрипторов, созданных предыдущими функциями.
hInternet | Дескриптор, полученный вызовом функций InternetOpen , InternetConnect или HttpOpenRequest . |
Читаем страницу
Теперь мы знаем всё необходимое, чтобы написать простую программу для чтения HTML странички. Наш пример может выглядеть следующим образом:
Как видите, всё довольно просто, хотя данный пример можно сделать ещё проще. Дело в том, что WinInet включает функцию InternetOpenUrl , которая может заменить пару HttpOpenRequest и HttpSendRequest . Но лёгкие пути не для нас, тем более что нас интересует не простое чтение страниц, а полноценное общение с сервером.
Что нам для этого потребуется?
- Прежде всего, общение подразумевает диалог, следовательно, нам нужно уметь не только читать данные с сервера, но и уметь что-то ему передавать. Нет ничего проще. Для этого нужно только заменить параметр lpszVerb функции HttpOpenRequest с «GET» на «PUT» или «POST» и использовать параметры lpOptional , dwOptionalLength функции HttpSendRequest для передачи собственно данных.
- Так же для понимания происходяшего и отладки наших запросов нам будут нужны соответствующие средства.
- И конечно же ни один добропорядочный C++ программист не будет спокойно созерцать приведённый выше код. У него обязательно появится желание завернуть всё это в класс.
Давайте с этого и начнём.
Класс CHTTPReader
MFC содержит целый набор классов, позволяющих работать с WinInet, зачем нужен ещё один класс? Во-первых, классы MFC — это обёртки функций API, поэтому наш пример не будет выглядеть намного проще. Нам придётся создавать несколько объектов, по-прежнему помнить все необходимые флаги и частенько заглядывать в MSDN. С другой стороны, наш класс не будет универсальным, он будет работать только с HTTP протоколом и иметь минимально необходимый набор функций. Зато он будет простой и лёгкий в использовании. Во-вторых, MFC — это MFC, если мы не хотим использовать MFC, то мы будем вынуждены использовать API или. написать свой класс :o)
Объявление класса
Вот интерфейс класса CHTTPReader:
Выделены те функции, которые мы будем использовать постоянно. Остальные могут быть полезны, но использовать их не обязательно. Ниже приведено описание методов класса CHTTPReader.
Методы
CHTTPReader
lpszServerName | Имя сервера или адрес IP. Например www.rsdn.ru. Имя сервера также можно задать при вызове функции OpenConnection . |
bUseSSL | Использование Secure Sockets Layer. |
OpenInternet, OpenConnection
Автоматически вызываются при запросе. Первая функция инициализирует WinInet и может использоваться для указания имени приложения. Вторая открывает HTTP сессию и позволяет указывать имя сервера.
lpszAgent | Задаёт имя приложения, которое используется как агент в HTTP протоколе. Сервер может определять агента с помощью переменной сервера HTTP_USER_AGENT. |
lpszServerName | Задаёт имя сервера. Если этот параметр не задан и имя сервера не задано в конструкторе, то в качестве имени сервера используется «localhost» . |
Get, Post
Отправляют запрос на сервер на сервер методом «GET» или «POST» .
lpszAction | Имя целевой страницы или файла. |
lpszData | Данные, передаваемые на сервер. |
lpszReferer | URL адрес предыдущей страницы. Иногда необходимо указывать для нормальной работы сервера. |
GetData
Читает данные с сервера.
lpszBuffer dwSize | Адрес и размер буфера, в который будут записаны данные. |
lpdwBytesRead | Число прочитанных байт (если интересно). |
Вторая версия функции читает данные во внутренний буфер, размер которого определяется с помощью вызова GetDataSize . При ошибке или завершении чтения данных возвращается NULL.
GetDataSize
Возвращает размер данных, доступных для чтения.
Использует для получения информации функцию HttpQueryInfo с параметром HTTP_QUERY_CONTENT_LENGTH. Я встречался с ситуацией, когда эта функция возвращала ноль, хотя после этого данные читались в полном объёме. Можно было бы использовать функцию InternetQueryDataAvailable , но с ней тоже не всё в порядке. Например, при чтении страницы ASP эта функция выдаёт не размер результирующей страницы, а размер самого скритпа, что, несомненно, является весьма интересной информацией, но совершенно бесполезной для нас. В результате, я не знаю и не могу предложить Вам абсолютно надёжного способа получить точную информацию о размере запрашиваемых данных. Скорее всего, это будет работать, но если Вы предполагаете использовать сервера, которые не можете заранее протестировать, то лучше не полагайтесь на эти функции.
SetDataBuffer
Устанавливает размер внутреннего буфера.
dwBufferSize | Новый размер буфера. |
CloseRequest, CloseConnection, CloseInternet
Вызываются автоматически при необходимости. Освобождают соответствующие ресурсы.
SetDefaultHeader
Позволяет устанавливать HTTP заголовки.
lpszDefaultHeader | Содержание заголовка. |
GetError
Возвращает код GetLastError для последнего неудавшегося вызова функций WinInet.
Снова читаем страницу
На этот раз мы будем использовать класс CHTTPReader для чтения той же страницы новостей. Вот что из этого получилось:
Выделенные строчки — это собственно то, что относится к запросу, остальное — имитация бурной деятельности. Как видите теперь всё совсем просто.
Общение с сервером
Чтение курса валют
Давайте займёмся чем-нибудь более полезным, чем просто чтение страниц новостей. Например, как это ни странно, но у нас уже есть все средства для чтения данных о курсах валют на заданную дату с сервера ЦБ РФ. Следующий пример демонстрирует эту возможность.
Фактически, мы формируем строку запроса, которая в браузере выглядит следующим образом «http://www.cbr.ru/currency_base/D_print.asp?date_req=DD.MM.YYYY» , где вместо DD, MM, YYYY нужно подставить необходимую дату. Затем мы отправляем запрос на сервер и парсируем результат, выделяя необходимую информацию. Этот пример прекрасно работает, но имеет один существенный недостаток — он зависит от структуры HTML документа, которая может быть в любой момент изменена программистами ЦБ РФ.
Клиент — Сервер
Теперь настало время переключить наше внимание на разработку полноценного клиент-серверного приложения. То, что оно будет делать, не так важно, более важным является то, как оно это будет делать. Поэтому в качестве примера возьмём простой калькулятор, точнее даже умножитель. Вот текст ASP-скрипта нашей серверной части приложения:
Всё, что нам нужно для работы — это выделенный фрагмент, остальная часть текста приведена исключительно для демонстрации. Можете запустить этот скрипт на выполнение и убедиться, что он работает. Кликните по следующей ссылке: calc.asp.
Теперь займёмся клиентской частью нашего приложения. Передача данных на сервер производится методом «PUT» или «POST» . У нас уже есть функция Post , которая умеет выполнять всю необходимую работу. Если Вы заметили, выделенный фрагмент текста в calc.asp выглядит необычно для ASP-скрипта. Всё правильно, наш скрипт возвращает данные в формате XML. А куда сейчас без него? :o) Наш клиент будет получать результат в XML-формате и использовать MSXML парсер для обработки результата:
Запустите этот пример и убедитесь в его работоспособности. Заметьте, что всю чёрную работу по умножению двух чисел выполняет RSDN.ru ;o) Конечно, этот способ не самый быстрый, но, тем не менее, если Вы будете испытывать проблемы с умножением, то всегда милости просим!
Вспомогательные средства
Для отладки наших запросов нам, прежде всего, потребуется интернет-сервер. В комплект Windows 2000 входит IIS 5.0, который нам вполне подойдёт, хотя, Вы можете использовать любой другой. Многие HTML формы помимо, видимых полей ввода, содержат скрытые поля, которые часто бывают размазаны по всему HTML документу. Выискивание этих полей задача не самая простая, особенно если документ создан программно и программисту незачем заботиться о его читабельности. Справится с этой проблемой нам поможет следующий скрипт:
Скопируйте этот скрипт в каталог :\Inetpub\wwwroot\ , запустите браузер и введите адрес http://localhost/var.asp . Браузер выведет две таблички, одна из которых пока пустая, вторая содержит список переменных сервера, анализ которых может быть весьма полезен.
Для того чтобы проверить наш скрипт в действии давайте проделаем следующее:
- Кликните по этой ссылке — http://www.usps.com/ncsc/lookups/lookup_zip+4.html. Это сайт почтового сервиса US, здесь можно уточнить почтовый адрес, если Вы не знаете, например, ZIP-код.
- Кликните правой кнопкой мышки на странице и выберите пункт «View Source» контекстного меню.
- В появившемся тексте страницы найдите тег и его аттрибут ACTION . Сохраните значение атрибута, оно нам ещё понадобится.
- Замените значение аттрибута на http://localhost/var.asp и сохраните файл на диске с расширением html . Допустим это будет c:\test.html .
- Вернитесь в браузер и введите в поле адреса путь к нашему файлу: c:\test.html и жмите Enter .
- Заполните форму какими-нибудь значениями и жмите кнопку Process .
Браузер опять отобразит var.asp , но на этот раз первая таблица будет заполнена именами полей и значениями формы ввода предыдущей страницы, т.е. Вы должны получить примерно следующее:
Form Variable | Value |
Firm | 123 |
Urbanization | |
Delivery Address | 123 |
City | 123 |
Submit | Process |
State | 12 |
Zip Code | 123 |
Теперь мы имеем полную картину, включая имена обычных и скрытых полей и их значения.
Где эта улица, где этот дом? >8(
Воспользуемся полученной информацией для ответа на этот любопытный вопрос.
Запустите эту программу и Вы узнаете всё необходимое. Я не буду комментировать результаты запроса, прошу Вас лишь обратить внимание на название улицы и округа 🙂
Комментариями отмечены места, которые нам необходимо рассмотреть для понимания происходящего.
- Это тот самый случай, о котором я говорил раньше, для данного сервера функция HttpQueryInfo возвращает длину содержимого запроса равную нулю. В этой строчке устанавливается размер буфера, достаточный для приёма данных.
- Этот адрес я взял из атрибута ACTION тега первоначальной страницы. Заметьте, что в данном примере нам совсем не обязательно её читать, мы сразу вызываем скрипт, выполняющий запрос.
- Символ ‘=’ служит разделителем между именем поля и его значением.
- Символ ‘&’ служит разделителем между полями.
- Пробелы и другие специальные символы необходимо заменять их шестнадцатиричными эквивалентами.
- Submit — это скрытое поле. В данном случае оно только одно.
Если Вы заметили, порядок следования полей в нашем запросе и в списке полей, выданных скриптом var.asp отличаются. Если следовать последнему, то сервер вернёт страницу с информацией о том, что имя штата, которое мы ввели не найдено в базе данных. Скрипт ASP выдаёт список полей формы именно в таком неверном порядке. С другой стороны, судя по сообщению, на сервере вообще не используются имена полей, а только их нумерация. |
Заключение
К сожалению, WinInet имеет ряд ограничений, затрудняющих его использование. Подробнее об этом можно узнать в следующих статьях базы знаний Microsoft:
- INFO: WinInet Limits Connections Per Server (Q183110).
WinInet ограничивает число соединений для одного сервера, которое может быть равно двум или четырём. Такое ограничение связано с соглашениями HTTP спецификации и стандарта. - INFO: WinInet Not Supported for Use in Services (Q238425)
WinInet не может использоваться сервисами Windows NT, в частности IIS, который тоже является сервисом. Это является следствием того, что сервисы работают под системным аккаунтом и не могут читать данные из раздела HKEY_CURRENT_USER реестра. В свою очередь, для нормальной работы WinInet необходима информация о настройках SSL, прокси и т.п.
Обойти эти ограничения можно, если создавать только одно соединение в одном процессе и запускать этот процесс под несистемным аккаунтом. В частности, совсем не сложно создать COM объект как локальный сервер, поместить в него всю работу с WinInet и для каждого создаваемого объекта запускать отдельный экземпляр приложения, предварительно установив соответствующие настройки Identity в DCOM Config. Этот способ будет работать, но вряд ли его назовёшь изящным.
И, тем не менее, WinInet хорошо подходит для простых и средней сложности задач. Если Вам нужно добавить в программу, например, возможность online-регистрации, то, я надеюсь, теперь Вам понадобится для написания самой коммуникационной части не более получаса. Чтение WWW-страниц, как Вы могли убедиться, тоже не представляет никакой сложности. Фактически, программно Вы можете сделать всё, что Вы можете делать в браузере, включая процесс входа по паролю. Но, если Вы решите написать сам браузер. то, видимо, для этого лучше подойдут сокеты.