ReactOS 0.4.16-dev-819-g75c0dc0
RecycleBin5Enum Class Reference
Inheritance diagram for RecycleBin5Enum:
Collaboration diagram for RecycleBin5Enum:

Public Member Functions

 RecycleBin5Enum ()
 
virtual ~RecycleBin5Enum ()
 
HRESULT Init (_In_ IRecycleBin5 *prb, _In_ HANDLE hInfo, _In_ HANDLE hInfoMapped, _In_ LPCWSTR pszPrefix)
 
STDMETHODIMP QueryInterface (REFIID riid, void **ppvObject) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP Next (DWORD celt, IRecycleBinFile **rgelt, DWORD *pceltFetched) override
 
STDMETHODIMP Skip (DWORD celt) override
 
STDMETHODIMP Reset () override
 

Protected Attributes

LONG m_ref
 
IRecycleBin5m_recycleBin
 
HANDLE m_hInfo
 
INFO2_HEADERm_pInfo
 
DWORD m_dwCurrent
 
LPWSTR m_pszPrefix
 

Detailed Description

Definition at line 295 of file recyclebin_v5_enumerator.cpp.

Constructor & Destructor Documentation

◆ RecycleBin5Enum()

RecycleBin5Enum::RecycleBin5Enum ( )

Definition at line 423 of file recyclebin_v5_enumerator.cpp.

◆ ~RecycleBin5Enum()

RecycleBin5Enum::~RecycleBin5Enum ( )
virtual

Definition at line 351 of file recyclebin_v5_enumerator.cpp.

352{
353 TRACE("(%p)\n", this);
354
355 m_recycleBin->OnClosing(this);
357 m_recycleBin->Release();
359}
#define UnmapViewOfFile
Definition: compat.h:746
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
#define TRACE(s)
Definition: solgame.cpp:4

Member Function Documentation

◆ Init()

HRESULT RecycleBin5Enum::Init ( _In_ IRecycleBin5 prb,
_In_ HANDLE  hInfo,
_In_ HANDLE  hInfoMapped,
_In_ LPCWSTR  pszPrefix 
)

Definition at line 434 of file recyclebin_v5_enumerator.cpp.

439{
440 m_recycleBin = prb;
441 m_recycleBin->AddRef();
442
443 HRESULT hr = SHStrDup(pszPrefix, &m_pszPrefix);
444 if (FAILED(hr))
445 return hr;
446
447 m_hInfo = hInfo;
448 m_pInfo = (PINFO2_HEADER)MapViewOfFile(hInfoMapped, FILE_MAP_READ, 0, 0, 0);
449 if (!m_pInfo)
451
453 return E_FAIL;
454
455 return S_OK;
456}
#define E_FAIL
Definition: ddrawi.h:102
#define FILE_MAP_READ
Definition: compat.h:776
#define MapViewOfFile
Definition: compat.h:745
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define HResultFromWin32
Definition: loader.cpp:14
struct _INFO2_HEADER * PINFO2_HEADER
HRESULT hr
Definition: shlfolder.c:183
#define SHStrDup
Definition: shlwapi.h:1563
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by RecycleBin5Enum_Constructor().

◆ Next()

STDMETHODIMP RecycleBin5Enum::Next ( DWORD  celt,
IRecycleBinFile **  rgelt,
DWORD pceltFetched 
)
override

Definition at line 371 of file recyclebin_v5_enumerator.cpp.

