Portlandia Cloud Services

Voice & FAX 503-235-5833 sales@portlandiacloudservices.com http://www.portlandiacloudservices.com

Getting external dialup modems to work on Windows 7

So, you have a dialup modem that worked fine on Windows XP and Windows 7 doesn’t detect it? This article is for you!
 
There are many types of modems (see our companion article) but this article is concerned mainly with External Hardware Dialup Modems that are connected to the PC with a serial cable. Internal Softmodems require hardware drivers, and if a 64bit driver does not exist for one, the INF discussion in this article isn’t going to help. (A Winmodem that originally came with a driver for Windows XP 64bit should be able to be used on Windows 7 64 bit even if Windows 7 says it’s not compatible)
 
Standard serial port modems are often referred to as hardware modems and generally are externally connected to the computer with a serial cable. The serial port on the modem by convention is a female DB-25 connector. On the original PC’s the serial port was a DB-25 male connector. Later PC’s used a DB-9 male connector, and the serial cable used with a hardware modem is a DB-9 to DB-25 cable. (Historical note – during the days of the internal ISA slot on PCs, many internal ISA modems were indeed hardware
modems) Note that hardware modems can either be Plug and Play (PnP) or non-PnP. Windows can use either type.
 
External hardware serial port modems CAN be used on BOTH 32 bit operating systems (like Windows XP) and 64 bit operating systems (like Windows 7 64 bit) EVEN IF the modem manufacturer does not provide “drivers” (Note that a USB-to-Serial port adapter may also be required if the PC lacks a COM port) This is because ALL serial port modems use the “unimodem” driver included in Windows. The “driver” that the user supplies with these modems is just an INF file. This article shows how these INF files can be edited to work under Windows 7 64bit (and future Windows versions)
 
First, some background.
 
All of the Windows versions handle all modems by using INF files. The INF file describes the AT connect strings the modem listens to and it describes the responses the modem gives back. Windows MUST have an INF file that describes the modem that is being used. Microsoft tried gathering as many INF files from manufacturers of PnP modems as it could find and including them both in Windows 7 and in it’s online driver database, which is incredibly useful if the manufacturer has abandoned the modem. The INF file is used by the driver in Windows called the Unimodem driver. This system allows Windows programs that use modems to not have to know about connect strings or the modem command sets of each individual modems which are likely different. Instead the Windows program just needs to know how to talk to Unimodem, and the INF file tells Unimodem how to talk to the modem.
 
To add a serial modem to Windows 7, the user opens Control Panel, Phone and Modem, Modems, then clicks Add. The Wizard then asks the user if the user wants Windows to autodetect the modem. If the user clicks Next then Windows will send some commands out the serial port to probe the modem and see what it’s name is and what the manufacturer is. IF THE MODEM IS A PNP modem, then Windows will look in it’s INF database or it will contact Microsoft’s online driver database and look in there. If there is a match, then Windows will install the modem. If the modem is NOT a PnP modem, or if it is a PnP modem but Windows cannot find an INF file for it, then Windows will say no modem is detected and will ask for the user to select the model of modem and supply an INF file.
 
The user can then browse to the modem’s INF file and select it. If the user does not have an INF file then Microsoft provides some Generic modem entries for non-PnP modems. Unfortunately, my experience with them is that the Generic modem entries are useless because these generic definitions do not appear to support hardware flow control.
 
The problem
 
Over the years many companies that originally manufactured external dialup modems have either gotten out of the dialup modem making business completely (like Motorola and Panasonic) or they have stopped supporting older products. This is understandable since companies have to make money, and spending support time on an old modem that sold for under $100 15 years ago is not profitable. But it is unfortunate since dialup modem technology has not changed since the introduction of V.92 and faxing standards have not changed for much longer than that. Most older external dialup modems that are still around have withstood the test of time and still work. And virtually ALL faxmodems ever produced will still send and receive faxes. Older serial modems are also available on the used market quite cheaply. While it is true that many PCs today need a serial port card added to use an external modem, there are still many people who prefer an external modem if they need to use a modem.
 
All modems ship with a CD of ‘drivers’ and the older modems did so as well. On the disk was an INF file that was used by the Windows version current when the modem shipped (such as Windows 95, Windows 98, Windows XP) to create an entry for the modem. Unfortunately, when 64bit Windows 7 was released, Microsoft began requiring new keywords in the INF file. Since the manufacturer no longer supports the modem, they never released updated INF files.
 
If we try to add the modem using one of the old Windows XP inf files into 64bit Windows 7, we get the message:
 
