BUG: Bytes Read Is Not Set on Asynchronous InternetReadFile (255580)
The information in this article applies to:
- Microsoft Internet Explorer (Programming) 5
- Microsoft Internet Explorer (Programming) 5.01
- Microsoft Internet Explorer (Programming) 5.5
This article was previously published under Q255580 SYMPTOMS
If you call FtpOpenFile and then InternetReadFile asynchronously, lpdwNumberOfBytesRead is not updated when the operation concludes.
Also, the INTERNET_STATUS_REQUEST_COMPLETE notification for InternetReadFile, dwResult, and dwError in (LPINTERNET_ASYNC_RESULT) lpvStatusInfo contains incorrect values.
The problem only occurs in Internet Explorer 5, not Internet Explorer 4.x.
RESOLUTION
To work around this problem, use the following procedure, which is based on the fact that InternetReadFile yields these values in LPINTERNET_ASYNC_RESULT structure:
SUCCESS: dwResult = 1; dwError = bytes read (IE5) or 0 (IE4)
FAILURE: dwResult = 0; dwError = error code.
- Check the Internet Explorer version programmatically as shown in the following Knowledge Base article:
244857 HOWTO: Interpret the Results of InternetQueryOption with the INTERNET_VERSION_INFO Structure
- If the version number is Internet Explorer 5, modify the callback function as follows:
void CALLBACK InternetCallback(HINTERNET hInternet,
DWORD dwContext, DWORD dwInternetStatus, void* lpStatusInfo,
DWORD dwStatusInfoLength)
{
strProgress *pProgress;
switch(dwInternetStatus)
{
...
case INTERNET_STATUS_REQUEST_COMPLETE:
INTERNET_ASYNC_RESULT* pResult;
pResult = (INTERNET_ASYNC_RESULT*)lpStatusInfo;
pProgress = (strProgress*)dwContext;
pProgress->dwError = pResult->dwError;
pProgress->dwResult = pResult->dwResult;
pProgress->bComplete = true;
if (pResult->dwResult == 1 && pProgress->type == TYPE_READFILE)
{
//pResult->dwError actually stores the bytes read for InternetReadFile in IE5
pProgress->dwResult = pResult->dwError;
pProgress->dwError = ERROR_SUCCESS;
}
break;
}
...
}
In the main() function, pProgress->dwError will then contain the number of bytes read if pProgress->dwError is ERROR_SUCCESS.
STATUSMicrosoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.
Modification Type: | Major | Last Reviewed: | 10/2/2003 |
---|
Keywords: | kbbug kbpending KB255580 |
---|
|