windows-nt/Source/XPSP1/NT/net/dhcp/server/binl/netinfp.h

242 lines
5.2 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1994-7 Microsoft Corporation
Module Name:
netinfp.h
Abstract:
This file contains the structures and prototypes necessary for the
netcard inf parser handler.
Author:
Andy Herron (andyhe) 12-Mar-1998
Environment:
User Mode - Win32
Revision History:
--*/
#ifndef _NETINFP_
#define _NETINFP_
#define NETINF_VENDOR_STRING L"VEN_"
#define NETINF_REVISION_STRING L"REV_"
#define NETINF_DEVICE_STRING L"DEV_"
#define NETINF_IOSUBS_STRING L"SUBSYS_"
#define NETINF_BUS_TYPE_PCI 2
#define NETINF_BUS_TYPE_ISAPNP 3
#define NETCARD_HASH_TABLE_SIZE 17
extern CRITICAL_SECTION NetInfLock;
#define RNDM_CONSTANT 314159269 /* default scrambling constant */
#define RNDM_PRIME 1000000007 /* prime number for scrambling */
//
// Compute a string hash value that is invariant to case
//
#define COMPUTE_STRING_HASH( _pus, _phash ) { \
PWCHAR _p = _pus; \
ULONG _chHolder =0; \
\
while( *_p != L'\0' ) { \
_chHolder = 37 * _chHolder + (unsigned int) *(_p++); \
} \
\
*(_phash) = abs(RNDM_CONSTANT * _chHolder) % RNDM_PRIME; \
}
#define HASH_TO_INF_INDEX( _hash ) ((_hash) % NETCARD_HASH_TABLE_SIZE)
//
// this is the block that we keep for every install directory that we
// process INF files for. We then keep the list of configurations as a list
// off of the NetCardEntryList.
//
typedef struct _NETCARD_INF_BLOCK {
ULONG ReferenceCount;
LIST_ENTRY InfBlockEntry; // list entry for global list
// table of list of NETCARD_RESPONSE_DATABASE, hashed by DeviceHw string
LIST_ENTRY NetCardEntries[ NETCARD_HASH_TABLE_SIZE ];
ULONG Architecture;
ULONG StatusFromScan;
PNETINF_CALLBACK FileListCallbackFunction;
LPVOID FileListCallbackContext;
CRITICAL_SECTION Lock;
WCHAR InfDirectory[1]; // inf directory to search
} NETCARD_INF_BLOCK, *PNETCARD_INF_BLOCK;
//
// NetInfGetAllNetcardInfo parses all the INF files in the given directory
// and sets up a structure containing all the data. Be sure to call
// NetInfCloseNetcardInfo when you're all done with the structure.
//
ULONG
NetInfAllocateNetcardInfo (
PWCHAR InfPath,
ULONG Architecture,
PNETCARD_INF_BLOCK *pNetCards
);
//
// This frees all resources associated with the parsing of the INF files.
// Any entries that are in use will not be deleted until they're explicitely
// dereferenced using NetInfDereferenceNetcardEntry.
//
ULONG
NetInfCloseNetcardInfo (
PNETCARD_INF_BLOCK pNetCards
);
//
// This finds a specific driver for a given hardware description.
// Be sure to call NetInfDereferenceNetcardEntry when you're done with the
// entry.
//
ULONG
FindNetcardInfo (
PNETCARD_INF_BLOCK pNetCards,
ULONG CardInfoVersion,
NET_CARD_INFO UNALIGNED * CardIdentity,
PNETCARD_RESPONSE_DATABASE *pInfEntry
);
ULONG
GetSetupLineWideText (
PINFCONTEXT InfContext,
HINF InfHandle,
PWCHAR Section,
PWCHAR Key,
PWCHAR *String,
PULONG SizeOfAllocation OPTIONAL
);
ULONG
GetSetupWideTextField (
PINFCONTEXT InfContext,
DWORD FieldIndex,
PWCHAR *String,
PULONG SizeOfAllocation OPTIONAL
);
ULONG
GetHexValueFromHw (
PWCHAR *String, // this is updated.
PULONG longValue,
PUSHORT shortValue
);
BOOLEAN
IsSubString (
PWCHAR subString,
PWCHAR target,
BOOLEAN ignoreCase
);
ULONG
CheckHwDescription (
PWCHAR HardwareID
);
ULONG
GetNetCardList (
PNETCARD_INF_BLOCK pNetCards
);
ULONG
ProcessInfFile (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName
);
ULONG
ParseCardDetails (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PINFCONTEXT DeviceEnumContext
);
ULONG
GetExtendedSectionName (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PNETCARD_RESPONSE_DATABASE pEntry
);
ULONG
GetServiceAndDriver (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PNETCARD_RESPONSE_DATABASE pEntry
);
ULONG
ProcessCopyFilesSubsection (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PNETCARD_RESPONSE_DATABASE pEntry,
PWCHAR SectionToParse
);
ULONG
GetRegistryParametersForDriver (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PNETCARD_RESPONSE_DATABASE pEntry
);
ULONG
ProcessRegistrySubsection (
PNETCARD_INF_BLOCK pNetCards,
HINF InfHandle,
PWCHAR InfFileName,
PNETCARD_RESPONSE_DATABASE pEntry,
PWCHAR SectionToParse
);
VOID
DereferenceNetcardInfo (
PNETCARD_INF_BLOCK pNetCards
);
ULONG
CreateListOfCardIdentifiers (
NET_CARD_INFO UNALIGNED * CardIdentity,
PWCHAR *CardIdentifiers
);
VOID
ConvertHexToBuffer (
PWCHAR Buff,
USHORT Value
);
#endif _NETINFP_