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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
system.hxx
Abstract:
This module contains the definition for the SYSTEM class. The SYSTEM
class is an abstract class which offers an interface for communicating
with the underlying operating system.
Author:
David J. Gilman (davegi) 13-Jan-1991
Environment:
ULIB, User Mode
Notes:
--*/
#if ! defined( _SYSTEM_ )
#define _SYSTEM_
DECLARE_CLASS( FSN_DIRECTORY );
DECLARE_CLASS( FSN_FILE );
DECLARE_CLASS( FSNODE );
DECLARE_CLASS( WSTRING );
DECLARE_CLASS( STREAM );
DECLARE_CLASS( TIMEINFO );
#include "message.hxx"
#include "path.hxx"
#include "basesys.hxx"
extern "C" {
#include <stdarg.h>
}
enum DRIVE_TYPE {
UnknownDrive,
RemovableDrive,
FixedDrive,
RemoteDrive,
CdRomDrive,
RamDiskDrive
};
enum FILE_TYPE {
UnknownFile,
DiskFile,
CharFile,
PipeFile
};
struct _VOL_SERIAL_NUMBER {
ULONG HighOrder32Bits;
ULONG LowOrder32Bits;
};
DEFINE_TYPE( struct _VOL_SERIAL_NUMBER, VOL_SERIAL_NUMBER );
class SYSTEM : public BASE_SYSTEM {
friend
BOOLEAN
InitializeUlib(
IN HANDLE DllHandle,
IN ULONG Reason,
IN PVOID Reserved
);
public:
STATIC
ULIB_EXPORT
PFSN_DIRECTORY
MakeDirectory (
IN PCPATH Path,
IN PCPATH TemplatePath OPTIONAL
);
STATIC
ULIB_EXPORT
PFSN_FILE
MakeFile (
IN PCPATH Path
);
STATIC
ULIB_EXPORT
PFSN_FILE
MakeTemporaryFile (
IN PCWSTRING PrefixString,
IN PCPATH Path DEFAULT NULL
);
STATIC
ULIB_EXPORT
BOOLEAN
RemoveNode (
IN PFSNODE *PointerToNode,
IN BOOLEAN Force DEFAULT FALSE
);
STATIC
ULIB_EXPORT
BOOLEAN
IsCorrectVersion (
);
STATIC
PPATH
QueryCurrentPath (
);
STATIC
ULIB_EXPORT
PFSN_DIRECTORY
QueryDirectory (
IN PCPATH Path,
IN BOOLEAN GetWhatYouCan DEFAULT FALSE
);
STATIC
ULIB_EXPORT
PWSTRING
QueryEnvironmentVariable (
IN PCWSTRING Variable
);
STATIC
ULIB_EXPORT
PPATH
QuerySystemDirectory (
);
STATIC
ULIB_EXPORT
PPATH
SearchPath(
PWSTRING pFileName,
PWSTRING pSearchPath DEFAULT NULL
);
STATIC
ULIB_EXPORT
PFSN_FILE
QueryFile (
IN PCPATH Path
);
STATIC
ULIB_EXPORT
BOOLEAN
QueryCurrentDosDriveName(
OUT PWSTRING DosDriveName
);
STATIC
ULIB_EXPORT
DRIVE_TYPE
QueryDriveType(
IN PCWSTRING DosDriveName
);
STATIC
ULIB_EXPORT
FILE_TYPE
QueryFileType(
IN PCWSTRING DosFileName
);
STATIC
ULIB_EXPORT
PWSTRING
QueryVolumeLabel(
IN PPATH Path,
OUT PVOL_SERIAL_NUMBER SerialNumber
);
STATIC
ULIB_EXPORT
FARPROC
QueryLibraryEntryPoint(
IN PCWSTRING LibraryName,
IN PCWSTRING EntryPointName,
OUT PHANDLE LibraryHandle
);
STATIC
ULIB_EXPORT
VOID
FreeLibraryHandle(
IN HANDLE LibraryHandle
);
STATIC
BOOLEAN
PutStandardStream(
IN DWORD StdHandle,
IN PSTREAM pStream
);
STATIC
ULIB_EXPORT
BOOLEAN
QueryLocalTimeFromUTime(
IN PCTIMEINFO UTimeInfo,
OUT PTIMEINFO LocalTimeInfo
);
STATIC
BOOLEAN
QueryUTimeFromLocalTime(
IN PCTIMEINFO LocalTimeInfo,
OUT PTIMEINFO UTimeInfo
);
STATIC
ULIB_EXPORT
BOOLEAN
QueryWindowsErrorMessage(
IN ULONG WindowsErrorCode,
OUT PWSTRING ErrorMessage
);
};
INLINE
PPATH
SYSTEM::QueryCurrentPath (
)
{
DebugAssert( FALSE );
return( NEW PATH );
}
#endif // SYSTEM_DEFN
|