summaryrefslogtreecommitdiffstats
path: root/private/utils/ulib/inc/system.hxx
blob: a204e07a1d9a7011b27c753717fc0059cc2c6f20 (plain) (blame)
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