|
|
/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
fileenum.h
Abstract:
Set of APIs to enumerate a file system using Win32 APIs.
Author:
20-Oct-1999 Ovidiu Temereanca (ovidiut) - File creation.
Revision History:
<alias> <date> <comments>
--*/
//
// Types
//
//
// Drive enumeration structures
//
#define DRIVEENUM_UNKNOWN DRIVE_UNKNOWN
#define DRIVEENUM_NOROOTDIR DRIVE_NO_ROOT_DIR
#define DRIVEENUM_REMOVABLE DRIVE_REMOVABLE
#define DRIVEENUM_FIXED DRIVE_FIXED
#define DRIVEENUM_REMOTE DRIVE_REMOTE
#define DRIVEENUM_CDROM DRIVE_CDROM
#define DRIVEENUM_RAMDISK DRIVE_RAMDISK
#define DRIVEENUM_NONE 0
#define DRIVEENUM_ALL (DRIVE_UNKNOWN|DRIVE_NO_ROOT_DIR|DRIVE_REMOVABLE|DRIVE_FIXED|DRIVE_REMOTE|DRIVE_CDROM|DRIVE_RAMDISK)
#define DRIVEENUM_ALLVALID (DRIVE_REMOVABLE|DRIVE_FIXED|DRIVE_REMOTE|DRIVE_CDROM|DRIVE_RAMDISK)
typedef struct { PCSTR DriveName; UINT DriveType;
//
// private members, maintained by enumeration
//
PSTR AllLogicalDrives; UINT WantedDriveTypes; } DRIVE_ENUMA, *PDRIVE_ENUMA;
typedef struct { PCWSTR DriveName; UINT DriveType;
//
// private members, maintained by enumeration
//
PWSTR AllLogicalDrives; UINT WantedDriveTypes; } DRIVE_ENUMW, *PDRIVE_ENUMW;
//
// File enumeration structures
//
#define FILEENUM_ALL_SUBLEVELS 0xFFFFFFFF
typedef enum { FECF_SKIPDIR = 0x0001, FECF_SKIPSUBDIRS = 0x0002, FECF_SKIPFILES = 0x0004, } FILEENUM_CONTROLFLAGS;
typedef enum { FEIF_RETURN_DIRS = 0x0001, FEIF_FILES_FIRST = 0x0002, FEIF_DEPTH_FIRST = 0x0004, FEIF_USE_EXCLUSIONS = 0x0008, FEIF_CONTAINERS_FIRST = 0x0010, } FILEENUM_INFOFLAGS;
typedef enum { DNS_ENUM_INIT, DNS_FILE_FIRST, DNS_FILE_NEXT, DNS_FILE_DONE, DNS_SUBDIR_FIRST, DNS_SUBDIR_NEXT, DNS_SUBDIR_DONE, DNS_ENUM_DONE } DNS_ENUM_STATE;
typedef enum { FES_ROOT_FIRST, FES_ROOT_NEXT, FES_ROOT_DONE } FES_ROOT_STATE;
typedef enum { DNF_RETURN_DIRNAME = 0x0001, DNF_DIRNAME_MATCHES = 0x0002, } DIRNODE_FLAGS;
typedef struct { PCSTR DirName; DWORD DirAttributes; PSTR FileName; HANDLE FindHandle; WIN32_FIND_DATAA FindData; DWORD EnumState; DWORD Flags; DWORD SubLevel; } DIRNODEA, *PDIRNODEA;
typedef struct { PCWSTR DirName; DWORD DirAttributes; PWSTR FileName; HANDLE FindHandle; WIN32_FIND_DATAW FindData; DWORD EnumState; DWORD Flags; DWORD SubLevel; } DIRNODEW, *PDIRNODEW;
typedef BOOL (*FPE_ERROR_CALLBACKA)(PDIRNODEA);
typedef struct { POBSPARSEDPATTERNA PathPattern; DWORD Flags; DWORD RootLevel; DWORD MaxSubLevel; FPE_ERROR_CALLBACKA CallbackOnError; } FILEENUMINFOA, *PFILEENUMINFOA;
typedef BOOL (*FPE_ERROR_CALLBACKW)(PDIRNODEW);
typedef struct { POBSPARSEDPATTERNW PathPattern; DWORD Flags; DWORD RootLevel; DWORD MaxSubLevel; FPE_ERROR_CALLBACKW CallbackOnError; } FILEENUMINFOW, *PFILEENUMINFOW;
typedef struct { PCSTR EncodedFullName; PCSTR Name; PCSTR Location; CHAR NativeFullName[MAX_MBCHAR_PATH]; DWORD Attributes; DWORD CurrentLevel;
//
// Private members
//
DWORD ControlFlags; FILEENUMINFOA FileEnumInfo; GROWBUFFER FileNodes; DWORD RootState; PDRIVE_ENUMA DriveEnum; UINT DriveEnumTypes; PDIRNODEA LastNode; PSTR FileNameAppendPos; PSTR LastWackPtr; } FILETREE_ENUMA, *PFILETREE_ENUMA;
typedef struct { PCWSTR EncodedFullName; PCWSTR Name; PCWSTR Location; WCHAR NativeFullName[MAX_WCHAR_PATH]; DWORD Attributes; DWORD CurrentLevel;
//
// Private members
//
DWORD ControlFlags; FILEENUMINFOW FileEnumInfo; GROWBUFFER FileNodes; DWORD RootState; PDRIVE_ENUMW DriveEnum; UINT DriveEnumTypes; PDIRNODEW LastNode; PWSTR FileNameAppendPos; PWSTR LastWackPtr; } FILETREE_ENUMW, *PFILETREE_ENUMW;
//
// API
//
BOOL FileEnumInitialize ( VOID );
VOID FileEnumTerminate ( VOID );
//
// File enumeration APIs
//
BOOL EnumFirstFileInTreeExA ( OUT PFILETREE_ENUMA FileEnum, IN PCSTR EncodedPathPattern, IN UINT DriveEnumTypes, IN BOOL EnumContainers, IN BOOL ContainersFirst, IN BOOL FilesFirst, IN BOOL DepthFirst, IN DWORD MaxSubLevels, IN BOOL UseExclusions, IN FPE_ERROR_CALLBACKA CallbackOnError OPTIONAL );
#define EnumFirstFileInTreeA(e,p) EnumFirstFileInTreeExA(e,p,DRIVEENUM_ALLVALID,TRUE,TRUE,TRUE,TRUE,FILEENUM_ALL_SUBLEVELS,FALSE,NULL)
BOOL EnumFirstFileInTreeExW ( OUT PFILETREE_ENUMW FileEnum, IN PCWSTR EncodedPathPattern, IN UINT DriveEnumTypes, IN BOOL EnumContainers, IN BOOL ContainersFirst, IN BOOL FilesFirst, IN BOOL DepthFirst, IN DWORD MaxSubLevels, IN BOOL UseExclusions, IN FPE_ERROR_CALLBACKW CallbackOnError OPTIONAL );
#define EnumFirstFileInTreeW(e,p) EnumFirstFileInTreeExW(e,p,DRIVEENUM_ALLVALID,TRUE,TRUE,TRUE,TRUE,FILEENUM_ALL_SUBLEVELS,FALSE,NULL)
BOOL EnumNextFileInTreeA ( IN OUT PFILETREE_ENUMA FileEnum );
BOOL EnumNextFileInTreeW ( IN OUT PFILETREE_ENUMW FileEnum );
VOID AbortEnumFileInTreeA ( IN OUT PFILETREE_ENUMA FileEnum );
VOID AbortEnumFileInTreeW ( IN OUT PFILETREE_ENUMW FileEnum );
//
// Drive enumeration APIs
//
BOOL EnumFirstDriveA ( OUT PDRIVE_ENUMA DriveEnum, IN UINT WantedDriveTypes );
BOOL EnumFirstDriveW ( OUT PDRIVE_ENUMW DriveEnum, IN UINT WantedDriveTypes );
BOOL EnumNextDriveA ( IN OUT PDRIVE_ENUMA DriveEnum );
BOOL EnumNextDriveW ( IN OUT PDRIVE_ENUMW DriveEnum );
VOID AbortEnumDriveA ( IN OUT PDRIVE_ENUMA DriveEnum );
VOID AbortEnumDriveW ( IN OUT PDRIVE_ENUMW DriveEnum );
//
// Routines built on enum
//
BOOL FiRemoveAllFilesInDirA ( IN PCSTR Dir );
BOOL FiRemoveAllFilesInDirW ( IN PCWSTR Dir );
BOOL FiRemoveAllFilesInTreeA ( IN PCSTR Dir );
BOOL FiRemoveAllFilesInTreeW ( IN PCWSTR Dir );
//
// Macros
//
#ifdef UNICODE
#define DIRNODE DIRNODEW
#define PDIRNODE PDIRNODEW
#define FILENODE FILENODEW
#define PFILENODE PFILENODEW
#define RPE_ERROR_CALLBACK RPE_ERROR_CALLBACKW
#define FILEENUMINFO FILEENUMINFOW
#define PFILEENUMINFO PFILEENUMINFOW
#define FILETREE_ENUM FILETREE_ENUMW
#define PFILETREE_ENUM PFILETREE_ENUMW
#define EnumFirstFileInTree EnumFirstFileInTreeW
#define EnumFirstFileInTreeEx EnumFirstFileInTreeExW
#define EnumNextFileInTree EnumNextFileInTreeW
#define AbortEnumFileInTree AbortEnumFileInTreeW
#define DRIVE_ENUM DRIVE_ENUMW
#define EnumFirstDrive EnumFirstDriveW
#define EnumNextDrive EnumNextDriveW
#define AbortEnumDrive AbortEnumDriveW
#define FiRemoveAllFilesInDir FiRemoveAllFilesInDirW
#define FiRemoveAllFilesInTree FiRemoveAllFilesInTreeW
#else
#define DIRNODE DIRNODEA
#define PDIRNODE PDIRNODEA
#define FILENODE FILENODEA
#define PFILENODE PFILENODEA
#define RPE_ERROR_CALLBACK RPE_ERROR_CALLBACKA
#define FILEENUMINFO FILEENUMINFOA
#define PFILEENUMINFO PFILEENUMINFOA
#define FILETREE_ENUM FILETREE_ENUMA
#define PFILETREE_ENUM PFILETREE_ENUMA
#define EnumFirstFileInTree EnumFirstFileInTreeA
#define EnumFirstFileInTreeEx EnumFirstFileInTreeExA
#define EnumNextFileInTree EnumNextFileInTreeA
#define AbortEnumFileInTree AbortEnumFileInTreeA
#define DRIVE_ENUM DRIVE_ENUMA
#define EnumFirstDrive EnumFirstDriveA
#define EnumNextDrive EnumNextDriveA
#define AbortEnumDrive AbortEnumDriveA
#define FiRemoveAllFilesInDir FiRemoveAllFilesInDirA
#define FiRemoveAllFilesInTree FiRemoveAllFilesInTreeA
#endif
|