[2/2] mscoree: Implement CreateConfigStream

André Hentschel nerv at dawncrow.de
Mon May 16 16:26:27 CDT 2011


---
 dlls/mscoree/mscoree_main.c  |   28 ++++++++++++++++++++++++++--
 dlls/mscoree/tests/mscoree.c |   12 ++++++------
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
index 6fe32d2..4c2140c 100644
--- a/dlls/mscoree/mscoree_main.c
+++ b/dlls/mscoree/mscoree_main.c
@@ -440,8 +440,32 @@ BOOL WINAPI StrongNameSignatureVerificationEx(LPCWSTR filename, BOOL forceVerifi
 
 HRESULT WINAPI CreateConfigStream(LPCWSTR filename, IStream **stream)
 {
-    FIXME("(%s, %p): stub\n", debugstr_w(filename), stream);
-    return E_NOTIMPL;
+    HANDLE hfile;
+    HGLOBAL hglobal;
+    LPVOID ptr;
+    HRESULT hr;
+    DWORD filesize,read;
+
+    if (!stream) return E_POINTER;
+    if (!filename) return E_FAIL;
+
+    hfile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+    if (hfile == INVALID_HANDLE_VALUE) return COR_E_FILENOTFOUND;
+
+    filesize = GetFileSize(hfile, NULL);
+
+    hglobal = GlobalAlloc(GHND, filesize);
+    ptr = GlobalLock(hglobal);
+
+    ReadFile(hfile, ptr, filesize, &read, NULL);
+
+    hr = CreateStreamOnHGlobal(hglobal, TRUE, stream);
+    if (FAILED(hr)) return E_FAIL;
+
+    CloseHandle(hfile);
+    GlobalUnlock(hglobal);
+    return hr;
 }
 
 HRESULT WINAPI CreateDebuggingInterfaceFromVersion(int nDebugVersion, LPCWSTR version, IUnknown **ppIUnk)
diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c
index f80dbb4..2d3af4e 100644
--- a/dlls/mscoree/tests/mscoree.c
+++ b/dlls/mscoree/tests/mscoree.c
@@ -287,21 +287,21 @@ static void test_createconfigstream(void)
     GetFullPathNameW(file, MAX_PATH, path, NULL);
 
     hr = pCreateConfigStream(NULL, &stream);
-    todo_wine ok(hr == E_FAIL, "CreateConfigStream returned %x\n", hr);
+    ok(hr == E_FAIL, "CreateConfigStream returned %x\n", hr);
 
     hr = pCreateConfigStream(path, NULL);
-    todo_wine ok(hr == E_POINTER, "CreateConfigStream returned %x\n", hr);
+    ok(hr == E_POINTER, "CreateConfigStream returned %x\n", hr);
 
     hr = pCreateConfigStream(NULL, NULL);
-    todo_wine ok(hr == E_POINTER, "CreateConfigStream returned %x\n", hr);
+    ok(hr == E_POINTER, "CreateConfigStream returned %x\n", hr);
 
     hr = pCreateConfigStream(nonexistent, &stream);
-    todo_wine ok(hr == COR_E_FILENOTFOUND, "CreateConfigStream returned %x\n", hr);
+    ok(hr == COR_E_FILENOTFOUND, "CreateConfigStream returned %x\n", hr);
     ok(stream == NULL, "Expected stream to be NULL\n");
 
     hr = pCreateConfigStream(path, &stream);
-    todo_wine ok(hr == S_OK, "CreateConfigStream failed, hr=%x\n", hr);
-    todo_wine ok(stream != NULL, "Expected non-NULL stream\n");
+    ok(hr == S_OK, "CreateConfigStream failed, hr=%x\n", hr);
+    ok(stream != NULL, "Expected non-NULL stream\n");
 
     if (stream)
     {
-- 

Best Regards, André Hentschel



More information about the wine-patches mailing list