1 /* $Id: lock.c,v 1.7 2002/09/08 10:22:42 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 ****************************************************************/
17 #include <ddk/ntddk.h>
23 #include <kernel32/kernel32.h>
24 #include <kernel32/error.h>
26 /* FUNCTIONS ****************************************************************/
32 DWORD dwFileOffsetLow
,
33 DWORD dwFileOffsetHigh
,
34 DWORD nNumberOfBytesToLockLow
,
35 DWORD nNumberOfBytesToLockHigh
39 OVERLAPPED Overlapped
;
41 Overlapped
.Offset
= dwFileOffsetLow
;
42 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
45 return LockFileEx(hFile
, LOCKFILE_FAIL_IMMEDIATELY
|LOCKFILE_EXCLUSIVE_LOCK
,dwReserved
,nNumberOfBytesToLockLow
, nNumberOfBytesToLockHigh
, &Overlapped
) ;
55 DWORD nNumberOfBytesToLockLow
,
56 DWORD nNumberOfBytesToLockHigh
,
57 LPOVERLAPPED lpOverlapped
60 LARGE_INTEGER BytesToLock
;
68 SetLastError(ERROR_INVALID_PARAMETER
);
72 lpOverlapped
->Internal
= STATUS_PENDING
;
74 Offset
.u
.LowPart
= lpOverlapped
->Offset
;
75 Offset
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
77 if ( (dwFlags
& LOCKFILE_FAIL_IMMEDIATELY
) == LOCKFILE_FAIL_IMMEDIATELY
)
80 LockImmediate
= FALSE
;
82 if ( (dwFlags
& LOCKFILE_EXCLUSIVE_LOCK
) == LOCKFILE_EXCLUSIVE_LOCK
)
85 LockExclusive
= FALSE
;
87 BytesToLock
.u
.LowPart
= nNumberOfBytesToLockLow
;
88 BytesToLock
.u
.HighPart
= nNumberOfBytesToLockHigh
;
90 errCode
= NtLockFile(hFile
,
94 (PIO_STATUS_BLOCK
)lpOverlapped
,
100 if ( !NT_SUCCESS(errCode
) )
102 SetLastErrorByStatus (errCode
);
114 DWORD dwFileOffsetLow
,
115 DWORD dwFileOffsetHigh
,
116 DWORD nNumberOfBytesToUnlockLow
,
117 DWORD nNumberOfBytesToUnlockHigh
121 OVERLAPPED Overlapped
;
122 Overlapped
.Offset
= dwFileOffsetLow
;
123 Overlapped
.OffsetHigh
= dwFileOffsetHigh
;
125 return UnlockFileEx(hFile
, dwReserved
, nNumberOfBytesToUnlockLow
, nNumberOfBytesToUnlockHigh
, &Overlapped
);
136 DWORD nNumberOfBytesToUnLockLow
,
137 DWORD nNumberOfBytesToUnLockHigh
,
138 LPOVERLAPPED lpOverlapped
141 LARGE_INTEGER BytesToUnLock
;
142 LARGE_INTEGER StartAddress
;
147 SetLastError(ERROR_INVALID_PARAMETER
);
150 if ( lpOverlapped
== NULL
)
152 SetLastError(ERROR_INVALID_PARAMETER
);
156 BytesToUnLock
.u
.LowPart
= nNumberOfBytesToUnLockLow
;
157 BytesToUnLock
.u
.HighPart
= nNumberOfBytesToUnLockHigh
;
159 StartAddress
.u
.LowPart
= lpOverlapped
->Offset
;
160 StartAddress
.u
.HighPart
= lpOverlapped
->OffsetHigh
;
162 errCode
= NtUnlockFile(hFile
,
163 (PIO_STATUS_BLOCK
)lpOverlapped
,
167 if ( !NT_SUCCESS(errCode
) ) {
168 SetLastErrorByStatus (errCode
);