#include <assert.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winerror.h"
#include "objbase.h"
#include "ole2.h"
#include "storage32.h"
#include "wine/debug.h"
Go to the source code of this file.
|
| | WINE_DEFAULT_DEBUG_CHANNEL (storage) |
| |
| static FileLockBytesImpl * | impl_from_ILockBytes (ILockBytes *iface) |
| |
| static DWORD | GetProtectMode (DWORD openFlags) |
| |
| HRESULT | FileLockBytesImpl_Construct (HANDLE hFile, DWORD openFlags, LPCWSTR pwcsName, ILockBytes **pLockBytes) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_QueryInterface (ILockBytes *iface, REFIID riid, void **ppvObject) |
| |
| static ULONG WINAPI | FileLockBytesImpl_AddRef (ILockBytes *iface) |
| |
| static ULONG WINAPI | FileLockBytesImpl_Release (ILockBytes *iface) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_ReadAt (ILockBytes *iface, ULARGE_INTEGER ulOffset, void *pv, ULONG cb, ULONG *pcbRead) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_WriteAt (ILockBytes *iface, ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_Flush (ILockBytes *iface) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_SetSize (ILockBytes *iface, ULARGE_INTEGER newSize) |
| |
| static HRESULT | get_lock_error (void) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_LockRegion (ILockBytes *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_UnlockRegion (ILockBytes *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) |
| |
| static HRESULT WINAPI | FileLockBytesImpl_Stat (ILockBytes *iface, STATSTG *pstatstg, DWORD grfStatFlag) |
| |
◆ COBJMACROS
◆ FileLockBytesImpl
◆ FileLockBytesImpl_AddRef()
Definition at line 144 of file filelockbytes.c.
145{
148}
#define InterlockedIncrement
static FileLockBytesImpl * impl_from_ILockBytes(ILockBytes *iface)
◆ FileLockBytesImpl_Construct()
Definition at line 86 of file filelockbytes.c.
87{
90
93
95
98
103
104 if(pwcsName) {
106 {
108 }
112 {
115 }
117 }
118 else
120
121 *pLockBytes = &
This->ILockBytes_iface;
122
124}
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
static const ILockBytesVtbl FileLockBytesImpl_Vtbl
static DWORD GetProtectMode(DWORD openFlags)
Referenced by StorageImpl_Construct().
◆ FileLockBytesImpl_Flush()
◆ FileLockBytesImpl_LockRegion()
Definition at line 321 of file filelockbytes.c.
323{
327
328 TRACE(
"ofs %lu count %lu flags %lx\n", libOffset.
LowPart,
cb.LowPart, dwLockType);
329
330 if (dwLockType & LOCK_WRITE)
332
333 if (dwLockType & (LOCK_EXCLUSIVE|LOCK_ONLYONCE))
335
339
343}
BOOL WINAPI LockFileEx(IN HANDLE hFile, IN DWORD dwFlags, IN DWORD dwReserved, IN DWORD nNumberOfBytesToLockLow, IN DWORD nNumberOfBytesToLockHigh, IN LPOVERLAPPED lpOverlapped)
static HRESULT get_lock_error(void)
#define LOCKFILE_FAIL_IMMEDIATELY
#define LOCKFILE_EXCLUSIVE_LOCK
#define STG_E_INVALIDFUNCTION
◆ FileLockBytesImpl_QueryInterface()
Definition at line 128 of file filelockbytes.c.
130{
132 *ppvObject = iface;
133 else
134 {
137 }
138
139 IUnknown_AddRef((
IUnknown*)*ppvObject);
140
142}
#define IsEqualIID(riid1, riid2)
◆ FileLockBytesImpl_ReadAt()
Definition at line 175 of file filelockbytes.c.
181{
188
189 TRACE(
"%p, %ld, %p, %lu, %p.\n", iface, ulOffset.
LowPart, pv,
cb, pcbRead);
190
191
193
194 if (pcbRead)
195 *pcbRead = 0;
196
198
200
203
204 while (bytes_left)
205 {
207
208 if (!
ret || cbRead == 0)
210
211 if (pcbRead)
212 *pcbRead += cbRead;
213
214 bytes_left -= cbRead;
215 readPtr += cbRead;
216 }
217
220}
#define ReadFile(a, b, c, d, e)
BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
◆ FileLockBytesImpl_Release()
Definition at line 150 of file filelockbytes.c.
151{
154
156
158 {
162 }
163
165}
#define InterlockedDecrement
◆ FileLockBytesImpl_SetSize()
Definition at line 291 of file filelockbytes.c.
292{
296
298
301 {
303 }
304
306}
BOOL WINAPI SetEndOfFile(HANDLE hFile)
◆ FileLockBytesImpl_Stat()
Definition at line 365 of file filelockbytes.c.
367{
369
370 if (!(STATFLAG_NONAME & grfStatFlag) &&
This->pwcsName)
371 {
372 pstatstg->pwcsName =
374
376 }
377 else
378 pstatstg->pwcsName =
NULL;
379
380 pstatstg->type = STGTY_LOCKBYTES;
381
382 pstatstg->cbSize.LowPart =
GetFileSize(
This->hfile, &pstatstg->cbSize.HighPart);
383
384
385 pstatstg->grfLocksSupported = LOCK_EXCLUSIVE|LOCK_ONLYONCE|
WINE_LOCK_READ;
386
388}
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
◆ FileLockBytesImpl_UnlockRegion()
Definition at line 345 of file filelockbytes.c.
347{
350
351 TRACE(
"ofs %lu count %lu flags %lx\n", libOffset.
LowPart,
cb.LowPart, dwLockType);
352
353 if (dwLockType & LOCK_WRITE)
355
359
363}
BOOL WINAPI UnlockFileEx(IN HANDLE hFile, IN DWORD dwReserved, IN DWORD nNumberOfBytesToUnLockLow, IN DWORD nNumberOfBytesToUnLockHigh, IN LPOVERLAPPED lpOverlapped)
◆ FileLockBytesImpl_WriteAt()
Definition at line 230 of file filelockbytes.c.
236{
239 const BYTE *writePtr = pv;
243
244 TRACE(
"%p, %ld, %p, %lu, %p.\n", iface, ulOffset.
LowPart, pv,
cb, pcbWritten);
245
246
248
251
252 if (pcbWritten)
253 *pcbWritten = 0;
254
256
258
261
262 while (bytes_left)
263 {
265
268
269 if (pcbWritten)
270 *pcbWritten += cbWritten;
271
272 bytes_left -= cbWritten;
273 writePtr += cbWritten;
274 }
275
278}
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define STG_E_ACCESSDENIED
◆ get_lock_error()
◆ GetProtectMode()
◆ impl_from_ILockBytes()
◆ WINE_DEFAULT_DEBUG_CHANNEL()
| WINE_DEFAULT_DEBUG_CHANNEL |
( |
storage |
| ) |
|
◆ FileLockBytesImpl_Vtbl
| static const ILockBytesVtbl FileLockBytesImpl_Vtbl |
|
static |
Initial value:= {
}
static ULONG WINAPI FileLockBytesImpl_Release(ILockBytes *iface)
static HRESULT WINAPI FileLockBytesImpl_UnlockRegion(ILockBytes *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
static ULONG WINAPI FileLockBytesImpl_AddRef(ILockBytes *iface)
static HRESULT WINAPI FileLockBytesImpl_WriteAt(ILockBytes *iface, ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten)
static HRESULT WINAPI FileLockBytesImpl_Flush(ILockBytes *iface)
static HRESULT WINAPI FileLockBytesImpl_Stat(ILockBytes *iface, STATSTG *pstatstg, DWORD grfStatFlag)
static HRESULT WINAPI FileLockBytesImpl_ReadAt(ILockBytes *iface, ULARGE_INTEGER ulOffset, void *pv, ULONG cb, ULONG *pcbRead)
static HRESULT WINAPI FileLockBytesImpl_SetSize(ILockBytes *iface, ULARGE_INTEGER newSize)
static HRESULT WINAPI FileLockBytesImpl_LockRegion(ILockBytes *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
static HRESULT WINAPI FileLockBytesImpl_QueryInterface(ILockBytes *iface, REFIID riid, void **ppvObject)
Definition at line 53 of file filelockbytes.c.
Referenced by FileLockBytesImpl_Construct().