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