[2/2] mscoree: Implement CreateConfigStream (try 3)

André Hentschel nerv at dawncrow.de
Wed May 18 13:19:45 CDT 2011


---
 dlls/mscoree/mscoree_main.c  |   28 ++++++++++++++++++++++++++--
 dlls/mscoree/tests/mscoree.c |   14 +++++++-------
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
index 6fe32d2..17933a4 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 ret;
+    DWORD filesize, read;
+
+    TRACE("(%s, %p)\n", debugstr_w(filename), stream);
+
+    if (!stream) return COR_E_NULLREFERENCE;
+    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);
+    CloseHandle(hfile);
+
+    ret = CreateStreamOnHGlobal(hglobal, TRUE, stream);
+
+    GlobalUnlock(hglobal);
+    return ret;
 }
 
 HRESULT WINAPI CreateDebuggingInterfaceFromVersion(int nDebugVersion, LPCWSTR version, IUnknown **ppIUnk)
diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c
index 308db41..04156a3 100644
--- a/dlls/mscoree/tests/mscoree.c
+++ b/dlls/mscoree/tests/mscoree.c
@@ -287,22 +287,22 @@ static void test_createconfigstream(void)
     GetFullPathNameW(file, MAX_PATH, path, NULL);
 
     hr = pCreateConfigStream(NULL, &stream);
-    todo_wine ok(hr == E_FAIL || broken(hr == ERROR_PROC_NOT_FOUND), /* some WinXP, Win2K3 and Win7 */
-                 "CreateConfigStream returned %x\n", hr);
+    ok(hr == E_FAIL || broken(hr == ERROR_PROC_NOT_FOUND), /* some WinXP, Win2K3 and Win7 */
+       "CreateConfigStream returned %x\n", hr);
 
     hr = pCreateConfigStream(path, NULL);
-    todo_wine ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
+    ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
 
     hr = pCreateConfigStream(NULL, NULL);
-    todo_wine ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
+    ok(hr == COR_E_NULLREFERENCE, "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