#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
◆ NONAMELESSSTRUCT
◆ NONAMELESSUNION
◆ FileLockBytesImpl
◆ FileLockBytesImpl_AddRef()
Definition at line 147 of file filelockbytes.c.
148{
151}
#define InterlockedIncrement
static FileLockBytesImpl * impl_from_ILockBytes(ILockBytes *iface)
◆ FileLockBytesImpl_Construct()
Definition at line 89 of file filelockbytes.c.
90{
93
96
98
101
106
107 if(pwcsName) {
109 {
111 }
115 {
118 }
120 }
121 else
123
124 *pLockBytes = &
This->ILockBytes_iface;
125
127}
#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 324 of file filelockbytes.c.
326{
330
331 TRACE(
"ofs %u count %u flags %x\n", libOffset.
u.LowPart,
cb.u.LowPart, dwLockType);
332
333 if (dwLockType & LOCK_WRITE)
335
336 if (dwLockType & (LOCK_EXCLUSIVE|LOCK_ONLYONCE))
338
340 ol.u.s.
Offset = libOffset.
u.LowPart;
342
346}
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)
static HMODULE MODULEINFO DWORD cb
struct _ULARGE_INTEGER::@4266 u
#define LOCKFILE_FAIL_IMMEDIATELY
#define LOCKFILE_EXCLUSIVE_LOCK
#define STG_E_INVALIDFUNCTION
◆ FileLockBytesImpl_QueryInterface()
Definition at line 131 of file filelockbytes.c.
133{
136 else
137 {
140 }
141
143
145}
#define IsEqualIID(riid1, riid2)
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
◆ FileLockBytesImpl_ReadAt()
Definition at line 178 of file filelockbytes.c.
184{
191
192 TRACE(
"(%p)-> %i %p %i %p\n",
This, ulOffset.
u.LowPart, pv,
cb, pcbRead);
193
194
196
197 if (pcbRead)
198 *pcbRead = 0;
199
201
203
206
207 while (bytes_left)
208 {
210
211 if (!
ret || cbRead == 0)
213
214 if (pcbRead)
215 *pcbRead += cbRead;
216
217 bytes_left -= cbRead;
218 readPtr += cbRead;
219 }
220
223}
#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 153 of file filelockbytes.c.
154{
157
159
161 {
165 }
166
168}
#define InterlockedDecrement
◆ FileLockBytesImpl_SetSize()
Definition at line 294 of file filelockbytes.c.
295{
299
300 TRACE(
"new size %u\n", newSize.
u.LowPart);
301
304 {
306 }
307
309}
BOOL WINAPI SetEndOfFile(HANDLE hFile)
◆ FileLockBytesImpl_Stat()
Definition at line 368 of file filelockbytes.c.
370{
372
373 if (!(STATFLAG_NONAME & grfStatFlag) &&
This->pwcsName)
374 {
375 pstatstg->pwcsName =
377
379 }
380 else
381 pstatstg->pwcsName =
NULL;
382
383 pstatstg->type = STGTY_LOCKBYTES;
384
385 pstatstg->cbSize.u.LowPart =
GetFileSize(
This->hfile, &pstatstg->cbSize.u.HighPart);
386
387
388 pstatstg->grfLocksSupported = LOCK_EXCLUSIVE|LOCK_ONLYONCE|
WINE_LOCK_READ;
389
391}
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
◆ FileLockBytesImpl_UnlockRegion()
Definition at line 348 of file filelockbytes.c.
350{
353
354 TRACE(
"ofs %u count %u flags %x\n", libOffset.
u.LowPart,
cb.u.LowPart, dwLockType);
355
356 if (dwLockType & LOCK_WRITE)
358
360 ol.u.s.
Offset = libOffset.
u.LowPart;
362
366}
BOOL WINAPI UnlockFileEx(IN HANDLE hFile, IN DWORD dwReserved, IN DWORD nNumberOfBytesToUnLockLow, IN DWORD nNumberOfBytesToUnLockHigh, IN LPOVERLAPPED lpOverlapped)
◆ FileLockBytesImpl_WriteAt()
Definition at line 233 of file filelockbytes.c.
239{
242 const BYTE *writePtr = pv;
246
247 TRACE(
"(%p)-> %i %p %i %p\n",
This, ulOffset.
u.LowPart, pv,
cb, pcbWritten);
248
249
251
254
255 if (pcbWritten)
256 *pcbWritten = 0;
257
259
261
264
265 while (bytes_left)
266 {
268
271
272 if (pcbWritten)
273 *pcbWritten += cbWritten;
274
275 bytes_left -= cbWritten;
276 writePtr += cbWritten;
277 }
278
281}
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 56 of file filelockbytes.c.
Referenced by FileLockBytesImpl_Construct().