27#define ALL_FILES_PATTERN L"*.*"
77#ifdef EXTENDED_ATTRIBUTES
86#ifdef EXTENDED_ATTRIBUTES
113 dwAttributes = ((pFindData->dwFileAttributes & ~AttribsMasks->dwMask) | AttribsMasks->
dwAttrib);
118#define ENUM_RECURSE 0x01
119#define ENUM_DIRECTORIES 0x02
157 PWSTR findFileName = EnumCtx->findData.cFileName;
158 PWSTR pFilePart = EnumCtx->FullPathBuffer + offFilePart;
159 size_t cchRemaining = EnumCtx->cchBuffer - offFilePart;
175 ConPrintf(
StdErr,
L"Directory level too deep: %s\n", EnumCtx->FullPathBuffer);
179 hFind =
FindFirstFileW(EnumCtx->FullPathBuffer, &EnumCtx->findData);
195 size_t offNewFilePart;
207 if (EnumCtx->uReparseLevel < 2)
208 EnumCtx->uReparseLevel++;
214 NULL, &offNewFilePart, 0,
215 L"%s\\", findFileName);
217 offNewFilePart = EnumCtx->cchBuffer - offNewFilePart;
223 pFilePart = EnumCtx->FullPathBuffer + offFilePart;
224 cchRemaining = EnumCtx->cchBuffer - offFilePart;
228 EnumCtx->uReparseLevel--;
235 hRes =
StringCchCopyW(pFilePart, cchRemaining, EnumCtx->FileName);
238 hFind =
FindFirstFileW(EnumCtx->FullPathBuffer, &EnumCtx->findData);
245 BOOL bExactMatch = (
_wcsicmp(findFileName, EnumCtx->FileName) == 0);
259 EnumCtx->Callback(&EnumCtx->findData, EnumCtx->FullPathBuffer, EnumCtx->Context);
280 EnumContext.
Flags = fFlags;
282 EnumContext.
Context = (AttribsMasks->dwMask == 0 ?
NULL : AttribsMasks);
296 offFilePart = EnumContext.
cchBuffer - offFilePart;
310 DWORD dwEnumFlags = 0;
362 AttribsMasks.
dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;
370 AttribsMasks.
dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;
378 AttribsMasks.
dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;
386 AttribsMasks.
dwAttrib &= ~FILE_ATTRIBUTE_READONLY;
389#ifdef EXTENDED_ATTRIBUTES
395 AttribsMasks.
dwAttrib &= ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
struct _ENUMFILES_CTX ENUMFILES_CTX
static BOOL PrintAttributes(_In_ PWIN32_FIND_DATAW pFindData, _In_ PCWSTR pszFullName, _Inout_opt_ PVOID Context)
Displays attributes for the given file.
struct _ATTRIBS_MASKS ATTRIBS_MASKS
struct _ATTRIBS_MASKS * PATTRIBS_MASKS
BOOL(* PENUMFILES_CALLBACK)(_In_ PWIN32_FIND_DATAW pFindData, _In_ PCWSTR pszFullName, _Inout_opt_ PVOID Context)
static VOID ErrorMessage(_In_ DWORD dwErrorCode, _In_opt_ PCWSTR pszMsg,...)
static BOOL ChangeAttributes(_In_ PWIN32_FIND_DATAW pFindData, _In_ PCWSTR pszFullName, _Inout_opt_ PVOID Context)
Changes attributes for the given file.
static BOOL AttribEnumFiles(_In_ PCWSTR pszPath, _In_ PCWSTR pszFile, _In_ DWORD fFlags, _In_ PATTRIBS_MASKS AttribsMasks)
struct _ENUMFILES_CTX * PENUMFILES_CTX
#define ALL_FILES_PATTERN
static BOOL EnumFilesWorker(_Inout_ PENUMFILES_CTX EnumCtx, _Inout_ size_t offFilePart)
#define STRING_ATTRIB_HELP
#define STRING_ERROR_INVALID_PARAM_FORMAT
#define STRING_CONSOLE_ERROR
#define STRING_FILE_NOT_FOUND
#define ConInitStdStreams()
void ConPrintf(FILE *fp, LPCWSTR psz,...)
void ConResPrintf(FILE *fp, UINT nID,...)
void ConResPuts(FILE *fp, UINT nID)
#define GetCurrentDirectoryW(x, y)
#define INVALID_HANDLE_VALUE
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define ERROR_FILE_NOT_FOUND
#define FILE_ATTRIBUTE_READONLY
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_ATTRIBUTE_DIRECTORY
#define UNREFERENCED_PARAMETER(P)
#define FILE_ATTRIBUTE_REPARSE_POINT
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
INT ConMsgPrintfV(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId, IN va_list *Arguments OPTIONAL)
static WCHAR szFilePath[]
#define INIT_CON_SCREEN(pStream)
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define STRSAFE_E_INSUFFICIENT_BUFFER
WIN32_FIND_DATAW findData
WCHAR FullPathBuffer[MAX_PATH+_countof("\\" ALL_FILES_PATTERN)]
_In_ PENUMFILES_CALLBACK Callback
#define LANG_USER_DEFAULT
WORD WORD PSZ PSZ pszFileName
DWORD WINAPI GetLastError(void)
#define FORMAT_MESSAGE_FROM_SYSTEM
#define ERROR_SHARING_VIOLATION