API gethostbyname завершается ошибкой, когда App Verifier включен

Я столкнулся с проблемой, пытаясь протестировать приложение в Application Verifier с включенным Page Heap. Оказывается, что API gethostbyname всегда дает сбой даже для допустимых имен хостов, таких как "localhost". Проблема воспроизводится на каждом Win-7 или Server 2008 R2, которые я пробовал даже для очень простых тестовых приложений, использующих gethostbyname.

Действия по воспроизведению: в appverifier установите флажки "куча страниц" и "UseLFGGuard...", запустите любое приложение, используя gethostbyname(..).

флаги подтверждения

Пример кода приложения (выводит "127.0.0.1", когда appverifier выключен, "getaddrinfo failed", когда appverifier включен):

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")

void
Exercise()
{
    int i = 0;

    struct hostent *remoteHost;
    struct in_addr addr;

    remoteHost = gethostbyname("localhost");
    if (remoteHost == NULL)
    {
        printf("gethostbyname(localhost) failed\n");
    }
    else
    {
        if (remoteHost->h_addrtype == AF_INET)
        {
            i=0;
            while (remoteHost->h_addr_list[i] != 0)
            {
                addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
                printf("\tIP Address #%d: %s\n", i, inet_ntoa(addr));
            }
        }
        else
        {
            printf("unexpected address type\n");
        }
    }
}

int
main()
{
    WSADATA wsaData;
    int iResult;

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0)
    {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }

    for(int i=0; i<1000; i++)
    {
        Exercise();
        Sleep(1000);
    }

    return 0;
}

Самое необычное в том, что я не смог ничего найти в интернете. Это известная проблема? Есть обходные пути?

0 ответов

Другие вопросы по тегам