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 ****************************************************************/
31 DWORD dwFileOffsetLow,
32 DWORD dwFileOffsetHigh,
33 DWORD nNumberOfBytesToLockLow,
34 DWORD nNumberOfBytesToLockHigh
38 OVERLAPPED Overlapped;
40 Overlapped.Offset = dwFileOffsetLow;
41 Overlapped.OffsetHigh = dwFileOffsetHigh;
44 return LockFileEx(hFile, LOCKFILE_FAIL_IMMEDIATELY|LOCKFILE_EXCLUSIVE_LOCK,dwReserved,nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh, &Overlapped ) ;
58 DWORD nNumberOfBytesToLockLow,
59 DWORD nNumberOfBytesToLockHigh,
60 LPOVERLAPPED lpOverlapped
63 LARGE_INTEGER BytesToLock;
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
128 OVERLAPPED Overlapped;
129 Overlapped.Offset = dwFileOffsetLow;
130 Overlapped.OffsetHigh = dwFileOffsetHigh;
132 return UnlockFileEx(hFile, dwReserved, nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh, &Overlapped);
145 DWORD nNumberOfBytesToUnLockLow,
146 DWORD nNumberOfBytesToUnLockHigh,
147 LPOVERLAPPED lpOverlapped
150 LARGE_INTEGER BytesToUnLock;
151 LARGE_INTEGER StartAddress;
156 SetLastError(ERROR_INVALID_PARAMETER);
159 if ( lpOverlapped == NULL )
161 SetLastError(ERROR_INVALID_PARAMETER);
165 BytesToUnLock.u.LowPart = nNumberOfBytesToUnLockLow;
166 BytesToUnLock.u.HighPart = nNumberOfBytesToUnLockHigh;
168 StartAddress.u.LowPart = lpOverlapped->Offset;
169 StartAddress.u.HighPart = lpOverlapped->OffsetHigh;
171 errCode = NtUnlockFile(hFile,
172 (PIO_STATUS_BLOCK)lpOverlapped,
176 if ( !NT_SUCCESS(errCode) ) {
177 SetLastErrorByStatus (errCode);