Peter Dons Tychsen : devenum: Fix the implementation of IEnumMoniker::Skip( ), to match the MSDN specs.

Alexandre Julliard julliard at winehq.org
Mon Jan 7 08:39:29 CST 2008


Module: wine
Branch: master
Commit: 787ccc8032f986477b69a340d877ff0a80ffa5b3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=787ccc8032f986477b69a340d877ff0a80ffa5b3

Author: Peter Dons Tychsen <donpedro at dhcppc4>
Date:   Sat Jan  5 00:05:34 2008 +0100

devenum: Fix the implementation of IEnumMoniker::Skip(), to match the MSDN specs.

---

 dlls/devenum/mediacatenum.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/devenum/mediacatenum.c b/dlls/devenum/mediacatenum.c
index d230ce1..331130b 100644
--- a/dlls/devenum/mediacatenum.c
+++ b/dlls/devenum/mediacatenum.c
@@ -800,9 +800,21 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt,
 static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt)
 {
     EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    DWORD subKeys;
 
     TRACE("(%p)->(%d)\n", iface, celt);
 
+    /* Before incrementing, check if there are any more values to run thru.
+       Some programs use the Skip() function to get the amount of devices */
+    if(RegQueryInfoKeyW(This->hkey, NULL, NULL, NULL, &subKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
+    {
+        return S_FALSE;
+    }
+    if((This->index + celt) >= subKeys)
+    {
+        return S_FALSE;
+    }
+
     This->index += celt;
 
     return S_OK;




More information about the wine-cvs mailing list