“The folder you specified doesn’t contain a compatible software driver
for your device. If the folder contains a driver, make sure it is designed
to work with Windows for x64-based systems.”
 
Microsoft put this check in to prevent people from trying to install 32bit drivers in a 64 bit OS. For Winmodems this is a good thing. But since external serial dialup modems can all work with the Unimodem driver, this is a bad thing for most Windows 7 installations. What is needed is to modify the INF file to make it usable by Windows 7 64bit.
 
The easiest way to create a new modem INF file is to find an older one written for Windows XP to modify. This way you will have all of the connect strings already entered. I am going to show several examples
of how to modify an existing mdm*.inf file.
 
The first 2 examples are with Multitech products. The first is a Multitech MultiModem 33.6kbps DataFax Modem model MT2834ZDXb. Multitech considers this modem model obsolete and does not provide a INF file for Windows 7. But they do provide Windows XP inf files.
 
We start by going to the Multitech website for the MT2834ZDXb here. Next, download the file drivers.exe version 5.6.2.4 that says:
 
“This file contains Microsoft drivers for most Legacy (33600 and slower models) MT932, MT1432, MT1932, MT2834, & MT3334 families of modems. The list that follows is an example of the models supported, and is not all inclusive”
 
Run drivers.exe which is a self-extractor and have it extract the files into a temporary directory. Notice there is a readme.txt file in all of the INF files, open this and take a look at it. It says the INF file we would use (under Windows XP) for this modem is MDMMTSZ5.INF (Modem INF file for ZDX,ZPX,LT and MU’s. Note that the 5634ZDX.INF file is for the ZDXb-u) So we will copy that file to a new temp directory and modify it.
 
This INF file is very old-school, it was obviously first created back in 1993 for Windows 3.1, and has had just a few tweaks added to it as well as names for additional modems. Windows XP will digest this INF file because it has backwards compatibility for old Win 3.1 INF files, but this INF lacks some things needed for Windows 7. This INF file also is a multiple-model INF file which I’m going to modify to a single model just for my own model.
 
Here is the first section to look at:


[Version]
Signature="$CHICAGO$"
Class=Modem
Provider=%Mfg%
DriverVer=09/26/2003,5.9.26.03

We are going to modify it as follows:


[Version]
Signature="$CHICAGO$"
Class=Modem
ClassGUID	={4D36E96D-E325-11CE-BFC1-08002BE10318}
Provider=%Mfg%
DriverVer=09/26/2003,5.9.26.03

The single addition is ClassGUID. This string is always going to be


ClassGUID	={4D36E96D-E325-11CE-BFC1-08002BE10318}

for serial modems. It tells Windows that this is a modem on a serial port. It also lies to Windows and tells Windows that it’s a PnP modem – even though the modem is NOT PnP. This is one big difference between Windows XP and Windows 7 – Windows 7 expects that all dialup modems plugged into it are PnP. Fortunately in this one instance of using external hardware serial modems, that does not matter, since
Windows 7 will assume during a modem install that if an external hardware PnP modem isn’t responding, it is because the user had it turned off, and it will allow the user to manually select the COM port.
 
The next section is this:


[Manufacturer]
%Mfg% = Mfg

We are going to modify it as such:


[Manufacturer]
%Mfg% = Mfg,NTamd64,NTia64

These are important keywords needed for 64bit INF files, they tell Windows this INF file will work on either the Intel or AMD 64 bit architecture.
 
The next modification is here:


[Mfg.NTamd64]
%Modem9% = Modem9, UNIMODEM10E94000

[Mfg.NTia64]
%Modem9% = Modem9, UNIMODEM10E94000

This is placed right before the


[Strings]
Mfg = "MultiTech Systems"

section. Note that I am grabbing the definitions used for my model of modem and sticking them into the section for the 64bit Windows. Since I know the modem I want to use, I can pull the name UNIMODEM10E94000 and Modem9 out of the list and hard code it in the 64bit sections. (notice where in the [Mfg] section those defines are) Note that UNIMODEM10E94000 is a Legacy Unimodem ID and is only used by Windows 7 (and Windows XP) as a handy device ID. PnP modems are supposed to use a different ID which will be shown in the next example.
 
That completes the modification. Note that this INF file works differently under 64bit Windows than under Windows XP. The main difference is that under XP you are presented a manufacturer name, and a list of modem models. Under this one, you are just presented the manufacturer name, and the one model. (I’m not sure how to get the multiple model selection logic to work in a 64bit INF). Since there are minimal edits this file should still work for Windows XP.
 
