Пишу приложение на асме. Для работы с сетью по условию нужно использовать либу WinHttp. По умолчанию файлов winhttp.lib и winhttp.inc в masm32(ver10)[чем компилю] нет, поэтому пришлось их поискать. Первый нашёл, второй пишу сам по мере необходимости(основным источником для написания является msdn и winhttp.h). Содержание winhttp.inc: Код (Text): WinHttpOpen PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpConnect PROTO :DWORD,:DWORD,:DWORD,:DWORD WinHttpCloseHandle PROTO :DWORD WINHTTP_ACCESS_TYPE_DEFAULT_PROXY equ 0 WINHTTP_ACCESS_TYPE_NO_PROXY equ 1 WINHTTP_ACCESS_TYPE_NAMED_PROXY equ 3 WINHTTP_NO_PROXY_NAME equ NULL WINHTTP_NO_PROXY_BYPASS equ NULL INTERNET_DEFAULT_PORT equ 0 INTERNET_DEFAULT_HTTP_PORT equ 80d INTERNET_DEFAULT_HTTPS_PORT equ 443d Функция WinHttpOpen из этой же либы отрабатывает нормально. Результат её работы[правильной, так как WinHttpCloseHandle нормально закрывает хэндл] записывается в переменную, которая затем становится одним из параметров функции WinHttpConnect. При вызове WinHttpConnect OllyDbg показывает ошибку ERROR_SXS_MANIFEST_PARSE_ERROR (00002EE5) и соответственно возвращается 0 в eax, т.е. функция отрабатывает неправильно. Описание ошибки: The manifest file contains one or more syntax errors. Я на асме пишу недавно и собственно не пойму, что это за манифест файл. Нашёл я таких два(их обоих у меня нет): один с некоторыми мета-данными кладётся в папку с проектом и из него берётся некоторая информация при компиляци, второй манифест-файл в папке %systemroot%\WinSxS\ Зачем второй нужен-я честно говоря без понятия. Теперь собственно к вопросу. Что от меня требуется? Если файл, который лежит в папке с .asm - как его правильно написать? Если из WinSxS - где его достать? Код. EXE в аттаче. Заранее thx и заранее извиняюсь, если где-то ошибся.
хм, я пробовал и другие, например яндекс, ошибку ollydbg выдавал ту же. l_inc Да, по номеру ошибки если искать, то выдаёт именно это. Странно, почему olly выдаёт другую. Не подскажете, как правильно записать url?
LF В пьюникоде. В общем случае стоит, наверное, использовать IdnToAscii. Если Вы используете только латиницу и цифры (например, передаёте ip в качестве pswzServerName), то просто каждый второй байт ставьте нулевым (собственно так же, как в юникоде).
LF Можно. Если Вы учли, что все WinHttp-функции требуют wide-character strings. В том числе и WinHttpOpen.
LF В принципе MultiByteToWideChar. Но зачем переводить? Лучше сразу хранить в wide-character. В масме без макросов по идее только так: ip dw '1', '2', '7', '.', '0', '.', '0', '.', '1', 0 А в фасме (типа агитирую в пользу фасма ) удобнее: ip du '127.0.0.1',0
moderhi Я понимаю. Но может кто составлял для себя? Или никто не пишет код под эту либу? Для фасм я видел тулзу, которая с дллки составляет инк файл. Нет ли такого для масм?
Рабочий inc файл для масм. Взят непосредсвтенно у hutch'a на форуме (за что ему благодарность, хоть кому-то не впадлу делать эти файлы). Нет констант, но их можно самому дописать (+ в теме выше есть несколько штук). Код (Text): ; -------------------------------------------------------------------------------------------------- ; winhttp.inc Copyright The MASM32 SDK 1998-2010 ; -------------------------------------------------------------------------------------------------- IFNDEF WINHTTP_INC WINHTTP_INC equ <1> SvchostPushServiceGlobals PROTO STDCALL :DWORD WinHttpAddRequestHeaders PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpAutoProxySvcMain PROTO STDCALL :DWORD,:DWORD WinHttpCheckPlatform PROTO STDCALL WinHttpCloseHandle PROTO STDCALL :DWORD WinHttpConnect PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpCrackUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpCreateUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpDetectAutoProxyConfigUrl PROTO STDCALL :DWORD,:DWORD WinHttpGetDefaultProxyConfiguration PROTO STDCALL :DWORD WinHttpGetIEProxyConfigForCurrentUser PROTO STDCALL :DWORD WinHttpGetProxyForUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpOpen PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpOpenRequest PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpQueryAuthSchemes PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpQueryDataAvailable PROTO STDCALL :DWORD,:DWORD WinHttpQueryHeaders PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpQueryOption PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpReadData PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpReceiveResponse PROTO STDCALL :DWORD,:DWORD WinHttpSendRequest PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpSetCredentials PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpSetDefaultProxyConfiguration PROTO STDCALL :DWORD WinHttpSetOption PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpSetStatusCallback PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD WinHttpSetTimeouts PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD WinHttpTimeFromSystemTime PROTO STDCALL :DWORD,:DWORD WinHttpTimeToSystemTime PROTO STDCALL :DWORD,:DWORD WinHttpWriteData PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD ELSE echo ------------------------------------------ echo WARNING duplicate include file winhttp.inc echo ------------------------------------------ ENDIF
M0rg0t Это всего лишь прототип - декларация числа параметров и конвенции вызова, сие всё есть в .lib.
kejcerfcrv А как все это доставать из либ в формате, удобном для масм? Есть какие-то тулзы может готовые - т.е. чтобы взял сишную либу, и сразу получил такой список прототипов.