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)
12 /* FIXME: the large integer manipulations in this file dont handle overflow */
14 /* INCLUDES ****************************************************************/
19 #include "../include/debug.h"
21 /* FUNCTIONS ****************************************************************/
30 DWORD dwFileOffsetLow
,
31 DWORD dwFileOffsetHigh
,
32 DWORD nNumberOfBytesToLockLow
,
33 DWORD nNumberOfBytesToLockHigh
37 OVERLAPPED Overlapped
;
39 Overlapped
.Offset
= dwFileOffsetLow
;
40 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
41 Overlapped
.hEvent
= NULL
;
44 return LockFileEx(hFile
, LOCKFILE_FAIL_IMMEDIATELY
|LOCKFILE_EXCLUSIVE_LOCK
,dwReserved
,nNumberOfBytesToLockLow
, nNumberOfBytesToLockHigh
, &Overlapped
) ;
58 DWORD nNumberOfBytesToLockLow
,
59 DWORD nNumberOfBytesToLockHigh
,
60 LPOVERLAPPED lpOverlapped
/* required! */
63 LARGE_INTEGER BytesToLock
;
69 if(dwReserved
!= 0 || lpOverlapped
==NULL
)
71 SetLastError(ERROR_INVALID_PARAMETER
);
75 lpOverlapped
->Internal
= STATUS_PENDING
;
77 Offset
.u
.LowPart
= lpOverlapped
->Offset
;
78 Offset
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
80 if ( (dwFlags
& LOCKFILE_FAIL_IMMEDIATELY
) == LOCKFILE_FAIL_IMMEDIATELY
)
83 LockImmediate
= FALSE
;
85 if ( (dwFlags
& LOCKFILE_EXCLUSIVE_LOCK
) == LOCKFILE_EXCLUSIVE_LOCK
)
88 LockExclusive
= FALSE
;
90 BytesToLock
.u
.LowPart
= nNumberOfBytesToLockLow
;
91 BytesToLock
.u
.HighPart
= nNumberOfBytesToLockHigh
;
93 errCode
= NtLockFile(hFile
,
97 (PIO_STATUS_BLOCK
)lpOverlapped
,
103 if ( !NT_SUCCESS(errCode
) )
105 SetLastErrorByStatus (errCode
);
121 DWORD dwFileOffsetLow
,
122 DWORD dwFileOffsetHigh
,
123 DWORD nNumberOfBytesToUnlockLow
,
124 DWORD nNumberOfBytesToUnlockHigh
127 OVERLAPPED Overlapped
;
129 Overlapped
.Offset
= dwFileOffsetLow
;
130 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
133 return UnlockFileEx(hFile
, dwReserved
, nNumberOfBytesToUnlockLow
, nNumberOfBytesToUnlockHigh
, &Overlapped
);
145 DWORD nNumberOfBytesToUnLockLow
,
146 DWORD nNumberOfBytesToUnLockHigh
,
147 LPOVERLAPPED lpOverlapped
/* required! */
150 LARGE_INTEGER BytesToUnLock
;
151 LARGE_INTEGER StartAddress
;
154 if(dwReserved
!= 0 || lpOverlapped
== NULL
)
156 SetLastError(ERROR_INVALID_PARAMETER
);
160 BytesToUnLock
.u
.LowPart
= nNumberOfBytesToUnLockLow
;
161 BytesToUnLock
.u
.HighPart
= nNumberOfBytesToUnLockHigh
;
163 StartAddress
.u
.LowPart
= lpOverlapped
->Offset
;
164 StartAddress
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
166 errCode
= NtUnlockFile(hFile
,
167 (PIO_STATUS_BLOCK
)lpOverlapped
,
171 if ( !NT_SUCCESS(errCode
) ) {
172 SetLastErrorByStatus (errCode
);