Nikolay Sivov : scrrun: Implement SerialNumber property.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 24 14:28:32 CDT 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Jun 23 21:54:50 2014 +0400

scrrun: Implement SerialNumber property.

---

 dlls/scrrun/filesystem.c       | 11 +++++++++--
 dlls/scrrun/tests/filesystem.c | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index c85fe63..4d3c117 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -978,8 +978,15 @@ static HRESULT WINAPI drive_get_FileSystem(IDrive *iface, BSTR *fs)
 static HRESULT WINAPI drive_get_SerialNumber(IDrive *iface, LONG *serial)
 {
     struct drive *This = impl_from_IDrive(iface);
-    FIXME("(%p)->(%p): stub\n", This, serial);
-    return E_NOTIMPL;
+    BOOL ret;
+
+    TRACE("(%p)->(%p)\n", This, serial);
+
+    if (!serial)
+        return E_POINTER;
+
+    ret = GetVolumeInformationW(This->root, NULL, 0, (DWORD*)serial, NULL, NULL, NULL, 0);
+    return ret ? S_OK : E_FAIL;
 }
 
 static HRESULT WINAPI drive_get_IsReady(IDrive *iface, VARIANT_BOOL *ready)
diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c
index c9b41c0..7b9354e 100644
--- a/dlls/scrrun/tests/filesystem.c
+++ b/dlls/scrrun/tests/filesystem.c
@@ -1790,6 +1790,41 @@ static void test_GetDriveName(void)
     }
 }
 
+static void test_SerialNumber(void)
+{
+    IDriveCollection *drives;
+    IEnumVARIANT *iter;
+    IDrive *drive;
+    VARIANT var;
+    LONG serial;
+    HRESULT hr;
+
+    hr = IFileSystem3_get_Drives(fs3, &drives);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDriveCollection_get__NewEnum(drives, (IUnknown**)&iter);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IEnumVARIANT_Next(iter, 1, &var, NULL);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IDrive, (void**)&drive);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    VariantClear(&var);
+
+    hr = IDrive_get_SerialNumber(drive, NULL);
+    ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+    serial = 0xdeadbeef;
+    hr = IDrive_get_SerialNumber(drive, &serial);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(serial != 0xdeadbeef, "got %x\n", serial);
+
+    IDrive_Release(drive);
+    IEnumVARIANT_Release(iter);
+    IDriveCollection_Release(drives);
+}
+
 START_TEST(filesystem)
 {
     HRESULT hr;
@@ -1823,6 +1858,7 @@ START_TEST(filesystem)
     test_ReadAll();
     test_Read();
     test_GetDriveName();
+    test_SerialNumber();
 
     IFileSystem3_Release(fs3);
 




More information about the wine-cvs mailing list