mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
530 lines
16 KiB
530 lines
16 KiB
//
|
|
// modem.h
|
|
//
|
|
|
|
#ifndef __MODEM_H__
|
|
#define __MODEM_H__
|
|
|
|
//****************************************************************************
|
|
//
|
|
//****************************************************************************
|
|
|
|
// Maximum number of modems that can be installed (simultaneously). Used in
|
|
// avoiding duplicate installations.
|
|
#define MAX_INSTALLATIONS 4096
|
|
|
|
|
|
// Global flags for the CPL, and their values:
|
|
extern int g_iCPLFlags;
|
|
|
|
#define FLAG_USER_IS_ADMIN 0x0001
|
|
#define FLAG_INSTALL_NOUI 0x0002
|
|
|
|
// Check for flag indicating that user is an admin
|
|
#define USER_IS_ADMIN() (g_iCPLFlags & FLAG_USER_IS_ADMIN)
|
|
|
|
#define INSTALL_NOUI() (g_iCPLFlags & FLAG_INSTALL_NOUI)
|
|
|
|
|
|
#define MAX_REG_KEY_LEN 128
|
|
|
|
|
|
// These should match the values in MODEMUI.DLL
|
|
#define IDI_NULL_MODEM 700
|
|
#define IDI_EXTERNAL_MODEM 701
|
|
#define IDI_INTERNAL_MODEM 702
|
|
#define IDI_PCMCIA_MODEM 703
|
|
|
|
#define LVIF_ALL LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE
|
|
|
|
// This dialog ID is a pre-arranged ID that is
|
|
// defined in the TAPI DLL.
|
|
#define IDD_WIZ_DIALINFO 400
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// Setup info values and structure
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
// TAPI entry-points
|
|
typedef LONG (WINAPI FAR* DIALINITEDPROC)(LPDWORD pdwInited);
|
|
typedef LONG (WINAPI FAR* OPENDIALASSTPROC)(HWND hwnd, LPCSTR pszAddressIn, BOOL bSimple, BOOL bSilentInstall);
|
|
|
|
|
|
// This structure contains the private data shared across the modem wizard
|
|
// dialogs.
|
|
typedef struct tagSETUPINFO
|
|
{
|
|
DWORD cbSize;
|
|
DWORD dwFlags; // SIF_* bitfield
|
|
|
|
HPORTMAP hportmap; // List of ports on system
|
|
TCHAR szPortQuery[MAX_BUF_SHORT]; // Single port to detect on
|
|
LPTSTR pszPortList; // List of ports to install on
|
|
|
|
HDEVINFO hdi; // DeviceInfoSet
|
|
PSP_DEVINFO_DATA pdevData; // May be NULL most of the time
|
|
PSP_INSTALLWIZARD_DATA piwd; // InstallWizard Data
|
|
SP_SELECTDEVICE_PARAMS selParams; // Cached select params
|
|
MODEM_INSTALL_WIZARD miw; // Saved optional parameters
|
|
|
|
// TAPI calls
|
|
HINSTANCE hinstTapi;
|
|
DIALINITEDPROC pfnDialInited;
|
|
|
|
} SETUPINFO, FAR * LPSETUPINFO;
|
|
|
|
// Flags for SETUPINFO
|
|
#define SIF_PORTS_GALORE 0x00000001 // There are > 4 ports on the system
|
|
#define SIF_DETECTED_GENERIC 0x00000002 // Standard modem detected
|
|
#define SIF_JUMPED_TO_SELECTPAGE 0x00000004 // Wizard proceeded to select modem page
|
|
#define SIF_DETECTED_MODEM 0x00000008 // A modem was detected
|
|
#define SIF_DETECTING 0x00000010 // Wizard is currently detecting
|
|
#define SIF_DETECT_CANCEL 0x00000020 // Cancel pending during detection
|
|
#define SIF_JUMP_PAST_DONE 0x00000040 // Skip the "you're done!" page
|
|
#define SIF_RELEASE_IN_CALLBACK 0x00000080 // Release the private data in the prsht callback
|
|
|
|
// Status callback for DIF_DETECT (modem specific)
|
|
typedef BOOL (CALLBACK FAR* DETECTSTATUSPROC)(DWORD nMsg, LPARAM lParam1, LPARAM lParamUser);
|
|
|
|
// Messages for DETECTSTATUSPROC
|
|
#define DSPM_SETPORT 0L
|
|
#define DSPM_SETSTATUS 1L
|
|
#define DSPM_QUERYCANCEL 2L
|
|
|
|
// lParam1 values for DSPM_SETSTATUS
|
|
#define DSS_CLEAR 0L
|
|
#define DSS_LOOKING 1L
|
|
#define DSS_QUERYING_RESPONSES 2L
|
|
#define DSS_CHECK_FOR_COMPATIBLE 3L
|
|
#define DSS_FOUND_MODEM 4L
|
|
#define DSS_FOUND_NO_MODEM 5L
|
|
#define DSS_FINISHED 6L
|
|
|
|
|
|
// This structure is used for DIF_DETECT. There is no
|
|
// defined SETUPAPI structure for DIF_DETECT, so using this
|
|
// is okay.
|
|
typedef struct tagDETECT_DATA
|
|
{
|
|
SP_CLASSINSTALL_HEADER ClassInstallHeader;
|
|
DWORD dwFlags;
|
|
TCHAR szPortQuery[MAX_BUF_SHORT];
|
|
HWND hwndOutsideWizard;
|
|
DETECTSTATUSPROC pfnCallback;
|
|
LPARAM lParam; // User data for pfnCallback
|
|
} DETECT_DATA, FAR * PDETECT_DATA;
|
|
|
|
// Flags for DETECT_DATA
|
|
#define DDF_DEFAULT 0x00000000
|
|
#define DDF_QUERY_SINGLE 0x00000001
|
|
#define DDF_CONFIRM 0x00000002
|
|
#define DDF_USECALLBACK 0x00000004
|
|
|
|
|
|
|
|
#ifdef INSTANT_DEVICE_ACTIVATION
|
|
|
|
// Global flags which keep track of whether a device had been added/removed/etc.
|
|
#define fDF_DEVICE_ADDED 0x1
|
|
#define fDF_DEVICE_NEEDS_REBOOT 0x2
|
|
#define fDF_DEVICE_REMOVED 0x4
|
|
#define DEVICE_ADDED(_flg) (_flg&fDF_DEVICE_ADDED)
|
|
#define DEVICE_REMOVED(_flg) (_flg&fDF_DEVICE_REMOVED)
|
|
#define DEVICE_CHANGED(_flg) (_flg&(fDF_DEVICE_REMOVED|fDF_DEVICE_ADDED))
|
|
|
|
extern DWORD gDeviceFlags;
|
|
|
|
#endif // INSTANT_DEVICE_ACTIVATION
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// cpl.c
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
// Constant strings
|
|
extern TCHAR const FAR c_szAttachedTo[];
|
|
extern TCHAR const FAR c_szDeviceType[];
|
|
extern TCHAR const FAR c_szHardwareID[];
|
|
extern TCHAR const FAR c_szFriendlyName[];
|
|
extern TCHAR const FAR c_szManufacturer[];
|
|
|
|
extern TCHAR const FAR c_szHardwareIDSerial[];
|
|
extern TCHAR const FAR c_szHardwareIDParallel[];
|
|
extern TCHAR const FAR c_szInfSerial[];
|
|
extern TCHAR const FAR c_szInfParallel[];
|
|
|
|
extern TCHAR const FAR c_szRunOnce[];
|
|
|
|
extern TCHAR const FAR c_szTapiDLL[];
|
|
|
|
extern TCHAR const FAR c_szResponses[];
|
|
extern TCHAR const FAR c_szRefCount[];
|
|
|
|
extern LPGUID g_pguidModem;
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// ci.c
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
// This value is the amount of ports needed on the system
|
|
// before we will consider doing a multi-modem detection
|
|
// installation.
|
|
#define MIN_MULTIPORT 4
|
|
|
|
|
|
// Used by the class installer and detection engine
|
|
typedef struct tagDETECTCALLBACK
|
|
{
|
|
DETECTSTATUSPROC pfnCallback;
|
|
LPARAM lParam; // User data for pfnCallback
|
|
} DETECTCALLBACK, * PDETECTCALLBACK;
|
|
|
|
DWORD
|
|
PUBLIC
|
|
DetectModemOnPort(
|
|
IN HDEVINFO hdi,
|
|
IN PDETECTCALLBACK pdc,
|
|
IN HANDLE hLog,
|
|
IN LPCTSTR pszPort,
|
|
OUT PMODEM_DETECT_SIG pmds,
|
|
OUT PSP_DEVINFO_DATA pdevDataOut);
|
|
|
|
void
|
|
PUBLIC
|
|
DetectSetStatus(
|
|
PDETECTCALLBACK pdc,
|
|
DWORD nStatus);
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// ui.c
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
BOOL CALLBACK SelPrevPageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK IntroDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK SelQueryPortDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK PortDetectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK DetectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK FoundDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK NoModemDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK PortManualDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK DialInfoDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK InstallDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK DoneDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
BOOL
|
|
CALLBACK
|
|
CloneDlgProc(
|
|
IN HWND hDlg,
|
|
IN UINT message,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam);
|
|
|
|
void PUBLIC Detect_SetStatus(HWND hdlg, UINT idResource);
|
|
void PUBLIC Detect_SetPort(HWND hdlg,LPCTSTR lpc_szName);
|
|
BOOL PUBLIC Detect_QueryCancel(HWND hdlg);
|
|
void PUBLIC Install_SetStatus(HWND hdlg, LPCTSTR lpctszStatus);
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// util.c
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
#ifdef WIN95
|
|
LPCTSTR
|
|
PUBLIC
|
|
StrFindInstanceName(
|
|
IN LPCTSTR pszPath);
|
|
#endif
|
|
|
|
void
|
|
PUBLIC
|
|
EnterInsideWizard(
|
|
IN HWND hDlg);
|
|
|
|
void
|
|
PUBLIC
|
|
LeaveInsideWizard(
|
|
IN HWND hDlg);
|
|
|
|
void
|
|
PUBLIC
|
|
MakeUniqueName(
|
|
OUT LPTSTR pszBuf,
|
|
IN LPCTSTR pszBase,
|
|
IN UINT nCount);
|
|
|
|
void
|
|
PUBLIC
|
|
DoRunOnce(
|
|
IN HKEY hkeyDrv);
|
|
|
|
void
|
|
PUBLIC
|
|
DoDialingProperties(
|
|
IN HWND hwndOwner,
|
|
IN BOOL bMiniDlg,
|
|
IN BOOL bSilentInstall);
|
|
|
|
DWORD
|
|
PUBLIC
|
|
SetupInfo_Create(
|
|
OUT LPSETUPINFO FAR * ppsi,
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData, OPTIONAL
|
|
IN PSP_INSTALLWIZARD_DATA piwd, OPTIONAL
|
|
IN PMODEM_INSTALL_WIZARD pmiw); OPTIONAL
|
|
|
|
DWORD
|
|
PUBLIC
|
|
SetupInfo_Destroy(
|
|
IN LPSETUPINFO psi);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
UnattendedInstall(
|
|
HWND hwnd,
|
|
LPINSTALLPARAMS lpip);
|
|
|
|
#ifdef INSTANT_DEVICE_ACTIVATION
|
|
void NotifyTSP_ReEnum(void);
|
|
void NotifyTSP_NewCommConfig(LPCTSTR lpctszFriendlyName);
|
|
#endif // INSTANT_DEVICE_ACTIVATION
|
|
|
|
#ifdef DEBUG
|
|
|
|
LPCTSTR PUBLIC Dbg_GetDifName(DI_FUNCTION dif);
|
|
|
|
// DBG_ENTER_DIF(fn, dif) -- Generates a function entry debug spew for
|
|
// a function that accepts an InstallFunction as
|
|
// one of its parameters.
|
|
//
|
|
#define DBG_ENTER_DIF(fn, dif) \
|
|
TRACE_MSG(TF_FUNC, " > " #fn "(..., %s,...)", Dbg_GetDifName(dif))
|
|
|
|
// DBG_EXIT_BOOL_ERR(fn, b) -- Generates a function exit debug spew for
|
|
// functions that return a boolean. It also
|
|
// prints the GetLastError().
|
|
//
|
|
#define DBG_EXIT_BOOL_ERR(fn, b) \
|
|
TRACE_MSG(TF_FUNC, " < " #fn "() with %s (%#08lx)", (b) ? (LPTSTR)TEXT("TRUE") : (LPTSTR)TEXT("FALSE"), GetLastError())
|
|
|
|
// Trace functions when writing registry values
|
|
//
|
|
#define TRACE_DEV_SZ(szName, szValue) TRACE_MSG(TF_REG, "Set dev value %s to %s", (LPTSTR)(szName), (LPTSTR)(szValue))
|
|
|
|
#define TRACE_DRV_SZ(szName, szValue) TRACE_MSG(TF_REG, "Set drv value %s to %s", (LPTSTR)(szName), (LPTSTR)(szValue))
|
|
#define TRACE_DRV_DWORD(szName, dw) TRACE_MSG(TF_REG, "Set drv value %s to %#08lx", (LPTSTR)(szName), (DWORD)(dw))
|
|
|
|
#else // DEBUG
|
|
|
|
#define DBG_ENTER_DIF(fn, dif)
|
|
#define DBG_EXIT_BOOL_ERR(fn, b)
|
|
|
|
#define TRACE_DEV_SZ(szName, szValue)
|
|
#define TRACE_DRV_SZ(szName, szValue)
|
|
#define TRACE_DRV_DWORD(szName, dw)
|
|
|
|
#endif // DEBUG
|
|
|
|
#ifdef WINNT
|
|
|
|
#define MyYield()
|
|
#define CM_Lock(x)
|
|
#define CM_Unlock(x)
|
|
|
|
#endif // WINNT
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
// Wrappers to insulate us a little bit if we need it. We need it.
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
|
// This macro returns the ClassInstallHeader given a ClassInstallParams
|
|
// pointer.
|
|
|
|
#define PCIPOfPtr(p) ((PSP_CLASSINSTALL_HEADER)(p))
|
|
|
|
// This macro initializes the ClassInstallHeader of a ClassInstallParams
|
|
// structure.
|
|
|
|
#define CplInitClassInstallHeader(p, dif) \
|
|
(PCIPOfPtr(p)->cbSize = sizeof(SP_CLASSINSTALL_HEADER), \
|
|
PCIPOfPtr(p)->InstallFunction = (dif))
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiIsLocalConnection(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
OUT LPBYTE pnPortSubclass); OPTIONAL
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiInstallModem(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData, OPTIONAL
|
|
IN BOOL bLocalOnly);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiRegisterAndInstallModem(
|
|
IN HDEVINFO hdi,
|
|
IN HWND hwndOwner, OPTIONAL
|
|
IN PSP_DEVINFO_DATA pdevData, OPTIONAL
|
|
IN LPCTSTR pszPort,
|
|
IN DWORD dwFlags);
|
|
|
|
BOOL
|
|
APIENTRY
|
|
CplDiInstallModemFromDriver(
|
|
IN HDEVINFO hdi,
|
|
IN HWND hwndOwner, OPTIONAL
|
|
IN OUT LPTSTR FAR * ppszPortList, // Multi-string
|
|
IN DWORD dwFlags); // IMF_ bit field
|
|
|
|
// Flags for CplDiInstallModemFromDriver
|
|
#define IMF_DEFAULT 0x00000000
|
|
#define IMF_QUIET_INSTALL 0x00000001
|
|
#define IMF_CONFIRM 0x00000002
|
|
#define IMF_MASS_INSTALL 0x00000004
|
|
#define IMF_REGSAVECOPY 0x00000008
|
|
#define IMF_REGUSECOPY 0x00000010
|
|
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiGetModemDevs(
|
|
OUT HDEVINFO FAR * phdi,
|
|
IN HWND hwnd,
|
|
IN DWORD dwFlags, // DIGCF_ bit field
|
|
OUT BOOL FAR * pbInstalled);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiIsModemMarked(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
IN DWORD dwMarkFlags); // MARKF_*
|
|
|
|
void
|
|
PUBLIC
|
|
CplDiMarkModem(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
IN DWORD dwMarkFlags); // MARKF_*
|
|
|
|
// Mark flags
|
|
#define MARKF_DETECTED 0x00000001
|
|
#define MARKF_INSTALL 0x00000002
|
|
#define MARKF_MASS_INSTALL 0x00000004
|
|
#define MARKF_REGSAVECOPY 0x00000008
|
|
#define MARKF_REGUSECOPY 0x00000010
|
|
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiGetDetectSignature(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
OUT PMODEM_DETECT_SIG pmds);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiSetDetectSignature(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
IN PMODEM_DETECT_SIG pmds);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiCopyScrubbedHardwareID(
|
|
OUT LPTSTR pszBuf,
|
|
IN LPCTSTR pszIDList, // Multi string
|
|
IN DWORD cbSize);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiGetHardwareID(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData, OPTIONAL
|
|
IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
|
|
OUT LPTSTR pszHardwareIDBuf,
|
|
IN DWORD cbSize,
|
|
OUT LPDWORD pcbSizeOut); OPTIONAL
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiBuildModemDriverList(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiCreateCompatibleDeviceInfo(
|
|
IN HDEVINFO hdi,
|
|
IN LPCTSTR pszHardwareID,
|
|
IN LPCTSTR pszDeviceDesc, OPTIONAL
|
|
OUT LPTSTR pszDeviceDescBuf, OPTIONAL
|
|
IN DWORD cchBuf, OPTIONAL
|
|
OUT PSP_DEVINFO_DATA pdevDataOut);
|
|
|
|
BOOL
|
|
PUBLIC
|
|
CplDiRegisterModem(
|
|
IN HDEVINFO hdi,
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
IN PMODEM_DETECT_SIG pmds, OPTIONAL
|
|
IN BOOL bFindDups,
|
|
OUT PDETECTSIG_PARAMS pparams); OPTIONAL
|
|
|
|
BOOL
|
|
APIENTRY
|
|
CplDiDetectModem(
|
|
IN HDEVINFO hdi,
|
|
IN PDETECT_DATA pdetectdata, OPTIONAL
|
|
IN HWND hwndOwner, OPTIONAL
|
|
IN OUT LPDWORD pdwFlags); // DMF_ bit field
|
|
|
|
// Flags for CplDiDetectModem
|
|
#define DMF_DEFAULT 0x00000000
|
|
#define DMF_CANCELLED 0x00000001
|
|
#define DMF_DETECTED_MODEM 0x00000002
|
|
#define DMF_QUIET 0x00000004
|
|
#define DMF_GOTO_NEXT_PAGE 0x00000008
|
|
#define DMF_ONE_PORT_INSTALL 0x00000010
|
|
|
|
BOOL ReallyNeedsReboot
|
|
(
|
|
IN PSP_DEVINFO_DATA pdevData,
|
|
IN PSP_DEVINSTALL_PARAMS pdevParams
|
|
);
|
|
|
|
|
|
#ifdef UNDER_CONSTRUCTION
|
|
// Must pass in valid pointers. cch is the size, in TCHAR, of the buffer,
|
|
// including space for the final null char.
|
|
void FormatFriendlyNameForDisplay
|
|
(
|
|
IN TCHAR szFriendly[],
|
|
OUT TCHAR rgchDisplayName[],
|
|
IN UINT cch
|
|
);
|
|
#endif UNDER_CONSTRUCTION
|
|
|
|
|
|
// Must pass in valid pointers. cch is the size, in TCHAR, of the buffer,
|
|
// including space for the final null char.
|
|
void FormatPortForDisplay
|
|
(
|
|
IN TCHAR szPort[],
|
|
OUT TCHAR rgchPortDisplayName[],
|
|
IN UINT cch
|
|
);
|
|
|
|
void UnformatAfterDisplay
|
|
(
|
|
IN OUT TCHAR *psz
|
|
);
|
|
#endif // __MODEM_H__
|