Huw Davies : ntprint: PSetupCreateMonitorInfo() takes two arguments, the second is a server name.

Alexandre Julliard julliard at winehq.org
Fri Jan 27 14:12:23 CST 2017


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Jan 27 16:33:13 2017 +0000

ntprint: PSetupCreateMonitorInfo() takes two arguments, the second is a server name.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntprint/ntprint.c       | 14 ++++----------
 dlls/ntprint/ntprint.spec    |  2 +-
 dlls/ntprint/tests/ntprint.c | 23 +++++++++++++++--------
 3 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/dlls/ntprint/ntprint.c b/dlls/ntprint/ntprint.c
index b6d77b3..75a8e00 100644
--- a/dlls/ntprint/ntprint.c
+++ b/dlls/ntprint/ntprint.c
@@ -65,18 +65,13 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
  *
  */
 
-HANDLE WINAPI PSetupCreateMonitorInfo(LPVOID unknown1, LPVOID  unknown2,LPVOID unknown3)
+HANDLE WINAPI PSetupCreateMonitorInfo(DWORD unknown1, WCHAR *server)
 {
     monitorinfo_t * mi=NULL;
     DWORD needed;
     DWORD res;
 
-    TRACE("(%p, %p, %p)\n", unknown1, unknown2, unknown3);
-
-    if ((unknown2 != NULL) || (unknown3 != NULL)) {
-        FIXME("got unknown parameter: (%p, %p, %p)\n", unknown1, unknown2, unknown3);
-        return NULL;
-    }
+    TRACE("(%d, %s)\n", unknown1, debugstr_w(server));
 
     mi = HeapAlloc(GetProcessHeap(), 0, sizeof(monitorinfo_t));
     if (!mi) {
@@ -85,15 +80,14 @@ HANDLE WINAPI PSetupCreateMonitorInfo(LPVOID unknown1, LPVOID  unknown2,LPVOID u
     }
 
     /* Get the needed size for all Monitors */
-    res = EnumMonitorsW(NULL, 2, NULL, 0, &needed, &mi->installed);
+    res = EnumMonitorsW(server, 2, NULL, 0, &needed, &mi->installed);
     if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
         mi->mi2 = HeapAlloc(GetProcessHeap(), 0, needed);
-        res = EnumMonitorsW(NULL, 2, (LPBYTE) mi->mi2, needed, &needed, &mi->installed);
+        res = EnumMonitorsW(server, 2, (LPBYTE) mi->mi2, needed, &needed, &mi->installed);
     }
 
     if (!res) {
         HeapFree(GetProcessHeap(), 0, mi);
-        /* FIXME: SetLastError() needed? */
         return NULL;
     }
 
diff --git a/dlls/ntprint/ntprint.spec b/dlls/ntprint/ntprint.spec
index 8869776..04e85fe 100644
--- a/dlls/ntprint/ntprint.spec
+++ b/dlls/ntprint/ntprint.spec
@@ -2,7 +2,7 @@
 @ stub PSetupAssociateICMProfiles
 @ stub PSetupBuildDriversFromPath
 @ stub PSetupCreateDrvSetupPage
-@ stdcall PSetupCreateMonitorInfo(long ptr ptr)
+@ stdcall PSetupCreateMonitorInfo(long wstr)
 @ stub PSetupCreatePrinterDeviceInfoList
 @ stub PSetupDestroyDriverInfo3
 @ stdcall PSetupDestroyMonitorInfo(long)
diff --git a/dlls/ntprint/tests/ntprint.c b/dlls/ntprint/tests/ntprint.c
index e0bc01e..1710220 100644
--- a/dlls/ntprint/tests/ntprint.c
+++ b/dlls/ntprint/tests/ntprint.c
@@ -32,7 +32,7 @@
 /* ##### */
 
 static HMODULE  hdll;
-static HANDLE (WINAPI *pPSetupCreateMonitorInfo)(LPVOID, LPVOID, LPVOID);
+static HANDLE (WINAPI *pPSetupCreateMonitorInfo)(DWORD, const WCHAR *);
 static VOID   (WINAPI *pPSetupDestroyMonitorInfo)(HANDLE);
 static BOOL   (WINAPI *pPSetupEnumMonitor)(HANDLE, DWORD, LPWSTR, LPDWORD);
 
@@ -66,10 +66,12 @@ static LPCSTR load_functions(void)
 static void test_PSetupCreateMonitorInfo(VOID)
 {
     HANDLE  mi;
-    BYTE    buffer[1024] ;
+    WCHAR buffer[1024] = {'\\','\\'};
+    UINT len = sizeof(buffer) / sizeof(buffer[0]) - 2;
+    GetComputerNameW(buffer + 2, &len);
 
     SetLastError(0xdeadbeef);
-    mi = pPSetupCreateMonitorInfo(NULL, NULL, NULL);
+    mi = pPSetupCreateMonitorInfo(0, NULL);
     if (!mi && (GetLastError() == RPC_S_SERVER_UNAVAILABLE)) {
         win_skip("The service 'Spooler' is required for many tests\n");
         return;
@@ -77,13 +79,18 @@ static void test_PSetupCreateMonitorInfo(VOID)
     ok( mi != NULL, "got %p with %u (expected '!= NULL')\n", mi, GetLastError());
     if (mi) pPSetupDestroyMonitorInfo(mi);
 
-
-    memset(buffer, 0, sizeof(buffer));
     SetLastError(0xdeadbeef);
-    mi = pPSetupCreateMonitorInfo(buffer, NULL, NULL);
+    mi = pPSetupCreateMonitorInfo(0, buffer);
     ok( mi != NULL, "got %p with %u (expected '!= NULL')\n", mi, GetLastError());
     if (mi) pPSetupDestroyMonitorInfo(mi);
 
+    SetLastError(0xdeadbeef);
+    mi = pPSetupCreateMonitorInfo(0, buffer + 1);
+    todo_wine {
+    ok( mi == NULL, "got %p\n", mi );
+    ok( GetLastError() == ERROR_INVALID_NAME, "got %d\n", GetLastError() );
+    }
+    if (mi) pPSetupDestroyMonitorInfo(mi);
 }
 
 /* ########################### */
@@ -99,7 +106,7 @@ static void test_PSetupDestroyMonitorInfo(VOID)
     trace("returned with %u\n", GetLastError());
 
     SetLastError(0xdeadbeef);
-    mi = pPSetupCreateMonitorInfo(NULL, NULL, NULL);
+    mi = pPSetupCreateMonitorInfo(0, NULL);
     if (!mi && (GetLastError() == RPC_S_SERVER_UNAVAILABLE)) {
         win_skip("The service 'Spooler' is required for many tests\n");
         return;
@@ -134,7 +141,7 @@ static void test_PSetupEnumMonitor(VOID)
     DWORD   index=0;
 
     SetLastError(0xdeadbeef);
-    mi = pPSetupCreateMonitorInfo(NULL, NULL, NULL);
+    mi = pPSetupCreateMonitorInfo(0, NULL);
     if (!mi) {
         skip("PSetupCreateMonitorInfo\n");
         return;




More information about the wine-cvs mailing list