3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/file/file.c
6 * PURPOSE: Directory functions
7 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
8 * GetTempFileName is modified from WINE [ Alexandre Juiliard ]
13 /* FIXME: the large integer manipulations in this file dont handle overflow */
15 /* INCLUDES ****************************************************************/
20 #include "../include/debug.h"
22 /* FUNCTIONS ****************************************************************/
31 DWORD dwFileOffsetLow
,
32 DWORD dwFileOffsetHigh
,
33 DWORD nNumberOfBytesToLockLow
,
34 DWORD nNumberOfBytesToLockHigh
38 OVERLAPPED Overlapped
;
40 Overlapped
.Offset
= dwFileOffsetLow
;
41 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
42 Overlapped
.hEvent
= NULL
;
45 return LockFileEx(hFile
, LOCKFILE_FAIL_IMMEDIATELY
|LOCKFILE_EXCLUSIVE_LOCK
,dwReserved
,nNumberOfBytesToLockLow
, nNumberOfBytesToLockHigh
, &Overlapped
) ;
59 DWORD nNumberOfBytesToLockLow
,
60 DWORD nNumberOfBytesToLockHigh
,
61 LPOVERLAPPED lpOverlapped
/* required! */
64 LARGE_INTEGER BytesToLock
;
70 if(dwReserved
!= 0 || lpOverlapped
==NULL
)
72 SetLastError(ERROR_INVALID_PARAMETER
);
76 lpOverlapped
->Internal
= STATUS_PENDING
;
78 Offset
.u
.LowPart
= lpOverlapped
->Offset
;
79 Offset
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
81 if ( (dwFlags
& LOCKFILE_FAIL_IMMEDIATELY
) == LOCKFILE_FAIL_IMMEDIATELY
)
84 LockImmediate
= FALSE
;
86 if ( (dwFlags
& LOCKFILE_EXCLUSIVE_LOCK
) == LOCKFILE_EXCLUSIVE_LOCK
)
89 LockExclusive
= FALSE
;
91 BytesToLock
.u
.LowPart
= nNumberOfBytesToLockLow
;
92 BytesToLock
.u
.HighPart
= nNumberOfBytesToLockHigh
;
94 errCode
= NtLockFile(hFile
,
98 (PIO_STATUS_BLOCK
)lpOverlapped
,
104 if ( !NT_SUCCESS(errCode
) )
106 SetLastErrorByStatus (errCode
);
122 DWORD dwFileOffsetLow
,
123 DWORD dwFileOffsetHigh
,
124 DWORD nNumberOfBytesToUnlockLow
,
125 DWORD nNumberOfBytesToUnlockHigh
128 OVERLAPPED Overlapped
;
130 Overlapped
.Offset
= dwFileOffsetLow
;
131 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
134 return UnlockFileEx(hFile
, dwReserved
, nNumberOfBytesToUnlockLow
, nNumberOfBytesToUnlockHigh
, &Overlapped
);
146 DWORD nNumberOfBytesToUnLockLow
,
147 DWORD nNumberOfBytesToUnLockHigh
,
148 LPOVERLAPPED lpOverlapped
/* required! */
151 LARGE_INTEGER BytesToUnLock
;
152 LARGE_INTEGER StartAddress
;
155 if(dwReserved
!= 0 || lpOverlapped
== NULL
)
157 SetLastError(ERROR_INVALID_PARAMETER
);
161 BytesToUnLock
.u
.LowPart
= nNumberOfBytesToUnLockLow
;
162 BytesToUnLock
.u
.HighPart
= nNumberOfBytesToUnLockHigh
;
164 StartAddress
.u
.LowPart
= lpOverlapped
->Offset
;
165 StartAddress
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
167 errCode
= NtUnlockFile(hFile
,
168 (PIO_STATUS_BLOCK
)lpOverlapped
,
172 if ( !NT_SUCCESS(errCode
) ) {
173 SetLastErrorByStatus (errCode
);