saber puerto por para impresora denegado crear configurar como agregar acceso c++ winapi driver printing

c++ - por - Cómo crear un nuevo puerto y asignarlo a una impresora



puerto de impresora usb (1)

Guau, parece que eso dejó perplejos a todos ... Después de investigar mucho, he aquí cómo hacerlo:

DWORD CreatePort(LPWSTR portName) { HANDLE hPrinter; PRINTER_DEFAULTS PrinterDefaults; memset(&PrinterDefaults, 0, sizeof(PrinterDefaults)); PrinterDefaults.pDatatype = NULL; PrinterDefaults.pDevMode = NULL; PrinterDefaults.DesiredAccess = SERVER_ACCESS_ADMINISTER; DWORD needed; DWORD rslt; if (!OpenPrinter(",XcvMonitor Local Port", &hPrinter, &PrinterDefaults)) return -1; DWORD xcvresult= 0; if (!XcvData(hPrinter, L"AddPort", (BYTE *)portName, (lstrlenW(portName) + 1)*2, NULL, 0, &needed, &xcvresult)) rslt= GetLastError(); if (!ClosePrinter(hPrinter)) rslt= GetLastError(); return rslt; }

Configurar el puerto en una impresora determinada es relativamente sencillo: OpenPrinter (), GetPrinter () con PRINTER_INFO_2, SetPrinter (), ClosePrinter ()

Cheerio.

Tenemos una impresora virtual (proporcionada por un tercero) que se asigna a un puerto de impresora local no válido. La impresora siempre es local (no estamos tratando con un servidor de impresión remoto ni nada de eso). Me gustaría crear un nuevo puerto local (específico para nuestra aplicación), luego configurar la impresora que se asignará a ese puerto en lugar del puerto aleatorio (ya menudo incorrecto) que el instalador del controlador de impresión elige.

Creo que necesito usar las funciones XcvData y / o XcvDataPort para hacer esto, pero estoy un poco perdido en cuanto a cómo.

¿Alguien tiene algún ejemplo o consejos sobre cómo proceder?

Me imagino que tengo que hacer lo siguiente:

  1. Verifique para asegurarse de que el nombre del puerto no exista (probablemente pueda usar EnumPorts para esto, pero no estoy seguro de que sea el mejor enfoque dado que también tengo que crear puertos)
  2. Crea el nombre del puerto si existe
  3. Cambie la configuración de la impresora para usar el nuevo puerto

y para la desinstalación:

  1. Eliminar el puerto