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