1 /* $Id: lock.c,v 1.8 2003/01/15 21:24:34 chorns Exp $
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 <kernel32/kernel32.h>
22 /* FUNCTIONS ****************************************************************/
28 DWORD dwFileOffsetLow
,
29 DWORD dwFileOffsetHigh
,
30 DWORD nNumberOfBytesToLockLow
,
31 DWORD nNumberOfBytesToLockHigh
35 OVERLAPPED Overlapped
;
37 Overlapped
.Offset
= dwFileOffsetLow
;
38 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
41 return LockFileEx(hFile
, LOCKFILE_FAIL_IMMEDIATELY
|LOCKFILE_EXCLUSIVE_LOCK
,dwReserved
,nNumberOfBytesToLockLow
, nNumberOfBytesToLockHigh
, &Overlapped
) ;
51 DWORD nNumberOfBytesToLockLow
,
52 DWORD nNumberOfBytesToLockHigh
,
53 LPOVERLAPPED lpOverlapped
56 LARGE_INTEGER BytesToLock
;
64 SetLastError(ERROR_INVALID_PARAMETER
);
68 lpOverlapped
->Internal
= STATUS_PENDING
;
70 Offset
.u
.LowPart
= lpOverlapped
->Offset
;
71 Offset
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
73 if ( (dwFlags
& LOCKFILE_FAIL_IMMEDIATELY
) == LOCKFILE_FAIL_IMMEDIATELY
)
76 LockImmediate
= FALSE
;
78 if ( (dwFlags
& LOCKFILE_EXCLUSIVE_LOCK
) == LOCKFILE_EXCLUSIVE_LOCK
)
81 LockExclusive
= FALSE
;
83 BytesToLock
.u
.LowPart
= nNumberOfBytesToLockLow
;
84 BytesToLock
.u
.HighPart
= nNumberOfBytesToLockHigh
;
86 errCode
= NtLockFile(hFile
,
90 (PIO_STATUS_BLOCK
)lpOverlapped
,
96 if ( !NT_SUCCESS(errCode
) )
98 SetLastErrorByStatus (errCode
);
110 DWORD dwFileOffsetLow
,
111 DWORD dwFileOffsetHigh
,
112 DWORD nNumberOfBytesToUnlockLow
,
113 DWORD nNumberOfBytesToUnlockHigh
117 OVERLAPPED Overlapped
;
118 Overlapped
.Offset
= dwFileOffsetLow
;
119 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
121 return UnlockFileEx(hFile
, dwReserved
, nNumberOfBytesToUnlockLow
, nNumberOfBytesToUnlockHigh
, &Overlapped
);
132 DWORD nNumberOfBytesToUnLockLow
,
133 DWORD nNumberOfBytesToUnLockHigh
,
134 LPOVERLAPPED lpOverlapped
137 LARGE_INTEGER BytesToUnLock
;
138 LARGE_INTEGER StartAddress
;
143 SetLastError(ERROR_INVALID_PARAMETER
);
146 if ( lpOverlapped
== NULL
)
148 SetLastError(ERROR_INVALID_PARAMETER
);
152 BytesToUnLock
.u
.LowPart
= nNumberOfBytesToUnLockLow
;
153 BytesToUnLock
.u
.HighPart
= nNumberOfBytesToUnLockHigh
;
155 StartAddress
.u
.LowPart
= lpOverlapped
->Offset
;
156 StartAddress
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
158 errCode
= NtUnlockFile(hFile
,
159 (PIO_STATUS_BLOCK
)lpOverlapped
,
163 if ( !NT_SUCCESS(errCode
) ) {
164 SetLastErrorByStatus (errCode
);