+
+ memset(&statstg, 0xff, sizeof(statstg));
+ ret = IStream_Stat(stream, &statstg, 0);
+ ok(ret == S_OK, "Stat failed, hr %#x.\n", ret);
+ ok(statstg.pwcsName != NULL, "Unexpected name %s.\n", wine_dbgstr_w(statstg.pwcsName));
+ CoTaskMemFree(statstg.pwcsName);
+
+ memset(&statstg, 0xff, sizeof(statstg));
+ ret = IStream_Stat(stream, &statstg, STATFLAG_NONAME);
+ ok(ret == S_OK, "Stat failed, hr %#x.\n", ret);
+ ok(statstg.pwcsName == NULL, "Unexpected name %s.\n", wine_dbgstr_w(statstg.pwcsName));
+}
+
+static void test_stream_qi(IStream *stream)
+{
+ IUnknown *unk;
+ HRESULT hr;
+
+ hr = IStream_QueryInterface(stream, &IID_IStream, (void **)&unk);
+ ok(SUCCEEDED(hr), "Failed to get IStream interface, hr %#x.\n", hr);
+ IUnknown_Release(unk);
+
+ unk = NULL;
+ hr = IStream_QueryInterface(stream, &IID_ISequentialStream, (void **)&unk);
+todo_wine
+ ok(SUCCEEDED(hr) || broken(hr == E_NOINTERFACE) /* XP */, "Failed to get ISequentialStream interface, hr %#x.\n", hr);
+ if (unk)
+ IUnknown_Release(unk);
+
+ hr = IStream_QueryInterface(stream, &IID_IUnknown, (void **)&unk);
+ ok(SUCCEEDED(hr), "Failed to get IUnknown interface, hr %#x.\n", hr);
+ IUnknown_Release(unk);