BYTE* RetrieveWebData(char* url, unsigned long* size) {    void* pbdata = NULL;    unsigned long cbdata = 0;    unsigned long flags = 0;    unsigned long toread = 1024;    CLNTSETTINGS websettings;    HINTERNET hsession = 0;    HINTERNET hrequest = 0;    GetWebClientSettings(&websettings);    if(!(hsession = InternetOpen(HTTP_USERAGENT, INTERNET_OPEN_TYPE_PROXY, *websettings.proxy ? websettings.proxy : 0, 0, 0))) return 0;    InternetSetOption(hsession, INTERNET_OPTION_RECEIVE_TIMEOUT, &websettings.tmo_recv, sizeof(unsigned long));    InternetSetOption(hsession, INTERNET_OPTION_CONNECT_TIMEOUT, &websettings.tmo_conn, sizeof(unsigned long));    flags = INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_PASSIVE | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;    if(hrequest = InternetOpenUrl(hsession, url, 0, 0, flags, 0))    {        void* newbuffer = NULL;        void* buffer = NULL;        unsigned long len = 0;        pbdata = buffer = (void*)malloc(toread + 15);        while(InternetReadFile(hrequest, buffer, toread, &len))        {            cbdata += len;            if(len != toread) break;            newbuffer = (void*)realloc(pbdata, cbdata + toread + 15);            pbdata = newbuffer;            buffer = (void*)((BYTE*)pbdata+cbdata);        }        InternetCloseHandle(hrequest);    }    InternetCloseHandle(hsession);    if(size) *size = cbdata;    return (BYTE*)pbdata; } void WriteFile(char* file, BYTE* pbdata, unsigned long cbdata) {    FILE* pfile = NULL;    if((pfile = _fsopen(file, "wb", _SH_DENYRW)))    {        fwrite(pbdata, sizeof(BYTE), cbdata, pfile);        fclose(pfile);    } } bool RetrieveWebDataToFile(char* url, char* outfile) {    BYTE* pbdata = 0;    unsigned long cbdata = 0;    bool retval = false;    if(retval = ((pbdata = RetrieveWebData(url, &cbdata))) != NULL)    {        WriteFile(outfile, pbdata, cbdata);        free(pbdata);    }    return retval; }