Note that Windows 7 changed the Maximum Port Speed in the Properties of the modem so it’s not settable. But if you go into Device Manager and Properties of the modem itself, you can still set it. This has nothing to do with the INF file.
 
The next example is for the Multitech ZDXb-u. This INF file name is 5634ZDX.INF. This is a more modern INF file and the 5634ZDX modem IS a PnP modem. Note this INF file already has the ClassGUID section so we do not have to add it.
 
We start by looking for the section that contains SERENUM. This section defines what name the modem is going to be known by in the operating system under the serial enumeration. In our INF file it is SERENUM\HSM0100 it is in the [Models] section.


;----------------------------------------------------------------------------
; Modem models
;----------------------------------------------------------------------------
[Models]
;	External Controller based modem
%Modem1%        = Modem_EXTERNAL, SERENUM\HSM0100
%Modem1%        = Modem_EXTERNAL, UNIMODEMB3F30732	; North America

Now, look for the [Manufacturer] section, we are going to modify this. In our INF file it is:


;----------------------------------------------------------------------------
;	Manufacturer
;----------------------------------------------------------------------------
[Manufacturer]
%Mfg% = Models

As before we want to tell Windows that this INF file will work under a 64 bit OS like Windows 7 64 bit. We do that by doing this:


;----------------------------------------------------------------------------
;	Manufacturer
;----------------------------------------------------------------------------
[Manufacturer]
%Mfg% = Models,NTamd64,NTia64

Now we look for the [Strings] section in our INF file:


;----------------------------------------------------------------------------
; Strings
;----------------------------------------------------------------------------
[Strings]
ClassName = "Modem"
Mfg = "MTS"

We are going to add in the commands right before that, that define this modem for 64bit Windows:


[Models.NTamd64]
%Modem1% = Modem_EXTERNAL, SERENUM\HSM0100

[Models.NTia64]
%Modem1% = Modem_EXTERNAL, SERENUM\HSM0100

;----------------------------------------------------------------------------
; Strings
;----------------------------------------------------------------------------
[Strings]
ClassName = "Modem"
Mfg = "MTS"

Notice that it is just a copy of the line on:


;----------------------------------------------------------------------------
; Modem models
;----------------------------------------------------------------------------
[Models]
;	External Controller based modem
%Modem1%        = Modem_EXTERNAL, SERENUM\HSM0100

Notice also that that section does have a Legacy Hardware ID which we are not going to use. This second INF file is a little easier to modify because it already has the PnP definitions.
 
The next INF file is for a Panasonic model TO-BXF56K modem. This is kind of an interesting one because this modem was NEVER sold in the United States, it was only sold in Japan. In fact the modem I have that I’m using for testing does not even have English on the label, it has Japanese. (I got it from a used computer dealer for about $2 probably about 6 years ago.) This modem IS a PnP modem but it lacks a 64bit INF file, and it also was spotty on responding to a PnP search – one day it did, the other day it didn’t.
 
This modem was one of the only external modems I ever found which properly autodialed on a Panasonic phone system plugged into a PRI – the US Robotics modems I had, all failed, as they could not detect the synthetic dialtone the phone system presented. (Winmodems worked fine, for some reason)
 
To find the XP INF file I Googled this: “panasonic TO-BXF56K”, which gave me this website in the Google listing:
 
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCMQFjAA&url=http%3A%2F%2Fctlg.panasonic.com%2Fjp%2Fp3%2Fnetwork2%2Fmodem%2FTO-BXF56K.html&ei=m3BDVKfKCc_ciQKlwoGABQ&usg=AFQjCNG-4bb_JL0OJwJcKRlgTwjmr6N9hA
 
Google helpfully gives a Translate this page, which clicking on gives this:
 
http://translate.google.com/translate?hl=en&sl=ja&u=http://ctlg.panasonic.com/jp/p3/network2/modem/TO-BXF56K.html&prev=/search%3Fq%3Dpanasonic%2BTO-BXF56K%26newwindow%3D1
 
which is a nice translation of this page:
 
http://ctlg.panasonic.com/jp/p3/network2/modem/TO-BXF56K.html
 
Down on the bottom under Equipment Information is a Software link which takes us here:
 
http://translate.googleusercontent.com/translate_c?depth=1&hl=en&prev=/search%3Fq%3Dpanasonic%2BTO-BXF56K%26newwindow%3D1&rurl=translate.google.com&sl=ja&u=http://panasonic.jp/support/p3/download.html&usg=ALkJrhh35E7gSxbcj6JRmhvsYVD_eDuJUA
 
