The user of a URL Moniker receives a reference to the IBinding interface of
the binding object in the IBindStatusCallback::OnStartBinding interface.
When binding to an HTTP server, the binding object supports the
IWinInetHttpInfo interface for obtaining HTTP-specific information, such as
HTTP headers. The binding object also supports the IWinInetInfo interface
for obtaining Internet options such as the name of the file downloaded by a
URL moniker binding. Both interfaces support the QueryInfo method.
QueryInfo basically forwards the call to the standard WinInet functions
HttpQueryInfo and InternetQueryOption, respectively.
Here is a sample snippet of code from an IBindStatusCallback implementation
that uses IWininetHttpInfo to retrieve the raw headers sent by the HTTP
server. It then uses IWininetInfo to query for the name of the local data
file returned by the download:
// required includes:
#include <urlmon.h>
#include <wininet.h>
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR szError)
{
// m_spBinding is the IBinding interface passed in OnStartBinding
if (!FAILED(hresult))
{
IWinInetHttpInfo* pInfo;
char buff[1024];
DWORD dwBuffSize = 1024;
HRESULT hr = m_spBinding->QueryInterface(IID_IWinInetHttpInfo,
(void**)&pInfo);
if (!FAILED(hr))
{
BOOL bResult = pInfo->QueryInfo(HTTP_QUERY_RAW_HEADERS,
buff, &dwBuffSize, 0, NULL);
}
pInfo->Release();
}
if (!FAILED(hresult))
{
IWinInetInfo* pInfo;
char buff[1024];
DWORD dwBuffSize = 1024;
HRESULT hr = m_spBinding->QueryInterface(IID_IWinInetInfo,
(void**)&pInfo);
if (!FAILED(hr))
{
BOOL bResult = pInfo
->QueryOption(INTERNET_OPTION_DATAFILE_NAME,
buff, &dwBuffSize);
}
pInfo->Release();
}
// ...
return S_OK;
}
For complete information on the parameters available to
IWinInetHttpInfo::QueryInfo and IWinInetInfo::QueryOption, review the
Internet Client SDK documentation for the WinInet functions HttpQueryInfo
and InternetQueryOption, respectively.