|
|
/*++
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_NONE 0x000000
#define DRIVEENUM_UNKNOWN 0x000001
#define DRIVEENUM_NOROOTDIR 0x000002
#define DRIVEENUM_REMOVABLE 0x000004
#define DRIVEENUM_FIXED 0x000008
#define DRIVEENUM_REMOTE 0x000010
#define DRIVEENUM_CDROM 0x000020
#define DRIVEENUM_RAMDISK 0x000040
#define DRIVEENUM_ALL (DRIVEENUM_UNKNOWN|DRIVEENUM_NOROOTDIR|DRIVEENUM_REMOVABLE|DRIVEENUM_FIXED|DRIVEENUM_REMOTE|DRIVEENUM_CDROM|DRIVEENUM_RAMDISK)
#define DRIVEENUM_ALLVALID (DRIVEENUM_REMOVABLE|DRIVEENUM_FIXED|DRIVEENUM_REMOTE|DRIVEENUM_CDROM|DRIVEENUM_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;
typedef struct { PCSTR OriginalArg; PCSTR CleanedUpArg; BOOL Quoted; } CMDLINEARGA, *PCMDLINEARGA;
typedef struct { PCSTR CmdLine; UINT ArgCount; CMDLINEARGA Args[]; } CMDLINEA, *PCMDLINEA;
typedef struct { PCWSTR OriginalArg; PCWSTR CleanedUpArg; BOOL Quoted; } CMDLINEARGW, *PCMDLINEARGW;
typedef struct { PCWSTR CmdLine; UINT ArgCount; CMDLINEARGW Args[]; } CMDLINEW, *PCMDLINEW;
typedef BOOL(WINAPI FINDFILEA)( IN PCSTR FileName ); typedef FINDFILEA *PFINDFILEA;
typedef BOOL(WINAPI FINDFILEW)( IN PCWSTR FileName ); typedef FINDFILEW *PFINDFILEW;
typedef BOOL(WINAPI SEARCHPATHA)( IN PCSTR FileName, IN DWORD BufferLength, OUT PSTR Buffer ); typedef SEARCHPATHA *PSEARCHPATHA;
typedef BOOL(WINAPI SEARCHPATHW)( IN PCWSTR FileName, IN DWORD BufferLength, OUT PWSTR Buffer ); typedef SEARCHPATHW *PSEARCHPATHW;
//
// 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 FiRemoveAllFilesInTreeExA ( IN PCSTR Dir, IN BOOL RemoveRoot );
#define FiRemoveAllFilesInTreeA(dir) FiRemoveAllFilesInTreeExA(dir,TRUE)
BOOL FiRemoveAllFilesInTreeExW ( IN PCWSTR Dir, IN BOOL RemoveRoot );
#define FiRemoveAllFilesInTreeW(dir) FiRemoveAllFilesInTreeExW(dir,TRUE)
BOOL FiCopyAllFilesInDirA ( IN PCSTR Source, IN PCSTR Dest, IN BOOL SkipExisting );
#define FiCopyAllFilesInDirA(source,dest) FiCopyAllFilesInDirExA(source,dest,FALSE)
BOOL FiCopyAllFilesInDirW ( IN PCWSTR Source, IN PCWSTR Dest, IN BOOL SkipExisting );
#define FiCopyAllFilesInDirW(source,dest) FiCopyAllFilesInDirExW(source,dest,FALSE)
BOOL FiCopyAllFilesInTreeExA ( IN PCSTR Source, IN PCSTR Dest, IN BOOL SkipExisting );
#define FiCopyAllFilesInTreeA(source,dest) FiCopyAllFilesInTreeExA(source,dest,FALSE)
BOOL FiCopyAllFilesInTreeExW ( IN PCWSTR Source, IN PCWSTR Dest, IN BOOL SkipExisting );
#define FiCopyAllFilesInTreeW(source,dest) FiCopyAllFilesInTreeExW(source,dest,FALSE)
PCMDLINEA ParseCmdLineExA ( IN PCSTR CmdLine, IN PCSTR Separators, OPTIONAL IN PFINDFILEA FindFileCallback, OPTIONAL IN PSEARCHPATHA SearchPathCallback, OPTIONAL IN OUT PGROWBUFFER Buffer ); #define ParseCmdLineA(c,b) ParseCmdLineExA(c,NULL,NULL,NULL,b)
PCMDLINEW ParseCmdLineExW ( IN PCWSTR CmdLine, IN PCWSTR Separators, OPTIONAL IN PFINDFILEW FindFileCallback, OPTIONAL IN PSEARCHPATHW SearchPathCallback, OPTIONAL IN OUT PGROWBUFFER Buffer ); #define ParseCmdLineW(c,b) ParseCmdLineExW(c,NULL,NULL,NULL,b)
//
// 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 FiRemoveAllFilesInTreeEx FiRemoveAllFilesInTreeExW
#define FiRemoveAllFilesInTree FiRemoveAllFilesInTreeW
#define FiCopyAllFilesInDir FiCopyAllFilesInDirW
#define FiCopyAllFilesInDirEx FiCopyAllFilesInDirExW
#define FiCopyAllFilesInTree FiCopyAllFilesInTreeW
#define FiCopyAllFilesInTreeEx FiCopyAllFilesInTreeExW
#define CMDLINE CMDLINEW
#define PCMDLINE PCMDLINEW
#define ParseCmdLineEx ParseCmdLineExW
#define ParseCmdLine ParseCmdLineW
#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 FiRemoveAllFilesInTreeEx FiRemoveAllFilesInTreeExA
#define FiRemoveAllFilesInTree FiRemoveAllFilesInTreeA
#define FiCopyAllFilesInDirEx FiCopyAllFilesInDirExA
#define FiCopyAllFilesInDir FiCopyAllFilesInDirA
#define FiCopyAllFilesInTreeEx FiCopyAllFilesInTreeExA
#define FiCopyAllFilesInTree FiCopyAllFilesInTreeA
#define CMDLINE CMDLINEA
#define PCMDLINE PCMDLINEA
#define ParseCmdLineEx ParseCmdLineExA
#define ParseCmdLine ParseCmdLineA
#endif
|