1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
Modem Inf Compiler -- MIC
-------------------------
History:
5/18/96 JosephJ Created
Files:
Classes:
-------------------------------
CIniFile
Bind(FilePath pFilePath)
Out(FilePath pFilePath)
Section(szName)
UnBind()
Name
CIniFileSection
CIniFileSection
EntryIterator
Out(HFILE);
Name
Line
CIniFileEntry
Name
RHS
Out(HFILE);
Line
CIniFileEntryIterator
NextEntry
CIniFileLine
//Can be one of: blank, annotations, section-header,
// entry, entry-continuation, or unknown
//State can be one of: ok, warning, error(%d)
Type
State
Text
CIniFileAnnotation
-------------------------------
CInfFile
CIniFile
CInfDevice
CSymbolTable
Lookup
CSymbol
GetText
GetTextLength
CInfAddRegList
CInfCopyFileList
CInfRank
CDisplay
--------------------------------
CModemDevice::CreateModem(CInfFile *pInf, CDeviceLocation *pDevLoc)
{
// GetVersion
pInf->Version
// Get manufacturer
ptbszManufacturer = pDevLoc->ptbszManufacturer;
// Get Device name.
ptbszName = pDevLoc->Name
// Get InstallSection
pInstallSec = pInf->InstallSection(pDevice->ptbszInstallSection);
// Walk Addreg list
{
DWORD rgdwChecksum[MAX];
CAddregIterator pAddregIter = pDevLoc->AddregIterator();
for (int i=0, CAddreg pAddReg=0;(pAddreg=pAddregIter->Iterate());i++)
{
// For mow, add checksum to array
rgdwChecksum[i++] = pAddreg->Checksum();
}
// Compute Addreg checksum
::CRC16((LPBYTE)rgdwChecksum, (i)? (i-1) : 0);
}
// Walk other list...
// Copyfiles
{
}
}
-------------------------------
Files
Class headers:
inf.h CIniFile
ini.h CInfFile
device.h CInfDevice
sym.h CInfSymbol
---------------------------------
class CGenericIterator
{
public:
CGenericIterator(void * pData, const CGenericIterator *pNext)
{m_pData=pData; m_pNext = pNext;}
~CGenericIterator();
const CGenericIterator * Next (void) const {return pNext;}
void * Data (void) const {return pData;}
private:
const CGenericIterator * m_pNext;
void * m_pNext;
};
for (; pIter, pIter = pIter->Next())
{
const CAddregSection * pAddreg = (const CAddregSection *) pIter;
// blah blah...
}
CInfString
------------------------------------------
CSyncObject
Load
Unload
DWORD OpenSession(void)
void CloseSession(DWORD)
EnterCrit
LeaveCrit
private:
CRITICAL_SECTION
Slist EventList
UINT uRefCount;
enum {UNLOADED, MARKED_FOR_UNLOAD, LOADED} eState;
--------------------------------------------------
[Support APIs from sdk\inc\setupi.h]
SetupGetInfInformation
SetupQueryInfFileInformation useful?
SetupQueryInfVersionInformation useful?
SetupGetInfFileList useful?
SetupOpenInfFile
SetupOpenMasterInf
SetupOpenAppendInfFileW
SetupCloseInfFile
SetupFindFirstLineA useful?
SetupFindNextLine useful?
SetupFindNextMatchLine useful?
SetupGetLineByIndex useful?
SetupGetLineCount useful?
SetupGetLineText useful?
SetupGetFieldCount useful?
SetupGetStringField useful?
SetupGetIntField useful?
SetupGetMultiSzField useful?
SetupGetBinaryField useful?
SetupGetFileCompressionInfo
SetupGetSourceFileLocation useful?
SetupGetSourceFileSize
SetupGetTargetPath useful?
Error codes:
Inf parse outcomes:
ERROR_EXPECTED_SECTION_NAME
ERROR_BAD_SECTION_NAME_LINE
ERROR_SECTION_NAME_TOO_LONG
ERROR_GENERAL_SYNTAX
Inf runtime errors:
ERROR_WRONG_INF_STYLE
ERROR_SECTION_NOT_FOUND
ERROR_LINE_NOT_FOUND
--------------------
6/9/96
Inf:Load:
-- Read Version Information
-- Read Manufacturer List Section
Read Manufacturer Entry
Read Manufacturer Section
Read Model Entry
Read Install Section
Read AddregSection
...
Read ControlFlags section
---------
6/12/96
-- concept of a Validate member function for each class:
BOOL Validate(void)
{
if (!this) return FALSE;
_try
{
test other things, like an object-type signature (each object can
have an object-type signature, which is assigned by the constructur
and cleared by the destructor.
}
_except(....)
{
}
end:
}
|