source: trunk/src/kernel32/oslibdos.h@ 21564

Last change on this file since 21564 was 21564, checked in by dmik, 15 years ago

kernel32: Implemented generating the high/low index values (using a CRC32 and a hash function on the fuill file name) and filling up the volume serial number in the BY_HANDLE_FILE_INFORMATION structure returned by GetFileInformationByHandle().

File size: 13.2 KB
Line 
1/* $Id: oslibdos.h,v 1.52 2003-03-27 14:00:53 sandervl Exp $ */
2
3/*
4 * Wrappers for OS/2 Dos* API
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#ifndef __OSLIBDOS_H__
13#define __OSLIBDOS_H__
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19char* ODINHelperStripUNC(char* strUNC);
20
21#ifdef OS2_INCLUDED
22DWORD error2WinError(APIRET rc,DWORD defaultCode = ERROR_NOT_ENOUGH_MEMORY_W);
23#else
24DWORD error2WinError(DWORD rc,DWORD defaultCode = ERROR_NOT_ENOUGH_MEMORY);
25#endif
26
27void OSLibInitWSeBFileIO();
28
29DWORD OSLibDosChangeMaxFileHandles();
30
31#define ODIN_INCREMENT_MAX_FILEHANDLES 64
32#define ODIN_DEFAULT_MAX_FILEHANDLES 256
33DWORD OSLibDosSetInitialMaxFileHandles(DWORD maxhandles);
34
35BOOL OSLibDosGetFileAttributesEx(LPSTR pszName, ULONG ulDummy, PVOID pBuffer);
36
37#define OSLIB_NOERROR 0
38#define OSLIB_ERROR_INVALID_ADDRESS 1
39#define OSLIB_ERROR_ACCESS_DENIED 2
40#define OSLIB_ERROR_INVALID_PARAMETER 3
41
42#define OSLIB_ACCESS_READONLY 1
43#define OSLIB_ACCESS_READWRITE 2
44#define OSLIB_ACCESS_SHAREDENYNONE 4
45#define OSLIB_ACCESS_SHAREDENYREAD 8
46#define OSLIB_ACCESS_SHAREDENYWRITE 16
47
48DWORD OSLibDosOpen(char *lpszFileName, DWORD flags);
49BOOL OSLibDosClose(DWORD hFile);
50BOOL OSLibDosDelete(char *lpszFileName);
51BOOL OSLibDosCopyFile(LPCSTR lpszOldFile, LPCSTR lpszNewFile, BOOL fFailIfExist);
52BOOL OSLibDosMoveFile(LPCSTR lpszOldFile, LPCSTR lpszNewFile);
53BOOL OSLibDosRemoveDir(LPCSTR lpszDir);
54BOOL OSLibDosCreateDirectory(LPCSTR lpszDir);
55
56#define OSLIB_SETPTR_FILE_CURRENT 0
57#define OSLIB_SETPTR_FILE_BEGIN 1
58#define OSLIB_SETPTR_FILE_END 2
59
60DWORD OSLibDosSetFilePtr(DWORD hFile, DWORD offset, DWORD method);
61
62#define OSLIB_SEARCHDIR 1
63#define OSLIB_SEARCHCURDIR 2
64#define OSLIB_SEARCHFILE 3
65#define OSLIB_SEARCHENV 4
66
67DWORD OSLibDosSearchPath(DWORD cmd, char *path, char *name, char *full_name, DWORD length_fullname);
68
69#ifndef FIL_QUERYFULLNAME
70 #define FIL_QUERYFULLNAME 5
71#else
72 #if FIL_QUERYFULLNAME != 5
73 #error "Hmm! FIL_QUERYFULLNAME isn't 5"
74 #endif
75#endif
76
77DWORD OSLibDosQueryPathInfo(CHAR *pszPathName,
78 ULONG ulInfoLevel,
79 PVOID pInfoBuf,
80 ULONG cbInfoBuf);
81
82DWORD OSLibDosCreateFile(CHAR *lpFileName, DWORD dwAccess,
83 DWORD dwShare, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
84 DWORD dwCreation, DWORD dwFlags, HANDLE hTemplate);
85
86DWORD OSLibDosOpenFile(CHAR *lpszFile, UINT fuMode);
87
88BOOL OSLibDosLockFile(DWORD hFile, DWORD dwFlags,
89 DWORD OffsetLow, DWORD OffsetHigh,
90 DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,
91 LPOVERLAPPED lpOverlapped);
92
93BOOL OSLibDosUnlockFile(DWORD hFile, DWORD OffsetLow, DWORD OffsetHigh,
94 DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,
95 LPOVERLAPPED lpOverlapped);
96
97BOOL OSLibDosFlushFileBuffers(DWORD hFile);
98BOOL OSLibDosSetEndOfFile(DWORD hFile);
99
100DWORD OSLibDosGetFileSize(DWORD hFile, LPDWORD lpdwFileSizeHigh);
101BOOL OSLibDosRead(DWORD hFile, LPVOID lpBuffer, DWORD size, DWORD *nrBytesRead);
102BOOL OSLibDosWrite(DWORD hFile, LPVOID lpBuffer, DWORD size, DWORD *nrBytesWritten);
103
104BOOL OSLibDosGetFileInformationByHandle(LPCSTR lpFileName, DWORD hFile, BY_HANDLE_FILE_INFORMATION* pHFI);
105
106BOOL OSLibDosSetFileTime(DWORD hFile, LPFILETIME pFT1,
107 LPFILETIME pFT2,
108 LPFILETIME pFT3);
109
110BOOL OSLibDosGetFileTime(DWORD hFile, LPFILETIME pFT1,
111 LPFILETIME pFT2,
112 LPFILETIME pFT3);
113
114DWORD OSLibDosSetFilePointer(DWORD hFile, DWORD OffsetLow, DWORD *OffsetHigh, DWORD method);
115
116DWORD OSLibDosDupHandle(DWORD hFile, DWORD *hNew);
117DWORD OSLibDosSetFHState(DWORD hFile, DWORD dwFlags);
118
119DWORD OSLibDosSetFilePtr2(DWORD hFile, DWORD offset, DWORD method);
120
121BOOL OSLibDosQueryProcTimes(DWORD procid, ULONG *kerneltime, ULONG *usertime);
122
123BOOL OSLibDosTransactNamedPipe( DWORD hNamedPipe,
124 LPVOID lpInBuffer,
125 DWORD nInBufferSize,
126 LPVOID lpOutBuffer,
127 DWORD nOutBufferSize,
128 LPDWORD lpBytesRead,
129 LPOVERLAPPED lpOverlapped);
130
131BOOL OSLibDosCallNamedPipe( LPCTSTR lpNamedPipeName,
132 LPVOID lpInBuffer,
133 DWORD nInBufferSize,
134 LPVOID lpOutBuffer,
135 DWORD nOutBufferSize,
136 LPDWORD lpBytesRead,
137 DWORD nTimeOut );
138
139BOOL OSLibDosPeekNamedPipe(DWORD hPipe,
140 LPVOID lpvBuffer,
141 DWORD cbBuffer,
142 LPDWORD lpcbRead,
143 LPDWORD lpcbAvail,
144 LPDWORD lpcbMessage);
145
146BOOL OSLibDosConnectNamedPipe(DWORD hNamedPipe, LPOVERLAPPED lpOverlapped);
147
148DWORD OSLibDosCreateNamedPipe(LPCTSTR lpName,
149 DWORD dwOpenMode,
150 DWORD dwPipeMode,
151 DWORD nMaxInstances,
152 DWORD nOutBufferSize,
153 DWORD nInBufferSize,
154 DWORD nDefaultTimeOut,
155 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
156
157BOOL OSLibSetNamedPipeState(DWORD hNamedPipe, DWORD dwPipeMode);
158
159DWORD OSLibDosOpenPipe(LPCTSTR lpName,
160 DWORD fuAccess,
161 DWORD fuShare,
162 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
163 DWORD fuCreate,
164 DWORD fuAttrFlags);
165
166BOOL OSLibDosWaitNamedPipe(LPCSTR lpszNamedPipeName,
167 DWORD dwTimeout);
168
169BOOL OSLibDosDisconnectNamedPipe(DWORD hPipe);
170
171BOOL OSLibDosCreatePipe(PHANDLE phfRead,
172 PHANDLE phfWrite,
173 LPSECURITY_ATTRIBUTES lpsa,
174 DWORD dwSize);
175
176
177DWORD OSLibDosFindFirst(LPCSTR lpFileName,WIN32_FIND_DATAA* lpFindFileData);
178DWORD OSLibDosFindFirstMulti(LPCSTR lpFileName,WIN32_FIND_DATAA *lpFindFileData,DWORD *count);
179BOOL OSLibDosFindNext(DWORD hFindFile,WIN32_FIND_DATAA* lpFindFileData);
180BOOL OSLibDosFindNextMulti(DWORD hFindFile,WIN32_FIND_DATAA *lpFindFileData,DWORD *count);
181BOOL OSLibDosFindClose(DWORD hFindFile);
182
183DWORD OSLibGetFileAttributes(LPSTR lpFileName);
184
185DWORD OSLibDosQueryVolumeFS(int drive, LPSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize);
186DWORD OSLibDosQueryVolumeSerialAndName(int drive, LPDWORD lpVolumeSerialNumber, LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize);
187
188/* Disk/Diskette Control */
189
190#ifndef __OS2_H__
191#define IOCTL_DISK 8
192
193#define DSK_LOCKDRIVE 0x0000
194#define DSK_UNLOCKDRIVE 0x0001
195#define DSK_REDETERMINEMEDIA 0x0002
196#define DSK_SETLOGICALMAP 0x0003
197#define DSK_BEGINFORMAT 0X0004
198#define DSK_BLOCKREMOVABLE 0x0020
199#define DSK_GETLOGICALMAP 0x0021
200#define DSK_UNLOCKEJECTMEDIA 0X0040
201#define DSK_SETDEVICEPARAMS 0x0043
202#define DSK_WRITETRACK 0x0044
203#define DSK_FORMATVERIFY 0x0045
204#define DSK_DISKETTECONTROL 0X005D
205#define DSK_QUERYMEDIASENSE 0X0060
206#define DSK_GETDEVICEPARAMS 0x0063
207#define DSK_READTRACK 0x0064
208#define DSK_VERIFYTRACK 0x0065
209#define DSK_GETLOCKSTATUS 0X0066
210#endif
211
212DWORD SYSTEM OSLibDosDevIOCtl( DWORD hFile, DWORD dwCat, DWORD dwFunc,
213 PVOID pParm, DWORD dwParmMaxLen, DWORD *pdwParmLen,
214 PVOID pData, DWORD dwDataMaxLen, DWORD *pdwDataLen);
215
216BOOL OSLibGetDiskFreeSpace(LPSTR lpRootPathName, LPDWORD lpSectorsPerCluster,
217 LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters,
218 LPDWORD lpTotalNumberOfClusters);
219
220ULONG OSLibDosQuerySysInfo(ULONG iStart, ULONG iLast, PVOID pBuf, ULONG cbBuf);
221ULONG OSLibGetDriveType(ULONG diskIndex);
222ULONG OSLibGetLogicalDrives();
223ULONG OSLibGetDriveType(ULONG DriveIndex);
224ULONG OSLibDosQueryCurrentDisk();
225
226BOOL OSLibDosGetDiskGeometry(HANDLE hDisk, DWORD cDisk, void *pGeom);
227
228#ifdef OS2DEF_INCLUDED
229#ifndef FIL_STANDARDL
230 typedef struct _LONGLONG { /* LONGLONG */
231 ULONG ulLo;
232 LONG ulHi;
233 } LONGLONG;
234 typedef LONGLONG *PLONGLONG;
235
236 typedef struct _ULONGLONG { /* ULONGLONG */
237 ULONG ulLo;
238 ULONG ulHi;
239 } ULONGLONG;
240 typedef ULONGLONG *PULONGLONG;
241
242 #define FIL_STANDARDL 11 /* LFS - Info level 11, standard file info for large files*/
243 #define FIL_QUERYEASIZEL 12 /* LFS - Level 12, return Full EA size for large files */
244 #define FIL_QUERYEASFROMLISTL 13 /* LFS - Level 13, return requested EA's */
245
246 typedef struct _FILESTATUS3L /* fsts3L */
247 {
248 FDATE fdateCreation;
249 FTIME ftimeCreation;
250 FDATE fdateLastAccess;
251 FTIME ftimeLastAccess;
252 FDATE fdateLastWrite;
253 FTIME ftimeLastWrite;
254 LONGLONG cbFile;
255 LONGLONG cbFileAlloc;
256 ULONG attrFile;
257 } FILESTATUS3L;
258 typedef FILESTATUS3L *PFILESTATUS3L;
259
260 /* Large File Support >2GB */
261 typedef struct _FILESTATUS4L /* fsts4L */
262 {
263 FDATE fdateCreation;
264 FTIME ftimeCreation;
265 FDATE fdateLastAccess;
266 FTIME ftimeLastAccess;
267 FDATE fdateLastWrite;
268 FTIME ftimeLastWrite;
269 LONGLONG cbFile;
270 LONGLONG cbFileAlloc;
271 ULONG attrFile;
272 ULONG cbList;
273 } FILESTATUS4L;
274 typedef FILESTATUS4L *PFILESTATUS4L;
275
276 typedef struct _FILELOCKL /* flock */
277 {
278 LONGLONG lOffset;
279 LONGLONG lRange;
280 } FILELOCKL;
281 typedef FILELOCKL *PFILELOCKL;
282#endif
283
284
285 typedef APIRET (* APIENTRY PROC_DosSetFileSizeL)(HFILE hFile, LONGLONG cbSize);
286 APIRET OdinDosSetFileSize(HFILE hFile,
287 LONGLONG cbSize);
288
289 typedef APIRET (* APIENTRY PROC_DosSetFilePtrL)(HFILE hFile, LONGLONG ib, ULONG method, PLONGLONG ibActual);
290 APIRET OdinDosSetFilePtr(HFILE hFile,
291 LONGLONG ib,
292 ULONG method,
293 PLONGLONG ibActual);
294
295 typedef APIRET (* APIENTRY PROC_DosSetFileLocksL)(HFILE hFile, PFILELOCKL pflUnlock, PFILELOCKL pflLock, ULONG timeout, ULONG flags);
296 APIRET OdinDosSetFileLocks(HFILE hFile,
297 PFILELOCKL pflUnlock,
298 PFILELOCKL pflLock,
299 ULONG timeout,
300 ULONG flags);
301
302
303 typedef APIRET (* APIENTRY PROC_DosOpenL)(PCSZ pszFileName, PHFILE phf,
304 PULONG pulAction,
305 LONGLONG cbFile,
306 ULONG ulAttribute,
307 ULONG fsOpenFlags,
308 ULONG fsOpenMode,
309 PEAOP2 peaop2);
310
311 APIRET APIENTRY OdinDosOpenL(PCSZ pszFileName,
312 PHFILE phf,
313 PULONG pulAction,
314 LONGLONG cbFile,
315 ULONG ulAttribute,
316 ULONG fsOpenFlags,
317 ULONG fsOpenMode,
318 PEAOP2 peaop2);
319
320 #ifndef AFNTY_THREAD /* don't declare this if it's allready there */
321
322 typedef struct _MPAFFINITY { /* afnty */
323 ULONG mask[2]; /* CPUs 0 thru 31 in [0], CPUs 32 thru 63 in [1] */
324 } MPAFFINITY;
325 typedef MPAFFINITY *PMPAFFINITY;
326
327
328 /* scope values for QueryThreadAffinity */
329
330 #define AFNTY_THREAD 0
331 #define AFNTY_SYSTEM 1
332
333 #endif
334
335 typedef APIRET (* APIENTRY PROC_DosQueryThreadAffinity)(ULONG scope,
336 PMPAFFINITY pAffinity);
337
338 typedef APIRET (* APIENTRY PROC_DosSetThreadAffinity)(PMPAFFINITY pAffinity);
339
340#endif
341
342ULONG OSLibDosQueryModuleName(ULONG hModule, int cchName, char *pszName);
343ULONG OSLibDosQueryDir(DWORD length, LPSTR lpszCurDir);
344
345HINSTANCE OSLibDosLoadModule(LPSTR szModName);
346void OSLibDosFreeModule(HINSTANCE hinst);
347
348ULONG OSLibDosGetModuleFileName(HMODULE hModule, LPTSTR lpszPath, DWORD cchPath);
349BOOL OSLibDosBeep(DWORD ulFreq, DWORD ulDuration);
350ULONG OSLibDosGetProcAddress(HMODULE hModule, LPCSTR lpszProc);
351
352BOOL OSLibDosSetThreadAffinity(DWORD dwThreadAffinityMask);
353
354#define MASK_SYSTEM 0
355#define MASK_THREAD 1
356BOOL OSLibDosQueryAffinity(DWORD fMaskType, DWORD *pdwThreadAffinityMask);
357
358DWORD OSLibDosDevConfig(PVOID pdevinfo, ULONG item);
359void OSLibDosSleep(ULONG msecs);
360
361//functions for physical disk & partition information
362DWORD OSLibDosGetNumPhysDrives();
363
364#ifdef __cplusplus
365}
366#endif
367
368#endif //__OSLIBDOS_H__
369
Note: See TracBrowser for help on using the repository browser.