windows-nt/Source/XPSP1/NT/base/ntsetup/win95upg/common/fileenum/fileenum.c
2020-09-26 16:20:57 +08:00

155 lines
3.4 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
fileenum.c
Abstract:
The code in this source file traverses a drive tree and calls
an external callback function for each file. An INF can be
provided to exclude files and/or directories from enumeration.
Author:
Jim Schmidt (jimschm) 16-Aug-1996
Revision History:
Marc R. Whitten (marcw) 11-Sep-1997 Tweaked exclusion handling code, removed
obsolete code.
Mike Condra (mikeco) 02-Jun-1996 Add fns to tap into file/path exclusion
Jim Schmidt (jimschm) 20-Dec-1996 Added callback levels and made single
source file for both A and W versions
Jim Schmidt (jimschm) 27-Nov-1996 Added level and filter to EnumTree
--*/
#ifndef UNICODE
#define UNICODE
#endif
#include "no_pch.h"
#include "..\..\inc\fileenum.h"
typedef struct {
FILEENUMPROCW fnEnumCallback;
FILEENUMFAILPROCW fnFailCallback;
DWORD EnumID;
LPVOID pParam;
DWORD Levels;
DWORD CurrentLevel;
DWORD AttributeFilter;
} ENUMSTRUCTW, *PENUMSTRUCTW;
BOOL EnumTreeEngineW (LPCWSTR CurrentPath, PENUMSTRUCTW pes);
BOOL IsPathExcludedW (DWORD EnumID, LPCWSTR Path);
BOOL IsFileExcludedW (DWORD EnumID, LPCWSTR File, BYTE byBitmask[]);
BOOL BuildExclusionsFromInfW (DWORD EnumID, PEXCLUDEINFW ExcludeInfStruct);
void CreateBitmaskW (DWORD EnumID, LPCWSTR FindPattern, BYTE byBitmask[]);
BOOL
WINAPI
FileEnum_Entry (
IN HINSTANCE hinstDLL,
IN DWORD dwReason,
IN LPVOID lpv)
/*++
Routine Description:
FileEnum_Entry is called after the C runtime is initialized, and its purpose
is to initialize the globals for this process. For this LIB, it
does nothing.
Arguments:
hinstDLL - (OS-supplied) Instance handle for the DLL
dwReason - (OS-supplied) Type of initialization or termination
lpv - (OS-supplied) Unused
Return Value:
TRUE because DLL always initializes properly.
--*/
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
/*++
Routine Description:
GenerateEnumID maintains a static that is used to generate unique
enumeration handles for callers. The enumeration handle is guaranteed to
be unique for the first 2^32 calls.
Arguments:
none
Return Value:
A DWORD enumeration handle that may be used to identify an exclusion
list.
--*/
DWORD
GenerateEnumID (
void
)
{
static DWORD s_EnumID = 0;
return ++s_EnumID;
}
//
// Build W versions of fileenum APIs
//
#define FILEENUMPROCT FILEENUMPROCW
#define FILEENUMFAILPROCT FILEENUMFAILPROCW
#define PEXCLUDEINFT PEXCLUDEINFW
#define ENUMSTRUCTT ENUMSTRUCTW
#define PENUMSTRUCTT PENUMSTRUCTW
#define EnumerateAllDrivesT EnumerateAllDrivesW
#define EnumerateTreeT EnumerateTreeW
#define EnumTreeEngineT EnumTreeEngineW
#define IsPathExcludedT IsPathExcludedW
#define CreateBitmaskT CreateBitmaskW
#define IsFileExcludedT IsFileExcludedW
#define BuildExclusionsFromInfT BuildExclusionsFromInfW
#define ClearExclusionsT ClearExclusionsW
#define ExcludeFileT ExcludeFileW
#define ExcludePathT ExcludePathW
#include "enumaw.c"