summaryrefslogtreecommitdiffstats
path: root/private/unimodem/new/mic/inf.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/unimodem/new/mic/inf.h')
-rw-r--r--private/unimodem/new/mic/inf.h998
1 files changed, 998 insertions, 0 deletions
diff --git a/private/unimodem/new/mic/inf.h b/private/unimodem/new/mic/inf.h
new file mode 100644
index 000000000..32e1ae85a
--- /dev/null
+++ b/private/unimodem/new/mic/inf.h
@@ -0,0 +1,998 @@
+// // Copyright (c) 1996 Microsoft Corporation
+//
+//
+// INF.H -- Header for Classes:
+//
+// CInfFile
+//
+// CInfVersionSection
+// CInfManufacturerSection
+// CInfInstallSection
+// CInfAddRegSection
+// CInfCopyFilesSection
+//
+// CInfManufacturerEntry
+// CInfModelEntry
+// CInfCopyFilesEntry
+// CInfAddRegEntry
+//
+// CInfModelEntryAux
+//
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+
+
+class CInfVersionSection;
+class CInfManufacturerEntry;
+class CInfManufacturerSection;
+class CInfModelEntry;
+class CInfInstallSection;
+class CInfAddRegSection;
+class CInfAddRegEntry;
+class CInfCopyFilesEntry;
+class CInfCopyFilesSection;
+class CInfModelEntryAux;
+
+
+// Control flags
+const DWORD dwCF_EXCLUDE_FROM_SELECT = 0x1<<0;
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfFile
+///////////////////////////////////////////////////////////////////////////
+
+// Represents an inf (device information) file -- which is a special kind
+// of INI file.
+
+
+class CInfFile
+{
+
+public:
+
+ CInfFile(void);
+ ~CInfFile();
+
+ //-------------- Load ------------------
+ // Loads the specified file. (Obviously) only one file can be loaded at
+ // a time.
+ BOOL Load (const TCHAR rgchPathname[]);
+
+ //-------------- Unload ------------------
+ // Unloads a previously loaded file. If there are open sessions to this
+ // object, Unload returns a handle which will be signalled when all
+ // sessions are closed. New sessions will not be allowed after this
+ // function returns. The call should free the handle.
+ // See CloseSession for more info.
+ HANDLE Unload (void);
+
+ //-------------- OpenSession ------------------
+ // Open a session to this object. The object will not be unloaded until
+ // this session is closed. 0 indicates failure.
+ // TODO: unimplemented
+ const void * OpenSession (void) const {return (const void *) 1;}
+
+ //-------------- CloseSession ------------------
+ // Close the specified session to this object.
+ // If the reference count goes to zero and we're marked for unloading,
+ // the object is unloaded as well.
+ // TODO: unimplemented
+ void CloseSession (const void *) const {}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFileName ------------------
+ // Get Version info
+ const CInfSymbol * GetFileName(void) const
+ {
+ return m_pSymFileName;
+ }
+
+ // --------------- GetVersion ------------------
+ // Get Version info
+ const CInfVersionSection * GetVersion(void) const
+ {
+ return m_pVersion;
+ }
+
+ // --------------- GetFirstManufacturerEntry ------
+ // Get first manufacturer entry under the manufacturer section
+ const CInfManufacturerEntry * GetFirstManufacturerEntry(void) const
+ {
+ return m_pFirstManuE;
+ }
+
+ #if (TODO)
+ // --------------- GetFirstStringEntry --------------
+ // Get first string entry under the strings section
+ const CInfStringEntry * GetFirstStringEntry(void) const;
+ DestinationDirs
+
+ // --------------- LookupManufacturerSection ----------
+ // Lookup and return the manufacturer section with the specified name.
+ const CInfManufacturerSection *
+ LookupInstallSection(const CInfSymbol *pSymManSection)
+ const;
+
+ // --------------- LookupInstallSection ----------
+ // Lookup and return the install section with the specified name.
+ const CInfInstallSection * LookupInstallSection(const TCHAR pchName[])const;
+
+ // --------------- LookupAddRegSection --------------
+ // Lookup and return the addreg section with the specifed name.
+ const CInfAddRegSection * LookupAddRegSection(const TCHAR pchName[]) const;
+
+ // --------------- LookupString --------------
+ // Lookup and return the specified string
+ const CInfSymbol * LookupString(const TCHAR pchName[]) const;
+#endif // TODO
+
+
+private:
+
+ // ============= PRIVATE MEMBER FUNCTIONS ===============
+ void mfn_EnterCrit(void) const {m_sync.EnterCrit();}
+ void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();}
+ void mfn_Cleanup(void);
+
+ // ============= PRIVATE STATIC HELPER FUNCTIONS ========
+
+ static
+ const CInfManufacturerEntry *
+ sfn_CreateManufacturerList(CIniFile *);
+
+ static
+ void
+ sfn_DeleteManufacturerList(const CInfManufacturerEntry *);
+
+ // ======================= DATA ========================
+ const CInfVersionSection * m_pVersion;
+ const CInfManufacturerEntry * m_pFirstManuE;
+ const CInfSymbol * m_pSymFileName;
+ CSync m_sync;
+
+ CIniFile *m_pIniFile;
+
+};
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfVersionSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Version section:
+// [Version]
+// LayoutFile=layout.inf
+// Signature="$CHICAGO$"
+// Class=Modem
+// ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+// Provider=%MS%
+
+class CInfVersionSection
+{
+
+public:
+
+ CInfVersionSection(void)
+ {
+ m_pSymLayoutFile = NULL;
+ m_pSymSignature = NULL;
+ m_pSymClass = NULL;;
+ m_pSymClassGUID = NULL;
+ m_pSymProvider = NULL;
+ m_dwChecksum = 0;
+ }
+
+ ~CInfVersionSection()
+ {
+ }
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- Checksum ------------------
+ // Return checksum of contents
+ DWORD Checksum(void) const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- GetLayoutFile ------------------
+ const CInfSymbol * GetLayoutFile (void) const
+ {
+ return m_pSymLayoutFile;
+ }
+
+ // --------------- GetSignature ------------------
+ const CInfSymbol * GetSignature (void) const
+ {
+ return m_pSymSignature;
+ }
+
+ // --------------- GetClass ------------------
+ const CInfSymbol * GetClass (void) const
+ {
+ return m_pSymClass;
+ }
+
+ // --------------- GetClassGUID ------------------
+ const CInfSymbol * GetClassGUID (void) const
+ {
+ return m_pSymClassGUID;
+ }
+
+ // --------------- GetProvider ------------------
+ const CInfSymbol * GetProvider (void) const
+ {
+ return m_pSymProvider;
+ }
+
+
+private:
+
+ friend class CInfFile;
+
+ BOOL Load(const CIniFile *);
+ void Unload(void);
+
+ void mfn_Cleanup(void);
+
+ const CInfSymbol * m_pSymLayoutFile;
+ const CInfSymbol * m_pSymSignature;
+ const CInfSymbol * m_pSymClass;
+ const CInfSymbol * m_pSymClassGUID;
+ const CInfSymbol * m_pSymProvider;
+ DWORD m_dwChecksum;
+
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer list section:
+// [Manufacturer]
+// %Generic% = Generic
+// %MagicRam% = MagicRam
+// ..
+
+class CInfManufacturerEntry: private CInfList
+{
+
+public:
+
+ CInfManufacturerEntry(const CInfManufacturerEntry *pNext)
+ : CInfList(NULL, pNext),
+ m_pManuS(NULL),
+ m_pSymManuName(NULL)
+ {}
+
+ ~CInfManufacturerEntry() {}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetManufacturerSection ----------
+ // Get manufacturer section
+ const CInfManufacturerSection * GetManufacturerSection (void) const
+ {
+ return m_pManuS;
+ }
+
+ // --------------- GetName ------------------
+ // Get manufacturer name (actual manufacturer name, not %xxxx%.)
+ const CInfSymbol * GetName (void) const
+ {
+ return m_pSymManuName;
+ }
+
+ // --------------- Next ------------------
+ // Get next Entry. NULL if no more...
+ const CInfManufacturerEntry * Next(void) const
+ {
+ return (const CInfManufacturerEntry *) CInfList::Next();
+ }
+
+ // --------------- Load ------------------
+ BOOL
+ Load(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ //-------------- ReverseList ------------------
+ // Reverses the implicit list of manufacturer entries
+ static void ReverseList(CInfManufacturerEntry **ppManuE)
+ {
+ CInfList::ReverseList((const CInfList **) ppManuE);
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfManufacturerSection *m_pManuS;
+ const CInfSymbol *m_pSymManuName;
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer section:
+// [Generic]
+// %Gen% = Gen, MDMGEN
+// %Gen3% = Gen3, MDMGEN3
+// %Gen12% = Gen12, MDMGEN12
+// %Gen24% = Gen24, MDMGEN24
+// ...
+
+class CInfManufacturerSection
+{
+
+public:
+
+ CInfManufacturerSection(void)
+ {
+ m_eObjSig=eOBJSIG_CInfManufacturerSection;
+ m_pSymSectionName = NULL;
+ m_pFirstModelE = NULL;
+ }
+
+ ~CInfManufacturerSection()
+ //TODO
+ {
+ m_eObjSig = eOBJSIG_INVALID;
+ }
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFirstModelEntry --------------
+ // Get first model entry
+ const CInfModelEntry * GetFirstModelEntry (void) const;
+
+ // --------------- GetSectionName ------------------
+ // Get section name
+ const CInfSymbol * GetSectionName (void) const
+ {
+ return m_pSymSectionName;
+ }
+
+ // --------------- Load ------------------
+ BOOL
+ Load
+ (
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CInfSymbol *pSymManuSection
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ // --------------- Validate ------------------
+ BOOL Validate(void) const
+ {
+ // TODO: can place in try-except clause...
+ return this && m_eObjSig==eOBJSIG_CInfManufacturerSection;
+ }
+
+ #if (TODO)
+ // --------------- GetName ------------------
+ // Get manufacturer name (actual manufacturer name),
+ const CInfSymbol * GetName (void) const;
+ #endif
+
+private:
+
+ void mfn_Cleanup(void);
+
+ // Static helper function
+ const CInfModelEntry *
+ sfn_CreateModelList(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileSection *pISManuS
+ );
+
+ const CInfSymbol *m_pSymSectionName;
+ const CInfModelEntry * m_pFirstModelE;
+ eOBJSIG m_eObjSig;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfModelEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Model entry:
+// %Gen% = Gen, MDMGEN
+
+class CInfModelEntry : private CInfList
+{
+
+public:
+
+ CInfModelEntry(const CInfModelEntry *pNext)
+ : CInfList(NULL, pNext)
+ {
+ /*TODO*/
+ m_dwControlFlags_All = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_All = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_Alpha = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_PPC = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_Mips = dwCF_EXCLUDE_FROM_SELECT;
+ }
+
+ ~CInfModelEntry() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+
+ // --------------- Load ------------------
+ BOOL
+ Load(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ // --------------- GetNext ------------------
+ // Get next Entry. NULL if no more...
+ const CInfModelEntry * Next(void) const
+ {
+ return (const CInfModelEntry *) CInfList::Next();
+ }
+
+ //-------------- ReverseList ------------------
+ // Reverses the implicit list of model entries
+ static void ReverseList(CInfModelEntry **ppModelE)
+ {
+ CInfList::ReverseList((const CInfList **) ppModelE);
+ }
+
+ // --------------- GetLHS ------------------
+ // Get next Entry. NULL if no more...
+ const CInfSymbol * GetLHS(void) const
+ {
+ // TODO
+ return gSymtab.Lookup(TEXT("%bongo101%"), TRUE);
+ }
+
+ // --------------- GetInstallSection --------------
+ // Get install section
+ const CInfInstallSection * GetInstallSection (void) const
+ {
+ return m_pInstallSection;
+ }
+
+ // --------------- GetName ------------------
+ // Get model name (actual model name, not %xxx%)
+ const CInfSymbol * GetName (void) const
+ {
+ // TODO
+ //return m_pSymName;
+ return gSymtab.Lookup(TEXT("Christy Brinkly"), TRUE);
+ }
+
+ // --------------- GetRank0ID ------------------
+ // Rank-0 ID
+ const CInfSymbol * GetRank0ID (void) const
+ {
+ // TODO
+ //return m_pSymRank0ID;
+ // TODO
+ return gSymtab.Lookup(TEXT("RANK-0-ID"), TRUE);
+
+ }
+
+ // --------------- GetRank1ID ------------------
+ // Rank-1 ID
+ const CInfSymbol * GetRank1ID (void) const
+ {
+ // TODO
+ // return m_pSymRank1ID;
+ return gSymtab.Lookup(TEXT("RANK-1-ID"), TRUE);
+ }
+
+ // --------------- GetRank2ID ------------------
+ // Rank-2 ID
+ const CInfSymbol * GetRank2ID (void) const
+ {
+ // TODO
+ // return m_pSymRank2ID;
+ return gSymtab.Lookup(TEXT("RANK-2-ID"), TRUE);
+ }
+
+ // --------------- GetControlFlags -----------------
+ // Return install flags (one or more dwCF_* flags) for the specified
+ // platform.
+ DWORD GetControlFlags(ePLATFORM ePlat) const
+ {
+ DWORD dwRet = 0;
+
+ switch(ePlat)
+ {
+ case ePLAT_ALL:
+ break;
+ case ePLAT_NT_ALL:
+ dwRet = m_dwControlFlags_NT_All;
+ break;
+
+ case ePLAT_NT_ALPHA:
+ dwRet = m_dwControlFlags_NT_Alpha;
+ break;
+
+ case ePLAT_NT_PPC:
+ dwRet = m_dwControlFlags_NT_PPC;
+ break;
+
+ case ePLAT_NT_MIPS:
+ dwRet = m_dwControlFlags_NT_Mips;
+ break;
+
+ default:
+ break;
+ }
+
+ return dwRet;
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfInstallSection * m_pInstallSection;
+ // Pointer to install section
+
+ const CInfSymbol * m_pSymName;
+ // Device name
+
+ const CInfSymbol * m_pSymRank0ID;
+ // Rank-0 ID (primary device ID)
+
+ const CInfSymbol * m_pSymRank1ID;
+ // Rank-1 ID (compatible device ID)
+
+ const CInfSymbol * m_pSymRank2ID;
+ // Rank-2 ID (Rank 2 ID)
+
+ DWORD m_dwControlFlags_All;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to all platforms.
+
+ DWORD m_dwControlFlags_NT_All;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to all NT platforms.
+
+ DWORD m_dwControlFlags_NT_Alpha;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT Alpha platform.
+
+ DWORD m_dwControlFlags_NT_PPC;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT PPC platform.
+
+ DWORD m_dwControlFlags_NT_Mips;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT MIPS platform.
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfInstallSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Install section:
+// [Modem29]
+// AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, INTERNAL
+// CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+// UpdateInis = VView.Inis
+// Uninstall = VoiceView_remove
+//
+// Also contains info from the related PosDup and NoResDup sections:
+//
+// [Modem12.PosDup]
+// *PNP0500
+//
+// [Modem6.NoResDup]
+// UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15
+//
+
+class CInfInstallSection
+{
+
+public:
+
+ CInfInstallSection(void);
+ ~CInfInstallSection();
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetAddRegSectionList ----------
+ // Get generic list whose data items are pointers to
+ // CInfAddRegSection objects
+ const CInfList * GetAddRegSectionList (void) const;
+
+ // --------------- GetCopyFilesSectionList ----------
+ // Get generic list whose data items are pointers to
+ // CInfCopyFilesSection objects
+ const CInfList * GetCopyFilesSectionList (void) const;
+
+ // --------------- GetNoResDupIDList ----------
+ // Get generic list whose data items are pointers to
+ // InfSymbol objects representing the Rank0 IDs in the corresponding
+ // NoResDup section.
+ const CInfList * GetNoResDupIDList (void) const;
+
+ // --------------- GetPosDupIDList ----------
+ // Get generic list whose data items are pointers to
+ // InfSymbol objects representing the Rank0 IDs in the corresponding
+ // PosDup section.
+ const CInfList * GetPosDupIDList (void) const;
+
+ #if (TODO)
+
+ // --------------- GetUpdateInisSectionList ------
+ // Get generic list whose data items are pointers to
+ // CInfUpdateInisSection objects
+ const CInfList * GetUpdateInisSectionList (void) const;
+
+ // --------------- GetUninstallSectionList ------
+ // Get generic list whose data items are pointers to
+ // CInfUninstallSection objects
+ const CInfList * GetUninstallSectionList (void) const;
+
+ // TODO: Also, treat as errors any sections which we don't understand or
+ // don't expect in a modem inf file or we don't support in the compiler:
+ // eg rename sections, and other fancy INF file constructs.
+
+ #endif // (TODO)
+
+private:
+
+ void mfn_Cleanup(void);
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfAddRegSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample AddReg section:
+// [All]
+// HKR,,FriendlyDriver,,Unimodem.vxd
+// HKR,,DevLoader,,*vcomm
+// HKR,,ConfigDialog,,modemui.dll
+// HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+// HKR,,PortSubClass,1,02
+// HKR, Init, 1,, "AT<cr>"
+// HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, ...etc.
+// HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00, ...etc.
+
+class CInfAddRegSection
+{
+
+public:
+
+ CInfAddRegSection(void) {/*TODO*/}
+ ~CInfAddRegSection() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void
+ Dump(void)
+ const;
+
+ // --------------- GetFirstAddRegEntry --------------
+ // Get first addreg entry
+ const
+ CInfAddRegEntry *
+ GetFirstAddRegEntry (void)
+ const;
+
+private:
+
+ void mfn_Cleanup(void);
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfAddRegEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample AddReg entry:
+// HKR, Init, 1,, "AT<cr>"
+
+class CInfAddRegEntry
+{
+
+public:
+
+ CInfAddRegEntry(void)
+ {
+ // TODO -- faked out
+
+ m_pSymRegRoot = gSymtab.Lookup(TEXT("HKR"), TRUE);
+ m_pSymSubKey = gSymtab.Lookup(TEXT("Init"), TRUE);
+ m_pSymValueName = gSymtab.Lookup(TEXT("1"), TRUE);
+ m_dwFlag = MAXDWORD;
+ m_pSymValue = gSymtab.Lookup(TEXT("\"AT<cr>\""), TRUE);
+ m_dwChecksum = 1000;
+ }
+
+ ~CInfAddRegEntry() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void
+ Dump(void)
+ const
+ {
+ // TODO: unimplemented
+ printf(" HKR, Init, 1,, \"AT<cr>\"\n");
+ }
+
+ // --------------- Checksum ------------------
+ // Compute and return checksum of contents
+ DWORD
+ Checksum(void)
+ const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- Next ------------------
+ // Get next Entry. NULL if no more...
+ const CInfAddRegEntry *
+ Next(void)
+ const
+ {
+ // TODO: unimplemented
+ return NULL;
+ }
+
+ // --------------- GetRegRoot ------------------
+ // Get reg-root-string key (HKR, etc)
+ const CInfSymbol *
+ GetRegRoot (void)
+ const
+ {
+ return m_pSymRegRoot;
+ }
+
+ // --------------- GetSubKey ------------------
+ // Get sub key, NULL if none.
+ const CInfSymbol *
+ GetSubKey (void)
+ const
+ {
+ return m_pSymSubKey;
+ }
+
+ // --------------- GetValueName ------------------
+ // Get value-name, NULL if none.
+ const CInfSymbol *
+ GetValueName (void)
+ const
+ {
+ return m_pSymValueName;
+ }
+
+ // --------------- GetFlag ------------------
+ // Get flag-name, MAXDWORD if none.
+ DWORD
+ GetFlag (void)
+ const
+ {
+ return m_dwFlag;
+ }
+
+ // --------------- GetValue ------------------
+ // Get value-name, NULL if none.
+ // For binary data, this represents a normalized version of the
+ // string specified in the inf file: it has the format: "xxyxxyxx.."
+ // where xx is 2-digit hex representation of a byte and y is the space
+ // character (' '). For ASCII data, the value is the ascii string without
+ // the enclosing quotes. Extending '\' characters are processed.
+ const CInfSymbol *
+ GetValue (void)
+ const
+ {
+ return m_pSymValue;
+ }
+
+ #if (TODO)
+ ... more stuff
+ #endif
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfSymbol * m_pSymRegRoot;
+ const CInfSymbol * m_pSymSubKey;
+ const CInfSymbol * m_pSymValueName;
+ const CInfSymbol * m_pSymValue;
+ DWORD m_dwFlag;
+ DWORD m_dwChecksum;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfCopyFilesSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample DestinationDirs section:
+// [DestinationDirs]
+// Register.Copy = 17 ;LDID_INF
+// VV_Sys = 11
+// VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+// VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+// VV_App = 10
+// VV_Help = 18 ;LDID_HELP
+
+// Sample Copyfiles section:
+// [VV_Sys]
+// fte.dll
+// vvexe32.exe
+// wsvv.vxd
+
+// Note: each CInfCopyFilesEntry object keeps a pointer to its destination
+// directory (all the entries for a particular section will have the same
+// destination dir, because in the inf, a destination directory is associated
+// with an entire section.
+
+class CInfCopyFilesSection
+{
+
+public:
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFirstCopyFilesEntry ----------
+ // Get first copyfiles entry
+ const CInfCopyFilesEntry * GetFirstCopyFilesEntry (void) const;
+
+ #if (TODO)
+ // Following reflect the Copyfiles.NT* extensions. We need to keep
+ // this information along with the section.
+ enum {PROC_X86, PROC_MIPS, PROC_ALPHA, PROC_PPC} eProcessorType;
+ enum {PLAT_NT, , PLAT_WIN9X} ePlatformType;
+ #endif // (TODO)
+
+ // TODO: remove following friend declaration once
+ // CInfInstallSection::GetCopyFilesList
+ // is properly implemented (it currently needs to access this
+ // class's constructor.
+ // Also, move ~CInfCopyFIlesEntry to protected when done.
+ friend class CInfInstallSection;
+ ~CInfCopyFilesSection() {/*TODO*/}
+
+protected:
+
+ CInfCopyFilesSection(void) {/*TODO*/}
+
+
+private:
+
+ void mfn_Cleanup(void);
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfCopyFilesEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample CopyFiles entry:
+// fte.dll
+// Note: each CInfCopyFilesEntry object keeps a pointer to its destination
+// directory.
+// TODO: keep information about platform & processor as well (see TODO
+// notes under CInfCopyFilesSection).
+
+class CInfCopyFilesEntry
+{
+
+public:
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const
+ {
+ // TODO: unimplemented
+ printf(" fte.dll ; goes to 11\n");
+ }
+
+ // --------------- Checksum ------------------
+ // Compute and return checksum of contents
+ // Compute and return checksum of contents
+ DWORD
+ Checksum(void)
+ const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- GetNext ------------------
+ // Get next Entry. NULL if no more...
+ const CInfCopyFilesEntry * Next(void) const
+ {
+ // TODO: unimplemented
+ return NULL;
+ }
+
+ // --------------- GetFileName ------------------
+ // Get file name to be copied.
+ const CInfSymbol * GetFileName (void) const;
+
+ // --------------- GetDestDir ------------------
+ // Get file name to be copied.
+ const CInfSymbol * GetDestDir (void) const;
+
+ // TODO: remove following friend declaration once
+ // CInfCopyFilesSection::GetFirstCopyFilesEntry
+ // is properly implemented (it currently needs to access this
+ // class's constructor.
+ // Also, move ~CInfCopyFIlesEntry to protected when done.
+ friend class CInfCopyFilesSection;
+ ~CInfCopyFilesEntry() {/*TODO*/}
+
+protected:
+
+ CInfCopyFilesEntry(void)
+ {
+ // TODO -- faked out
+ m_dwChecksum = 1001;
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ DWORD m_dwChecksum;
+
+};
+
+#if 0
+pInf->Load("mdmgen.inf");
+pManuf = pInf->GetFirstManufacturerEntry();
+for(;pManuf; pManuf = pManuf->Next())
+{
+ pNewDevice = new ModemDevice(pDevice);
+ pDevice->Load(pInf, pManuf);
+ pDevice->Dump();
+ pDevice = pNewDevice;
+}
+pInf->Unload("
+NewSession()
+FreeSession()
+#endif