XcvData - to add port

Posted on 2002-03-14
Medium Priority
Last Modified: 2013-12-03
I want to add a port without a dialog using XcvData winapi function. The problem is it returns invalid handle for 1st parameter which requires a printer handle, but i do not have a printer installed.
Question by:bansaldeep
LVL 22

Expert Comment

ID: 6867347
That's a print spooler call back.  And, yes, the first parm is a handle to an extant, open printer.

Are you sure you don't want AddPort()?

Author Comment

ID: 6867410
Yes I am sure because i don't want a dialog for adding a port.

Accepted Solution

adebear71 earned 300 total points
ID: 8587171
There is currently nothing on the Internet (I have found) about doing this, I would have thought more people would have looked into this. I could only find this way to do it.
Hack the registry and restart the print spooler

 To add an extra LPT port add a new string named LPT3 (or next LPT port) to
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports with
a Blank value. Restart the Print Spooler and viola.

For a TCP/IP port look add one to your local machine (point to and pick defaults and check the registry
entries in
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_127.0.0.1

hack these to your liking, restart print spooler and viola..

I had to do this for a project I needed to add a new port.

LVL 22

Expert Comment

ID: 8587257
Sounds like a perfectly reasonable solution.

Expert Comment

ID: 9247522
On the other hand, try this...

#include <windows.h>

#include <stdio.h>
int main(void)
      DWORD dwNeeded;
      DWORD dwStatus;
      WCHAR PortName[100];

      HANDLE hPrinter;
      PRINTER_DEFAULTS PrinterDefaults;

      PrinterDefaults.pDatatype = NULL;
      PrinterDefaults.pDevMode = NULL;
      PrinterDefaults.DesiredAccess = SERVER_ACCESS_ADMINISTER;
      if (!OpenPrinter(",XcvMonitor Local Port", &hPrinter, &PrinterDefaults))
            printf("OpenPrinter failed - %d\n", GetLastError());
            return -1;

      lstrcpyW(PortName, L"MyPort3");
      if (!XcvData(hPrinter, L"AddPort", (BYTE *)PortName, (lstrlenW(PortName) + 1) * 2, NULL, 0, &dwNeeded, &dwStatus))
            printf("XcvData failed - %d\n", GetLastError());
      if (dwStatus != 0)
            printf("XcvData - Returned %lu\n", dwStatus);

      if (!ClosePrinter(hPrinter))
            printf("ClosePrinter failed - %lu\n", GetLastError());

      return 0;

This will add a 'Local Port' port
See http://www.osr.com/ddk/graphics/provider_7a5j.htm for how to add a TCP/IP port

(This is the 'proper' way to do it - according to Microsoft)


Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

With most software applications trying to cater to multiple user needs nowadays, the focus is to make them as configurable as possible. For e.g., when creating Silverlight applications which will connect to WCF services, the service end point usuall…
After several hours of googling I could not gather any information on this topic. There are several ways of controlling the USB port connected to any storage device. The best example of that is by changing the registry value of "HKEY_LOCAL_MACHINE\S…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Watch the video to know the simple way to remove or recover or reset lost or forgotten passwords of Outlook PST file. With Kernel Outlook Password Recovery tool such operation is very easy to perform. It is a freeware with limitation to use with 500…

621 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question