105 lines
2.6 KiB
C++
105 lines
2.6 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: ntenm.hxx
|
|
//
|
|
// Contents: NT handle enumerator
|
|
//
|
|
// Classes: CNtEnum
|
|
//
|
|
// History: 12-Jul-93 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __NTENM_HXX__
|
|
#define __NTENM_HXX__
|
|
|
|
// Name return control
|
|
#define NTE_NONAME 0
|
|
#define NTE_BUFFERNAME 1
|
|
#define NTE_STATNAME 2
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CNtEnum (nte)
|
|
//
|
|
// Purpose: Enumerates using an NT handle
|
|
//
|
|
// Interface: See below
|
|
//
|
|
// History: 12-Jul-93 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CNtEnum
|
|
{
|
|
public:
|
|
CNtEnum (BOOL fIsStorage = TRUE) { _fIsStorage = fIsStorage; _afsi = _pfsi = _pfsiEnd = NULL; }
|
|
~CNtEnum () { if (_afsi) delete [] _afsi; }
|
|
SCODE InitFromHandle(HANDLE h, BOOL fReset);
|
|
|
|
SCODE Next(STATSTG *pstat, WCHAR *pwcsName, DWORD dwNte, FILEDIR *pfd);
|
|
SCODE NextOfs(STATSTG *pstat, WCHAR *pwcsName, DWORD dwNte, FILEDIR *pfd);
|
|
inline void Reset(void);
|
|
inline HANDLE GetHandle(void);
|
|
|
|
private:
|
|
SCODE EnumDir (STATSTG *pstat, WCHAR *pwcsName, DWORD dwNte, FILEDIR *pfd);
|
|
SCODE BeginEnumStm (void);
|
|
SCODE EnumStm (STATSTG *pstat, WCHAR *pwcsName, DWORD dwNte, FILEDIR *pfd);
|
|
|
|
enum NtEnumStatus {
|
|
NES_RESET_PENDING,
|
|
NES_ENUM_DIR,
|
|
};
|
|
|
|
enum {
|
|
CFSI_DEFAULT = 32
|
|
};
|
|
|
|
NtEnumStatus _nes;
|
|
NuSafeNtHandle _h;
|
|
int _cfsi;
|
|
FILE_STREAM_INFORMATION *_afsi;
|
|
FILE_STREAM_INFORMATION *_pfsi;
|
|
FILE_STREAM_INFORMATION *_pfsiEnd;
|
|
BOOL _fIsStorage;
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CNtEnum::Reset, public
|
|
//
|
|
// Synopsis: Resets the enumeration
|
|
//
|
|
// History: 12-Jul-93 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline void CNtEnum::Reset(void)
|
|
{
|
|
ssDebugOut((DEB_ITRACE, "In CNtEnum::Reset:%p()\n", this));
|
|
_nes = NES_RESET_PENDING;
|
|
ssDebugOut((DEB_ITRACE, "Out CNtEnum::Reset\n"));
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CNtEnum::GetHandle, public
|
|
//
|
|
// Synopsis: Returns the handle
|
|
//
|
|
// History: 12-Jul-93 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline HANDLE CNtEnum::GetHandle(void)
|
|
{
|
|
return _h;
|
|
}
|
|
|
|
#endif // __NTENM_HXX__
|
|
|