Scrolling down to “Communication card network equipment / interface” takes us to a download page that lists TO-BXF56K for setup file – Windows for. Clicking on that gives us a tech article on how to install it – and on the bottom of the tech article – there’s an attachment named BXF56K.ex_. Clicking that gives an error on translation – but it gives the URL of the page translation was attempted on – and copying and pasting that into a browser gets the file download. Downloading that, renaming it to a .exe file, and running it (it is a self-extractor) extracts 2 files – a readme.txt in Japanese and a BKF56K2.inf file.
 
The above illustrates that it is important to BE PERSISTENT when searching for INF files, and it also illustrates a fascinating thing about modems – the CONNECT strings are in English, not Japanese, even though this is a Japanese modem! That is because the CONNECT strings are part of the so-called “AT Command set” also known by the older name Hayes Command Set, which was invented in the United States. That command set was English with no allowance for foreign language, which is why you find a Japanese modem speaking English.
 
This INF is a typical old-style INF – and is modified much like the first INF file:
 
Add


ClassGUID	={4D36E96D-E325-11CE-BFC1-08002BE10318}

to the [Version] Group. Change the Manufacturer group:


[Manufacturer]
%Mfg% = Models,NTamd64,NTia64

and add the following right above [Strings]


[Models.NTamd64]
%Modem1% = Modem1, SERENUM\MDO5119

[Models.NTia64]
%Modem1% = Modem1, SERENUM\MDO5119

The next INF file I’m going to update is for the US Robotics Courier V.Everything modem. The fact that this needed to be modified was a little disappointing. US Robotics (Named after the company U.S. Robots and Mechanical Men, Inc. from Asimov’s Science Fiction book series) was a famous manufacturer of modems, and their Courier modems were absolutely top of the line modems. (they were also quite expensive) In 1997 they merged with 3com and the external Courier modems began sporting the 3com label – and also became Plug n Play. But the older Couriers supported the V90 protocol via firmware update and many are still in service today. US Robotics became involved in several mergers and acquisitions but never seemed to find a product to replace it’s line of modems, and as the dialup modem market shrank, so did they. Today, the Couriers are still sold, with the same case design.
 
The INF file I need is for an old style pre-PnP Courier, located here
 
The file is crinf.zip. Extract this to get the INF file mdmcrv90.inf. Here are the modifications:


[Manufacturer]
%USR% = USR

becomes


[Manufacturer]
%USR% = USR,NTamd64,NTia64

Add the section:


[USR.NTamd64]
%Modem2% = Modemex, UNIMODEM9C2661B0

[USR.NTia64]
%Modem2% = Modemex, UNIMODEM9C2661B0

right before [Strings] Notice the variables in this section and where else in the INF file they are defined. Because this modem is not PnP, I am not using the SERENUM\USR0100 device ID, I’m using the obsoleted legacy Unimodem ID.
 
The very last modem INF file I’m going to modify is for the US Robotics older 28.8k Sportster modem. This modem does have an ancient INF file available from the USR site dating from Windows 98 days but USR lost all interest in this modem many years ago. Their INF is located here and named mdmusrsp.inf. But I am also going to use data from the INF file from this site http://www.digitalroom.net/calltrace/support.html, specifically this download. The Caller Trace application author modified the old US Robotics INF file for the 28.8k Sportster Vi to support Caller ID. The US Robotics Sportster also supports Caller ID so we are going to use info from the usrvi.zip and add it into the other INF file, then update that for Windows 7 for the 28.8k External faxmodem. The modified inf file is at the end of this article.
 
So far, I have only been modifying existing INF files in this article – if you want to dig deeper into modem INF files I recommend the following website: http://vlaurie.com/computers2/Articles/inf-file.htm
and http://msdn.microsoft.com/en-US/windows/hardware/
 
With the second URL, go to the Microsoft website. On the grey menu bar, click on Drivers. Then click on Device and Driver Technologies, then Modem Devices, then Design Guide, then Creating INF Files for Data Modems, then Modifying SmpData.inf. This is how Microsoft says to write a modem inf file, modify an existing one, and they supply an existing one. However, you can use any INF file as a template to start
from if you want to write one from scratch.
 
A zipfile with the original and modified INF files that you can study can be downloaded here
 
In summary, I hope you are able to use this article to get an older dialup modem working with a newer Windows 7 or later Windows system and learn a little about modifying INF files.