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);