WinHttpConnect

Тема в разделе "WASM.BEGINNERS", создана пользователем LF, 22 авг 2009.

  1. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    Пишу приложение на асме.
    Для работы с сетью по условию нужно использовать либу WinHttp.
    По умолчанию файлов winhttp.lib и winhttp.inc в masm32(ver10)[чем компилю] нет, поэтому пришлось их поискать. Первый нашёл, второй пишу сам по мере необходимости(основным источником для написания является msdn и winhttp.h).
    Содержание winhttp.inc:
    Код (Text):
    1. WinHttpOpen    PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    2. WinHttpConnect   PROTO :DWORD,:DWORD,:DWORD,:DWORD
    3. WinHttpCloseHandle   PROTO :DWORD
    4.  
    5. WINHTTP_ACCESS_TYPE_DEFAULT_PROXY       equ         0
    6. WINHTTP_ACCESS_TYPE_NO_PROXY           equ         1
    7. WINHTTP_ACCESS_TYPE_NAMED_PROXY        equ         3
    8. WINHTTP_NO_PROXY_NAME     equ   NULL
    9. WINHTTP_NO_PROXY_BYPASS      equ   NULL
    10. INTERNET_DEFAULT_PORT           equ    0
    11. INTERNET_DEFAULT_HTTP_PORT        equ   80d
    12. 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 и заранее извиняюсь, если где-то ошибся.
     
  2. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    Сорри, ехе забыл прикрепить.
    Билд.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    LF
    Вы парой тысяч промахнулись. На самом деле это ошибка ERROR_INTERNET_INVALID_URL.
     
  4. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    хм, я пробовал и другие, например яндекс, ошибку ollydbg выдавал ту же.
    l_inc
    Да, по номеру ошибки если искать, то выдаёт именно это. Странно, почему olly выдаёт другую.
    Не подскажете, как правильно записать url?
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    LF
    В пьюникоде. :) В общем случае стоит, наверное, использовать IdnToAscii. Если Вы используете только латиницу и цифры (например, передаёте ip в качестве pswzServerName), то просто каждый второй байт ставьте нулевым (собственно так же, как в юникоде).
     
  6. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    Благодарю. Думаю, что тему можно закрывать.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    LF
    Можно. Если Вы учли, что все WinHttp-функции требуют wide-character strings. В том числе и WinHttpOpen. :derisive:
     
  8. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    Спасибо, что подсказали)
    Хм. А есть какой-то другой способ перевода в wide-character?
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    LF
    В принципе MultiByteToWideChar. Но зачем переводить? Лучше сразу хранить в wide-character. В масме без макросов по идее только так:
    ip dw '1', '2', '7', '.', '0', '.', '0', '.', '1', 0
    А в фасме (типа агитирую в пользу фасма :)) удобнее:
    ip du '127.0.0.1',0
     
  10. LF

    LF New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2009
    Сообщения:
    6
    Действительно так удобнее, тем более url статичен. Большое спасибо) Довёл до ума, работает(:
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Кто может поделиться файлом WinHttp.inc для Масм? Во всем инете не могу найти.
     
  12. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    M0rg0t в пакете masm32 его нету
     
  13. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    moderhi
    Я понимаю. Но может кто составлял для себя? Или никто не пишет код под эту либу?
    Для фасм я видел тулзу, которая с дллки составляет инк файл. Нет ли такого для масм?
     
  14. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Рабочий inc файл для масм. Взят непосредсвтенно у hutch'a на форуме (за что ему благодарность, хоть кому-то не впадлу делать эти файлы). Нет констант, но их можно самому дописать (+ в теме выше есть несколько штук).

    Код (Text):
    1. ; --------------------------------------------------------------------------------------------------
    2. ;                           winhttp.inc Copyright The MASM32 SDK 1998-2010
    3. ; --------------------------------------------------------------------------------------------------
    4.  
    5. IFNDEF WINHTTP_INC
    6. WINHTTP_INC equ <1>
    7.  
    8. SvchostPushServiceGlobals PROTO STDCALL :DWORD
    9. WinHttpAddRequestHeaders PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    10. WinHttpAutoProxySvcMain PROTO STDCALL :DWORD,:DWORD
    11. WinHttpCheckPlatform PROTO STDCALL
    12. WinHttpCloseHandle PROTO STDCALL :DWORD
    13. WinHttpConnect PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    14. WinHttpCrackUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    15. WinHttpCreateUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    16. WinHttpDetectAutoProxyConfigUrl PROTO STDCALL :DWORD,:DWORD
    17. WinHttpGetDefaultProxyConfiguration PROTO STDCALL :DWORD
    18. WinHttpGetIEProxyConfigForCurrentUser PROTO STDCALL :DWORD
    19. WinHttpGetProxyForUrl PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    20. WinHttpOpen PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    21. WinHttpOpenRequest PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    22. WinHttpQueryAuthSchemes PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    23. WinHttpQueryDataAvailable PROTO STDCALL :DWORD,:DWORD
    24. WinHttpQueryHeaders PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    25. WinHttpQueryOption PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    26. WinHttpReadData PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    27. WinHttpReceiveResponse PROTO STDCALL :DWORD,:DWORD
    28. WinHttpSendRequest PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    29. WinHttpSetCredentials PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    30. WinHttpSetDefaultProxyConfiguration PROTO STDCALL :DWORD
    31. WinHttpSetOption PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    32. WinHttpSetStatusCallback PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    33. WinHttpSetTimeouts PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    34. WinHttpTimeFromSystemTime PROTO STDCALL :DWORD,:DWORD
    35. WinHttpTimeToSystemTime PROTO STDCALL :DWORD,:DWORD
    36. WinHttpWriteData PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
    37.  
    38. ELSE
    39.   echo ------------------------------------------
    40.   echo WARNING duplicate include file winhttp.inc
    41.   echo ------------------------------------------
    42. ENDIF
     
  15. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    M0rg0t
    Это всего лишь прототип - декларация числа параметров и конвенции вызова, сие всё есть в .lib.
     
  16. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    kejcerfcrv
    А как все это доставать из либ в формате, удобном для масм? Есть какие-то тулзы может готовые - т.е. чтобы взял сишную либу, и сразу получил такой список прототипов.
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    LF
    Автор Зевса одобряет :)
     
  18. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    M0rg0t
    Может lib2inc из пакета масм вам поможет?