winspool: [3/4] call the Portmonitor for XcvMonitor and XcvPort in OpenPrinter

Detlef Riekenberg wine.dev at web.de
Thu Jan 4 18:09:46 CST 2007


Xcv, Third Step:
Manage an Xcv-Channel to the Portmonitor, when needed


Changelog:

winspool: call the Portmonitor for XcvMonitor and XcvPort in OpenPrinter


-- 
 
By by ... Detlef

-------------- next part --------------
>From 641900a6e90f0250b2ec1e865ad2b26b675f4de3 Mon Sep 17 00:00:00 2001
From: Detlef Riekenberg <wine.dev at web.de>
Date: Fri, 5 Jan 2007 00:19:34 +0100
Subject: [PATCH] winspool: call the Portmonitor for XcvMonitor and XcvPort in OpenPrinter
---
 dlls/winspool.drv/info.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 9fa5b3f..04a10c0 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -117,6 +117,7 @@ typedef struct {
     LPWSTR name;
     LPWSTR printername;
     monitor_t *pm;
+    HANDLE hXcv;
     jobqueue_t *queue;
     started_doc_t *doc;
 } opened_printer_t;
@@ -1477,7 +1478,14 @@ static HANDLE get_opened_printer_entry(L
         }
 
         if (printer->pm) {
-            FIXME("pm->pfnXcvOpenPort not implemented\n");
+            if ((printer->pm->monitor) && (printer->pm->monitor->pfnXcvOpenPort)) {
+                printer->pm->monitor->pfnXcvOpenPort(&printername[len], pDefault->DesiredAccess, &printer->hXcv);
+            }
+            if (printer->hXcv == NULL) {
+                SetLastError(ERROR_INVALID_PARAMETER);
+                handle = 0;
+                goto end;
+            }
         }
         else
         {
@@ -1523,6 +1531,7 @@ end:
     LeaveCriticalSection(&printer_handles_cs);
     if (!handle && printer) {
         /* Something failed: Free all resources */
+        if (printer->hXcv) printer->pm->monitor->pfnXcvClosePort(printer->hXcv);
         monitor_unload(printer->pm);
         HeapFree(GetProcessHeap(), 0, printer->printername);
         HeapFree(GetProcessHeap(), 0, printer->name);
@@ -2912,6 +2921,7 @@ BOOL WINAPI ClosePrinter(HANDLE hPrinter
             }
             HeapFree(GetProcessHeap(), 0, printer->queue);
         }
+        if (printer->hXcv) printer->pm->monitor->pfnXcvClosePort(printer->hXcv);
         monitor_unload(printer->pm);
         HeapFree(GetProcessHeap(), 0, printer->printername);
         HeapFree(GetProcessHeap(), 0, printer->name);
-- 
1.4.1



More information about the wine-patches mailing list