static HRESULT WINAPI ProtocolStream_UnlockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%d %d %d)\n", This, libOffset.u.LowPart, cb.u.LowPart, dwLockType); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Stat(IStream *iface, STATSTG *pstatstg, DWORD dwStatFlag) { ProtocolStream *This = STREAM_THIS(iface); TRACE("(%p)->(%p %08x)\n", This, pstatstg, dwStatFlag); if(!pstatstg) return E_FAIL; memset(pstatstg, 0, sizeof(STATSTG)); if(!(dwStatFlag&STATFLAG_NONAME) && This->buf->cache_file) { pstatstg->pwcsName = CoTaskMemAlloc((lstrlenW(This->buf->cache_file)+1)*sizeof(WCHAR)); if(!pstatstg->pwcsName) return STG_E_INSUFFICIENTMEMORY; lstrcpyW(pstatstg->pwcsName, This->buf->cache_file); } pstatstg->type = STGTY_STREAM; if(This->buf->file != INVALID_HANDLE_VALUE) { GetFileSizeEx(This->buf->file, (PLARGE_INTEGER)&pstatstg->cbSize); GetFileTime(This->buf->file, &pstatstg->ctime, &pstatstg->atime, &pstatstg->mtime); if(pstatstg->cbSize.QuadPart) pstatstg->grfMode = GENERIC_READ; } return S_OK; }
static HRESULT WINAPI ProtocolStream_QueryInterface(IStream *iface, REFIID riid, void **ppv) { ProtocolStream *This = STREAM_THIS(iface); *ppv = NULL; if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = STREAM(This); } else if(IsEqualGUID(&IID_ISequentialStream, riid)) { TRACE("(%p)->(IID_ISequentialStream %p)\n", This, ppv); *ppv = STREAM(This); } else if(IsEqualGUID(&IID_IStream, riid)) { TRACE("(%p)->(IID_IStream %p)\n", This, ppv); *ppv = STREAM(This); } if(*ppv) { IStream_AddRef(STREAM(This)); return S_OK; } WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); return E_NOINTERFACE; }
static HRESULT WINAPI ProtocolStream_CopyTo(IStream *iface, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%p %d %p %p)\n", This, pstm, cb.u.LowPart, pcbRead, pcbWritten); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%d %08x %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Stat(IStream *iface, STATSTG *pstatstg, DWORD dwStatFlag) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%p %08x)\n", This, pstatstg, dwStatFlag); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Revert(IStream *iface) { ProtocolStream *This = STREAM_THIS(iface); TRACE("(%p)\n", This); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Commit(IStream *iface, DWORD grfCommitFlags) { ProtocolStream *This = STREAM_THIS(iface); TRACE("(%p)->(%08x)\n", This, grfCommitFlags); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_Write(IStream *iface, const void *pv, ULONG cb, ULONG *pcbWritten) { ProtocolStream *This = STREAM_THIS(iface); TRACE("(%p)->(%p %d %p)\n", This, pv, cb, pcbWritten); return STG_E_ACCESSDENIED; }
static ULONG WINAPI ProtocolStream_AddRef(IStream *iface) { ProtocolStream *This = STREAM_THIS(iface); LONG ref = InterlockedIncrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); return ref; }
static HRESULT WINAPI ProtocolStream_Read(IStream *iface, void *pv, ULONG cb, ULONG *pcbRead) { ProtocolStream *This = STREAM_THIS(iface); DWORD read = 0, pread = 0; HRESULT hres; TRACE("(%p)->(%p %d %p)\n", This, pv, cb, pcbRead); if(This->buf->file != INVALID_HANDLE_VALUE) { if (!ReadFile(This->buf->file, pv, cb, &read, NULL)) return INET_E_DOWNLOAD_FAILURE; if(pcbRead) *pcbRead = read; return read ? S_OK : S_FALSE; } if(This->buf->size) { read = cb; if(read > This->buf->size) read = This->buf->size; memcpy(pv, This->buf->buf, read); if(read < This->buf->size) memmove(This->buf->buf, This->buf->buf+read, This->buf->size-read); This->buf->size -= read; } if(read == cb) { if (pcbRead) *pcbRead = read; return S_OK; } hres = This->buf->hres = IInternetProtocol_Read(This->buf->protocol, (PBYTE)pv+read, cb-read, &pread); if (pcbRead) *pcbRead = read + pread; if(hres == E_PENDING) return E_PENDING; else if(FAILED(hres)) FIXME("Read failed: %08x\n", hres); return read || pread ? S_OK : S_FALSE; }
static ULONG WINAPI ProtocolStream_Release(IStream *iface) { ProtocolStream *This = STREAM_THIS(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); if(!ref) { IUnknown_Release(STGMEDUNK(This->buf)); heap_free(This); URLMON_UnlockModule(); } return ref; }
static HRESULT WINAPI ProtocolStream_Clone(IStream *iface, IStream **ppstm) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%p)\n", This, ppstm); return E_NOTIMPL; }
static HRESULT WINAPI ProtocolStream_SetSize(IStream *iface, ULARGE_INTEGER libNewSize) { ProtocolStream *This = STREAM_THIS(iface); FIXME("(%p)->(%d)\n", This, libNewSize.u.LowPart); return E_NOTIMPL; }