mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-18 03:28:07 -05:00
Prepend \\.\ to configured serial line string, to allow easy access to ports
above COM9. [originally from svn r7345] [this svn revision also touched putty-wishlist]
This commit is contained in:
parent
01612d38e4
commit
a3ff37885d
@ -2976,9 +2976,7 @@ serial line you want PuTTY to talk to, if your computer has more
|
|||||||
than one serial port.
|
than one serial port.
|
||||||
|
|
||||||
On Windows, the first serial line is called \i\cw{COM1}, and if there
|
On Windows, the first serial line is called \i\cw{COM1}, and if there
|
||||||
is a second it is called \cw{COM2}, and so on. A serial line with
|
is a second it is called \cw{COM2}, and so on.
|
||||||
a name other than \cw{COM1} to \cw{COM9} can be specified by prefixing
|
|
||||||
its name with \cw{\\\\.\\} - for instance, \cw{\\\\.\\COM10}.
|
|
||||||
|
|
||||||
This configuration setting is also visible on the Session panel,
|
This configuration setting is also visible on the Session panel,
|
||||||
where it replaces the \q{Host Name} box (see \k{config-hostname}) if
|
where it replaces the \q{Host Name} box (see \k{config-hostname}) if
|
||||||
|
@ -221,8 +221,39 @@ static const char *serial_init(void *frontend_handle, void **backend_handle,
|
|||||||
logevent(serial->frontend, msg);
|
logevent(serial->frontend, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
serport = CreateFile(cfg->serline, GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
{
|
||||||
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
/*
|
||||||
|
* Munge the string supplied by the user into a Windows filename.
|
||||||
|
*
|
||||||
|
* Windows supports opening a few "legacy" devices (including
|
||||||
|
* COM1-9) by specifying their names verbatim as a filename to
|
||||||
|
* open. (Thus, no files can ever have these names. See
|
||||||
|
* <http://msdn2.microsoft.com/en-us/library/aa365247.aspx>
|
||||||
|
* ("Naming a File") for the complete list of reserved names.)
|
||||||
|
*
|
||||||
|
* However, this doesn't let you get at devices COM10 and above.
|
||||||
|
* For that, you need to specify a filename like "\\.\COM10".
|
||||||
|
* This is also necessary for special serial and serial-like
|
||||||
|
* devices such as \\.\WCEUSBSH001. It also works for the "legacy"
|
||||||
|
* names, so you can do \\.\COM1 (verified as far back as Win95).
|
||||||
|
* See <http://msdn2.microsoft.com/en-us/library/aa363858.aspx>
|
||||||
|
* (CreateFile() docs).
|
||||||
|
*
|
||||||
|
* So, we believe that prepending "\\.\" should always be the
|
||||||
|
* Right Thing. However, just in case someone finds something to
|
||||||
|
* talk to that doesn't exist under there, if the serial line
|
||||||
|
* contains a backslash, we use it verbatim. (This also lets
|
||||||
|
* existing configurations using \\.\ continue working.)
|
||||||
|
*/
|
||||||
|
char *serfilename =
|
||||||
|
dupprintf("%s%s",
|
||||||
|
strchr(cfg->serline, '\\') ? "" : "\\\\.\\",
|
||||||
|
cfg->serline);
|
||||||
|
serport = CreateFile(serfilename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
||||||
|
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||||
|
sfree(serfilename);
|
||||||
|
}
|
||||||
|
|
||||||
if (serport == INVALID_HANDLE_VALUE)
|
if (serport == INVALID_HANDLE_VALUE)
|
||||||
return "Unable to open serial port";
|
return "Unable to open serial port";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user