Windows NT 4.0 source code leak
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

//
// 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__