372{
373 HRESULT hr;
374
375 TRACE("(%p, %u, %p, %p)\n", this, celt, rgelt, pceltFetched);
376
377 if (!rgelt)
378 return E_POINTER;
379 if (!pceltFetched && celt > 1)
380 return E_INVALIDARG;
381
383 FileSize.u.LowPart = GetFileSize(m_hInfo, &FileSize.u.HighPart);
384 if (FileSize.u.LowPart == 0)
386
387 DWORD dwEntries =
388 (DWORD)((FileSize.QuadPart - sizeof(INFO2_HEADER)) / sizeof(DELETED_FILE_RECORD));
389
390 DWORD iEntry = m_dwCurrent, fetched = 0;
391 PDELETED_FILE_RECORD pDeletedFile = (PDELETED_FILE_RECORD)(m_pInfo + 1) + iEntry;
392 for (; iEntry < dwEntries && fetched < celt; ++iEntry)
393 {
394 hr = RecycleBin5File_Constructor(m_recycleBin, m_pszPrefix, pDeletedFile, &rgelt[fetched]);
395 if (SUCCEEDED(hr))
396 fetched++;
397 pDeletedFile++;
398 }
399
400 m_dwCurrent = iEntry;
401 if (pceltFetched)
402 *pceltFetched = fetched;
403 if (fetched == celt)
404 return S_OK;
405 else
406 return S_FALSE;
407}
#define E_INVALIDARG
Definition: ddrawi.h:101
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
unsigned long DWORD
Definition: ntddk_ex.h:95
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define DWORD
Definition: nt_native.h:44
struct _DELETED_FILE_RECORD * PDELETED_FILE_RECORD
struct _DELETED_FILE_RECORD DELETED_FILE_RECORD
static HRESULT RecycleBin5File_Constructor(_In_ IRecycleBin5 *prb, _In_ LPCWSTR Folder, _In_ PDELETED_FILE_RECORD pDeletedFile, _Out_ IRecycleBinFile **ppFile)
LONGLONG QuadPart
Definition: typedefs.h:114
struct _LARGE_INTEGER::@2309 u
#define S_FALSE
Definition: winerror.h:2357
#define E_POINTER
Definition: winerror.h:2365

◆ QueryInterface()

STDMETHODIMP RecycleBin5Enum::QueryInterface ( REFIID  riid,
void **  ppvObject 
)
override

Definition at line 326 of file recyclebin_v5_enumerator.cpp.

327{
328 TRACE("(%p, %s, %p)\n", this, debugstr_guid(&riid), ppvObject);
329
330 if (!ppvObject)
331 return E_POINTER;
332
334 *ppvObject = static_cast<IRecycleBinEnumList *>(this);
335 else
336 {
337 *ppvObject = NULL;
338 return E_NOINTERFACE;
339 }
340
341 AddRef();
342 return S_OK;
343}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
EXTERN_C const IID IID_IRecycleBinEnumList
Definition: recyclebin.h:240
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ Reset()

STDMETHODIMP RecycleBin5Enum::Reset ( )
override

Definition at line 416 of file recyclebin_v5_enumerator.cpp.

417{
418 TRACE("(%p)\n", this);
419 m_dwCurrent = 0;
420 return S_OK;
421}

◆ Skip()

STDMETHODIMP RecycleBin5Enum::Skip ( DWORD  celt)
override

Definition at line 409 of file recyclebin_v5_enumerator.cpp.

410{
411 TRACE("(%p, %u)\n", this, celt);
412 m_dwCurrent += celt;
413 return S_OK;
414}

◆ STDMETHODIMP_() [1/2]

RecycleBin5Enum::STDMETHODIMP_ ( ULONG  )
override

◆ STDMETHODIMP_() [2/2]

RecycleBin5Enum::STDMETHODIMP_ ( ULONG  )
override

Member Data Documentation

◆ m_dwCurrent

DWORD RecycleBin5Enum::m_dwCurrent
protected

Definition at line 322 of file recyclebin_v5_enumerator.cpp.

Referenced by Next(), Reset(), and Skip().

◆ m_hInfo

HANDLE RecycleBin5Enum::m_hInfo
protected

Definition at line 320 of file recyclebin_v5_enumerator.cpp.

Referenced by Init(), and Next().

◆ m_pInfo

INFO2_HEADER* RecycleBin5Enum::m_pInfo
protected

Definition at line 321 of file recyclebin_v5_enumerator.cpp.

Referenced by Init(), Next(), and ~RecycleBin5Enum().

◆ m_pszPrefix

LPWSTR RecycleBin5Enum::m_pszPrefix
protected

Definition at line 323 of file recyclebin_v5_enumerator.cpp.

Referenced by Init(), Next(), and ~RecycleBin5Enum().

◆ m_recycleBin

IRecycleBin5* RecycleBin5Enum::m_recycleBin
protected

Definition at line 319 of file recyclebin_v5_enumerator.cpp.

Referenced by Init(), Next(), and ~RecycleBin5Enum().

◆ m_ref

LONG RecycleBin5Enum::m_ref
protected

Definition at line 318 of file recyclebin_v5_enumerator.cpp.


The documentation for this class was generated from the following file: