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.
581 lines
18 KiB
581 lines
18 KiB
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
HdDetect.hxx
|
|
|
|
OLDNAME: NCPADTCT.HXX:
|
|
|
|
Netcard detection interface.
|
|
|
|
|
|
FILE HISTORY:
|
|
DavidHov 10/31/92 Created
|
|
terryk 1/11/95 Add Temporary Claim and free resource
|
|
|
|
*/
|
|
|
|
#ifndef _HDDETECT_HXX_
|
|
#define _HDDETECT_HXX_
|
|
|
|
// Constants used for NcDetectIdentify().
|
|
|
|
#define CD_ID_BASE 1000 // Starting ID for netcards
|
|
#define CD_ID_INCR 100 // Netcard increment
|
|
#define CD_ID_OPTION 0 // Option name
|
|
#define CD_ID_DSP_NAME 1 // Displayable name
|
|
#define CD_ID_MFGR 2 // Displayable manufacturer's name
|
|
#define CD_ID_SORTORD 3 // Sort order
|
|
|
|
#define SORTORDER_MINIMUM 0
|
|
#define SORTORDER_DEFAULT 500
|
|
#define SORTORDER_MAXIMUM 1000
|
|
|
|
class DLL ; // Wrapper for dynamic use of DLL
|
|
class DETECT_DLL ; // Subclass of DLL for detection DLLs
|
|
class CARDTYPE_REFERENCE ; // Card type control object
|
|
class CARD_REFERENCE ; // Card instance control object
|
|
class DETECTION_MANAGER ; // Group object in charge of detection
|
|
|
|
class SLIST_OF_CARDTYPE_REFERENCE ;
|
|
class SLIST_OF_DETECT_DLL ;
|
|
class SLIST_OF_CARD_REFERENCE ;
|
|
|
|
//
|
|
// TYPEDEFs for function pointers to detection DLL functions.
|
|
//
|
|
|
|
#define NC_DETECT_IDENTIFY "NcDetectIdentify"
|
|
typedef LONG (*pNcDetectIdentify) ( LONG lIndex,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
#define NC_DETECT_QUERY_MASK "NcDetectQueryMask"
|
|
typedef LONG (*pNcQueryMask) ( LONG lIndex,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
#define NC_DETECT_FIRST_NEXT "NcDetectFirstNext"
|
|
typedef LONG (*pNcDetectFirstNext) ( LONG lNetcardId,
|
|
LONG itBusType,
|
|
LONG lBusNumber,
|
|
BOOL fFirst,
|
|
PVOID * ppvToken,
|
|
LONG * lConfidence ) ;
|
|
|
|
#define NC_DETECT_OPEN_HANDLE "NcDetectOpenHandle"
|
|
typedef LONG (*pNcDetectOpenHandle) ( PVOID pvToken,
|
|
PVOID * ppvHandle ) ;
|
|
|
|
#define NC_DETECT_CREATE_HANDLE "NcDetectCreateHandle"
|
|
typedef LONG (*pNcDetectCreateHandle) ( LONG lNetcardId,
|
|
LONG itBusType,
|
|
LONG lBusNumber,
|
|
PVOID * ppvToken ) ;
|
|
|
|
#define NC_DETECT_CLOSE_HANDLE "NcDetectCloseHandle"
|
|
typedef LONG (*pNcDetectCloseHandle) ( PVOID pvHandle ) ;
|
|
|
|
|
|
#define NC_DETECT_QUERY_CFG "NcDetectQueryCfg"
|
|
typedef LONG (*pNcQueryCfg) ( PVOID pvHandle,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
#define NC_DETECT_VERIFY_CFG "NcDetectVerifyCfg"
|
|
typedef LONG (*pNcVerifyCfg) ( PVOID pvHandle,
|
|
WCHAR * pwcBuffer ) ;
|
|
|
|
#define NC_DETECT_PARAM_NAME "NcDetectQueryParameterName"
|
|
typedef LONG (*pNcQueryParamName) ( WCHAR * pwcParamName,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
#define NC_DETECT_QUERY_PARAM_RANGE "NcDetectParamRange"
|
|
typedef LONG (*pNcQueryParamRange) ( LONG lIndex,
|
|
WCHAR * pwcParamName,
|
|
LONG * plValues,
|
|
LONG * plValueCount );
|
|
|
|
|
|
// Functions which only exist in MSNCDET.DLL
|
|
|
|
#define NC_DETECT_RESOURCE_CLAIM "NcDetectResourceClaim"
|
|
typedef LONG (*pNcDetectResourceClaim) ( LONG itBusType,
|
|
LONG lBusNumber,
|
|
LONG lType,
|
|
LONG lValue,
|
|
LONG lRange,
|
|
LONG lFlags,
|
|
BOOL fClaim) ;
|
|
|
|
#define NC_DETECT_RESOURCE_FREE "NcDetectResourceFree"
|
|
typedef LONG (*pNcDetectResourceFree) ( LONG itBusType,
|
|
LONG lBusNumber,
|
|
LONG lType,
|
|
LONG lValue,
|
|
LONG lRange,
|
|
LONG lFlags ) ;
|
|
|
|
#define NC_DETECT_TEMPORARY_RESOURCE_CLAIM "NcDetectTemporaryClaimResource"
|
|
typedef LONG (*pNcDetectTemporaryResourceClaim) ( NETDTECT_RESOURCE * resource );
|
|
|
|
#define NC_DETECT_TEMPORARY_RESOURCE_FREE "NcDetectFreeTemporaryResource"
|
|
typedef LONG (*pNcDetectTemporaryResourceFree) ();
|
|
|
|
|
|
enum DETECT_DLL_VINDEX
|
|
{
|
|
DDVI_DetectIdentify,
|
|
DDVI_QueryMask,
|
|
DDVI_DetectFirstNext,
|
|
DDVI_DetectOpenHandle,
|
|
DDVI_DetectCreateHandle,
|
|
DDVI_DetectCloseHandle,
|
|
DDVI_DetectQueryCfg,
|
|
DDVI_DetectVerifyCfg,
|
|
DDVI_QueryParamRange,
|
|
DDVI_MinimumRequired,
|
|
DDVI_QueryParamName = DDVI_MinimumRequired,
|
|
DDVI_ResourceClaim,
|
|
DDVI_ResourceFree,
|
|
DDVI_TemporaryResourceClaim,
|
|
DDVI_TemporaryResourceFree,
|
|
DDVI_Maximum
|
|
};
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: DLL
|
|
|
|
SYNOPSIS: Wrapper for a non-specific dynamically loaded DLL
|
|
|
|
INTERFACE: Constructed during DETECTION_MANAGER construct.
|
|
|
|
PARENT: BASE
|
|
|
|
USES: NLS_STR
|
|
|
|
CAVEATS: None
|
|
|
|
NOTES: Don't construct; use DETECTION_MANAGER
|
|
|
|
HISTORY: DavidHov 11/1/92 Created
|
|
|
|
|
|
**************************************************************************/
|
|
CLASS_DECLSPEC DLL : public BASE
|
|
{
|
|
public:
|
|
const NLS_STR & Name ()
|
|
{ return _nlsDllName ; }
|
|
HINSTANCE Handle ()
|
|
{ return _hDll ; }
|
|
|
|
protected:
|
|
HINSTANCE _hDll ; // Handle to the DLL
|
|
NLS_STR _nlsDllName ; // Name of DLL
|
|
|
|
DLL ( const TCHAR * pszDllName ) ;
|
|
~ DLL () ;
|
|
};
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: CARDTYPE_REFERENCE
|
|
|
|
SYNOPSIS: Representation of a network card option available from
|
|
one of the detection DLLs.
|
|
|
|
INTERFACE: Constructed by DETECTION_MANAGER during enumeration of
|
|
detection DLLs.
|
|
|
|
PARENT: BASE
|
|
|
|
USES: DETECT_DLL
|
|
NLS_STR
|
|
|
|
CAVEATS: Don't instantiate. Use DETECTION_MANAGER instead.
|
|
|
|
NOTES:
|
|
|
|
HISTORY: DavidHov 11/1/92 Created
|
|
|
|
|
|
**************************************************************************/
|
|
CLASS_DECLSPEC CARDTYPE_REFERENCE : public BASE
|
|
{
|
|
friend class DETECT_DLL ;
|
|
friend class SLIST_OF_CARDTYPE_REFERENCE ;
|
|
public:
|
|
const TCHAR * QueryOptionName ()
|
|
{ return _nlsOptionName.QueryPch() ; }
|
|
const TCHAR * QueryParamMask ()
|
|
{ return _pszParamMask ; }
|
|
|
|
TCHAR * QueryConfigurationOptions () ;
|
|
|
|
LONG QueryType ()
|
|
{ return _lCardType ; }
|
|
LONG QuerySortOrder ()
|
|
{ return _lSortOrder ; }
|
|
|
|
DETECT_DLL * Dll ()
|
|
{ return & _dll ; }
|
|
|
|
private:
|
|
DETECT_DLL & _dll ; // Responsible DLL
|
|
LONG _lCardType ; // Card type number
|
|
LONG _lSortOrder ; // Sort order [0..1000]
|
|
NLS_STR _nlsOptionName ; // INF file option name
|
|
TCHAR * _pszParamMask ; // Result of NcDetectQueryMask()
|
|
|
|
TCHAR * QueryMask () ; // Invoke NcDetectQueryMask
|
|
|
|
CARDTYPE_REFERENCE ( DETECT_DLL & dll, LONG lCardType ) ;
|
|
~ CARDTYPE_REFERENCE () ;
|
|
};
|
|
|
|
DECLARE_SLIST_OF(CARDTYPE_REFERENCE)
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: DETECT_DLL
|
|
|
|
SYNOPSIS: Representation of a netcard detection DLL.
|
|
|
|
INTERFACE: See NOTES
|
|
|
|
PARENT: DLL
|
|
|
|
USES: nothing
|
|
|
|
CAVEATS:
|
|
|
|
NOTES: Don't construct; use DETECTION_MANAGER
|
|
|
|
HISTORY: DavidHov 11/1/92 Created
|
|
|
|
|
|
**************************************************************************/
|
|
CLASS_DECLSPEC DETECT_DLL : public DLL
|
|
{
|
|
friend class DETECTION_MANAGER ;
|
|
friend class SLIST_OF_DETECT_DLL ;
|
|
|
|
public:
|
|
APIERR AddCardTypesToList ( SLIST_OF_CARDTYPE_REFERENCE * pslCtype ) ;
|
|
|
|
LONG Identify ( LONG lIndex,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
LONG QueryMask ( LONG lIndex,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
LONG FirstNext ( LONG lNetcardId,
|
|
LONG itBusType,
|
|
LONG lBusNumber,
|
|
BOOL fFirst,
|
|
PVOID * ppvToken,
|
|
LONG * lConfidence ) ;
|
|
|
|
LONG OpenHandle ( PVOID pvToken,
|
|
PVOID * ppvHandle ) ;
|
|
|
|
LONG CreateHandle ( LONG lNetcardId,
|
|
LONG itBusType,
|
|
LONG lBusNumber,
|
|
PVOID * ppvToken ) ;
|
|
|
|
LONG CloseHandle ( PVOID pvHandle ) ;
|
|
|
|
LONG QueryCfg ( PVOID pvHandle,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
LONG VerifyCfg ( PVOID pvHandle,
|
|
const WCHAR * pwcBuffer ) ;
|
|
|
|
LONG QueryParamName ( const WCHAR * pwcParamName,
|
|
WCHAR * pwcBuffer,
|
|
LONG cwchBuffSize ) ;
|
|
|
|
LONG QueryParamRange ( LONG lIndex,
|
|
const WCHAR * pwcParamName,
|
|
LONG * plValues,
|
|
LONG * plValueCount );
|
|
|
|
LONG ClaimResource ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
LONG lType,
|
|
LONG lValue,
|
|
LONG lRange,
|
|
LONG lFlags,
|
|
BOOL fClaim ) ;
|
|
|
|
LONG FreeResource ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
LONG lType,
|
|
LONG lValue,
|
|
LONG lRange,
|
|
LONG lFlags ) ;
|
|
|
|
LONG TemporaryClaimResource ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
LONG lType,
|
|
LONG lValue,
|
|
LONG lRange,
|
|
LONG lFlags,
|
|
BOOL fClaim ) ;
|
|
|
|
LONG TemporaryFreeResource ( );
|
|
|
|
// Return TRUE if given routine was found in DLL
|
|
BOOL QueryRtnAvail ( DETECT_DLL_VINDEX ddvi ) const
|
|
{ return _pFarRtn[ ddvi ] != NULL ; }
|
|
|
|
private:
|
|
FARPROC _pFarRtn [DDVI_Maximum] ;
|
|
|
|
DETECT_DLL ( const TCHAR * pszDllName ) ;
|
|
~ DETECT_DLL () ;
|
|
};
|
|
|
|
|
|
DECLARE_SLIST_OF(DETECT_DLL)
|
|
|
|
|
|
typedef struct
|
|
{
|
|
INTERFACE_TYPE ifType ;
|
|
INT iBus ;
|
|
} BUS_ELEMENT ;
|
|
// hack, it should support unlimited bus
|
|
#define MAX_BUSES_ALLOWED 256
|
|
|
|
typedef PVOID CARD_TOKEN ;
|
|
typedef PVOID CARD_HANDLE ;
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: CARD_REFERENCE
|
|
|
|
SYNOPSIS: Representation of a detected card.
|
|
|
|
INTERFACE:
|
|
|
|
PARENT:
|
|
|
|
USES:
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY: DavidHov 11/1/92 Created
|
|
|
|
|
|
**************************************************************************/
|
|
CLASS_DECLSPEC CARD_REFERENCE
|
|
{
|
|
friend class DETECTION_MANAGER ;
|
|
friend class SLIST_OF_CARD_REFERENCE ;
|
|
public:
|
|
|
|
// Query Functions
|
|
|
|
INTERFACE_TYPE QueryIfType ()
|
|
{ return _busElem.ifType ; }
|
|
INT QueryBus ()
|
|
{ return _busElem.iBus ; }
|
|
CARD_TOKEN QueryToken ()
|
|
{ return _tkCard ; }
|
|
CARD_HANDLE QueryHandle ()
|
|
{ return _hCard ; }
|
|
CARDTYPE_REFERENCE * QueryCardType ()
|
|
{ return _pCardTypeRef ; }
|
|
LONG QueryConfidence ()
|
|
{ return _lConfidence ; }
|
|
|
|
// Produce an SProlog-style list string documenting
|
|
// the current coniguration of this card.
|
|
TCHAR * QueryConfiguration () ;
|
|
|
|
// Active Functions
|
|
|
|
APIERR Open () ;
|
|
VOID Close () ;
|
|
|
|
private:
|
|
// Constructor and destructor are hidden
|
|
CARD_REFERENCE ( const BUS_ELEMENT & busElem,
|
|
CARDTYPE_REFERENCE * pCardTypeRef,
|
|
CARD_TOKEN tkCard,
|
|
LONG lConfidence ) ;
|
|
|
|
CARD_REFERENCE ( const BUS_ELEMENT & busElem,
|
|
CARDTYPE_REFERENCE * pCardTypeRef ) ;
|
|
|
|
~ CARD_REFERENCE () ;
|
|
|
|
BUS_ELEMENT _busElem ; // Bus on which card was found
|
|
CARDTYPE_REFERENCE * _pCardTypeRef ; // Ptr to card type reference
|
|
CARD_TOKEN _tkCard ; // Access token from DLL
|
|
CARD_HANDLE _hCard ; // Handle if open or NULL
|
|
LONG _lConfidence ;
|
|
|
|
// Accept a packed list of parameter strings to verify.
|
|
LONG VerifyConfiguration ( const TCHAR * pszParamList ) ;
|
|
};
|
|
|
|
typedef CARD_REFERENCE * PCARD_REFERENCE ;
|
|
|
|
DECLARE_SLIST_OF(CARD_REFERENCE)
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: DETECTION_MANAGER
|
|
|
|
SYNOPSIS: Central control point for netcard detection.
|
|
|
|
INTERFACE: Construct.
|
|
|
|
PARENT: BASE
|
|
|
|
USES: DETECT_DLL
|
|
CARDTYPE_REFERENCE
|
|
CARD_REFERENCE
|
|
|
|
CAVEATS: None
|
|
|
|
NOTES: Construction performs all necessary work.
|
|
|
|
HISTORY: DavidHov 11/1/92 Created
|
|
|
|
|
|
**************************************************************************/
|
|
CLASS_DECLSPEC DETECTION_MANAGER : public BASE
|
|
{
|
|
public:
|
|
|
|
DETECTION_MANAGER () ;
|
|
~ DETECTION_MANAGER () ;
|
|
|
|
// Reset enumeration
|
|
VOID ResetIteration () ;
|
|
|
|
// Bump enumeration
|
|
BOOL BumpIteration () ;
|
|
|
|
// Query enumeration info
|
|
INT QueryIterBus ()
|
|
{ return _cIterBus ; }
|
|
INT QueryIterCardType ()
|
|
{ return _cIterCardType ; }
|
|
|
|
// Query enumeration limits
|
|
INT QueryMaxBus ()
|
|
{ return _cBuses ; }
|
|
INT QueryMaxCardType ()
|
|
{ return _slCtypes.QueryNumElem() ; }
|
|
|
|
// Query bus info
|
|
BOOL QueryBusInfo ( INT iBus,
|
|
INTERFACE_TYPE * pIfType,
|
|
INT * pBusIndex ) ;
|
|
|
|
// Return (externally opaque) detected card reference.
|
|
APIERR DetectCard ( PCARD_REFERENCE * ppCardRef,
|
|
BOOL fFirst = TRUE,
|
|
BOOL fSingleStep = FALSE ) ;
|
|
|
|
// Release a CARD_REFERENCE created by DetectNext()
|
|
VOID ReleaseCard ( PCARD_REFERENCE pCardRef ) ;
|
|
|
|
// Open a handle to an existing card
|
|
CARD_REFERENCE * OpenCard ( const TCHAR * pszOptionName,
|
|
INT iBus,
|
|
INTERFACE_TYPE ifType ) ;
|
|
|
|
// Find a card type by its option name
|
|
CARDTYPE_REFERENCE * FindOptionName ( const TCHAR * pszOption ) ;
|
|
|
|
// Index into the detectable card list
|
|
CARDTYPE_REFERENCE * NthCardType ( INT iIndex ) ;
|
|
|
|
|
|
// Verify the configuration of a CARD_REFERENCE.
|
|
APIERR VerifyConfiguration ( PCARD_REFERENCE pCardRef,
|
|
const TCHAR * pszSpList,
|
|
BOOL fClaim ) ;
|
|
|
|
APIERR VerifyConfiguration ( PCARD_REFERENCE pCardRef,
|
|
CFG_RULE_SET * pcrsList,
|
|
BOOL fClaim ) ;
|
|
|
|
// Claim a set of parameters associated with a specific card;
|
|
// if 'fClaim', claim them, otherwise, just verify availablility.
|
|
APIERR ClaimParameterSet ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
const TCHAR * pszParamList,
|
|
BOOL fClaim = FALSE, BOOL fTemporary = FALSE ) ;
|
|
|
|
APIERR FreeParameterSet ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
const TCHAR * pszParamList, BOOL fTemporary = FALSE ) ;
|
|
|
|
private:
|
|
SLIST_OF_DETECT_DLL _slDlls ; // Slist of detection DLLs
|
|
DETECT_DLL * _pDtDllMsncdet ; // Pointer to MSNCDET.DLL
|
|
INT _cBuses ; // Number of buses found
|
|
BUS_ELEMENT _bus [ MAX_BUSES_ALLOWED ] ; // Bus descriptors
|
|
SLIST_OF_CARDTYPE_REFERENCE _slCtypes ; // Slist of card types
|
|
|
|
// Detection iteration control
|
|
INT _cIterBus ; // Bus type being checked
|
|
INT _cIterCardType ; // Card type being detected
|
|
|
|
|
|
// Private member functions
|
|
APIERR EnumerateBuses () ; // Discover all buses
|
|
APIERR EnumerateDlls () ; // Bind to all DLLs
|
|
APIERR SortCardRefList () ; // Sort cardtypes by search order
|
|
|
|
|
|
// QuikSort helper function
|
|
static INT _CRTAPI1 CardCompareFunc ( const VOID * a, const VOID * b ) ;
|
|
|
|
// Find the value, if any, of the assocated option. Return
|
|
// the value extracted or -1.
|
|
static LONG FindOptionValue ( const TCHAR * pszOption,
|
|
const TCHAR * pszOptionList ) ;
|
|
|
|
APIERR VerifyCfg ( PCARD_REFERENCE pCardRef,
|
|
const TCHAR * pszCfgString,
|
|
BOOL fClaim ) ;
|
|
|
|
// Claim or free a set of parameters associated with a specific card;
|
|
// if 'fClaim', claim them, otherwise, just verify availablility.
|
|
|
|
APIERR ClaimOrFreeParameterSet ( INTERFACE_TYPE itBusType,
|
|
LONG lBusNumber,
|
|
const TCHAR * pszParamList,
|
|
BOOL fClaim,
|
|
BOOL fFree,
|
|
BOOL fTemporary ) ;
|
|
};
|
|
|
|
|
|
// End of NCPADTCT.HXX
|
|
|
|
#endif // _NCPADTCT_HXX_
|
|
|
|
|