146#ifdef INCLUDE_CMD_DIR
243 return ( pszPath[0] ==
_T(
'.') &&
245 (pszPath[1] ==
_T(
'.') && (pszPath[2] == 0 ))
255 return ((
Length == 1 && pPath[0] ==
_T(
'.')) ||
256 (
Length == 2 && pPath[0] ==
_T(
'.') && pPath[1] ==
_T(
'.')));
286 cCurSwitch =
_T(
' ');
293 bOrderByNoPar =
FALSE;
305 if (cCurSwitch ==
_T(
'/'))
310 bNegative = (*
Line ==
_T(
'-'));
316 if ((cCurUChar ==
_T(
'A')) ||(cCurUChar ==
_T(
'T')) || (cCurUChar ==
_T(
'O')))
332 bOrderByNoPar = !bNegative;
340 cCurSwitch = cCurUChar;
348 else if (cCurUChar ==
_T(
'L'))
350 else if (cCurUChar ==
_T(
'B'))
352 else if (cCurUChar ==
_T(
'C'))
354 else if (cCurUChar ==
_T(
'W'))
356 else if (cCurUChar ==
_T(
'D'))
358 else if (cCurUChar ==
_T(
'N'))
360 else if (cCurUChar ==
_T(
'P'))
361 lpFlags->
bPause = ! bNegative;
362 else if (cCurUChar ==
_T(
'Q'))
363 lpFlags->
bUser = ! bNegative;
364 else if (cCurUChar ==
_T(
'S'))
366 else if (cCurUChar ==
_T(
'X'))
368 else if (cCurUChar ==
_T(
'R'))
370 else if (cCurChar ==
_T(
'4'))
371 lpFlags->
b4Digit = ! bNegative;
372 else if (cCurChar ==
_T(
'?'))
390 cCurSwitch =
_T(
' ');
392 else if (cCurSwitch ==
_T(
' '))
397 if (cCurChar ==
_T(
'/'))
398 cCurSwitch =
_T(
'/');
410 bIntoQuotes ^= (*
Line ==
_T(
'"'));
420 temp[ptrEnd - ptrStart] =
_T(
'\0');
442 cCurSwitch =
_T(
' ');
449 if (cCurChar ==
_T(
'-'))
451 else if (cCurUChar ==
_T(
'D'))
455 lpFlags->
stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_DIRECTORY;
459 else if (cCurUChar ==
_T(
'R'))
463 lpFlags->
stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_READONLY;
467 else if (cCurUChar ==
_T(
'H'))
471 lpFlags->
stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_HIDDEN;
475 else if (cCurUChar ==
_T(
'A'))
479 lpFlags->
stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_ARCHIVE;
483 else if (cCurUChar ==
_T(
'S'))
487 lpFlags->
stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_SYSTEM;
498 if (cCurUChar ==
_T(
'C'))
500 else if (cCurUChar ==
_T(
'A'))
502 else if (cCurUChar ==
_T(
'W'))
512 bOrderByNoPar =
FALSE;
514 if (cCurChar ==
_T(
'-'))
516 else if (cCurUChar ==
_T(
'N'))
522 else if (cCurUChar ==
_T(
'S'))
528 else if (cCurUChar ==
_T(
'G'))
534 else if (cCurUChar ==
_T(
'E'))
540 else if (cCurUChar ==
_T(
'D'))
556 if ((cCurChar !=
_T(
'-')) && bPNegative)
620 if (szVolName[0] !=
_T(
'\0'))
744 "GetDiskFreeSpaceExW");
746 "GetDiskFreeSpaceExA");
748 if (pGetFreeDiskSpaceEx !=
NULL)
750 if (pGetFreeDiskSpaceEx(lpRoot, lpFreeSpace, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) !=
FALSE)
761 lpFreeSpace->
QuadPart = dwSecPerCl * dwBytPerSec * dwFreeCl;
783 if (!(ulFiles + ulDirs))
801 DirPrintf(lpFlags, szMsg, ulFiles, szBuffer);
810 DirPrintf(lpFlags, szMsg, ulFiles, szBuffer);
819 DirPrintf(lpFlags, szMsg, ulDirs, szBuffer);
834 return (lastdot !=
NULL ? lastdot + 1 : NoExt);
862 *(
dest + iLen) =
_T(
'\0');
881 TCHAR szShortName[15];
913 szShortName[0] =
_T(
'\0');
915 _stprintf(szShortName,
_T(
" %-12s"), ptrFiles[
i]->stFindInfo.cAlternateFileName);
927 ptrFiles[
i]->stFindInfo.cFileName);
930 ptrCurStream = ptrFiles[
i]->
ptrHead;
942 ptrFiles[
i]->stFindInfo.cFileName,
944 ptrCurStream = ptrCurStream->
ptrNext;
974 for (
i = 0;
i < dwCount;
i++)
982 iLongestName =
max(iLongestName, cxWidth);
987 iColumns = (
USHORT)(iScreenWidth / iLongestName);
990 if (((iLongestName * iColumns) + iColumns) >= (
UINT)iScreenWidth)
994 if (!iColumns) iColumns = 1;
997 iLines = (
USHORT)((dwCount + iColumns - 1) / iColumns);
1001 for (
j = 0;
j < iColumns;
j++)
1011 temp = (
i * iColumns) +
j;
1014 if (
temp >= dwCount)
break;
1017 _stprintf(szTempFname,
_T(
"[%s]"), ptrFiles[
temp]->stFindInfo.cFileName);
1019 _stprintf(szTempFname,
_T(
"%s"), ptrFiles[
temp]->stFindInfo.cFileName);
1025 DirPrintf(lpFlags,
_T(
"%s%*s"), szTempFname, iLongestName + 1 - cxWidth,
_T(
""));
1029 DirPrintf(lpFlags,
_T(
"%-*s"), iLongestName + 1, szTempFname);
1061 if (*ptrFiles[
i]->stFindInfo.cAlternateFileName )
1065 _tcscpy(szExt,
getExt( ptrFiles[
i]->stFindInfo.cAlternateFileName));
1127 DirPrintf(lpFlags,
_T(
"%s\\%s\n"), szCurPath, ptrFiles[
i]->stFindInfo.cFileName);
1132 DirPrintf(lpFlags,
_T(
"%s\n"), ptrFiles[
i]->stFindInfo.cFileName);
1154 if (
_tcslen(szTemp) == 2 && szTemp[1] ==
_T(
':'))
1210 for (
i = 0;
i < lpFlags->
stOrderBy.sCriteriaCount;
i++)
1288 if (iComp != 0)
break;
1311 int First =
i, Last =
j, Temp;
1318 lpTemp = ptrArray[
i];
1319 ptrArray[
i]= ptrArray[
j];
1320 ptrArray[
j] = lpTemp;
1344 while (ptrStartNode)
1346 ptrNextNode = ptrStartNode->
ptrNext;
1354 ptrStartNode = ptrNextNode;
1384 WIN32_FIND_STREAM_DATA wfsdStreamInfo;
1390 ptrStartNode =
NULL;
1399 if (ptrStartNode ==
NULL)
1401 WARN(
"Cannot allocate memory for ptrStartNode!\n");
1405 ptrNextNode = ptrStartNode;
1413 if ((wfdFileInfo.dwFileAttributes & lpFlags->
stAttribs.dwAttribMask) ==
1419 WARN(
"Cannot allocate memory for ptrNextNode->ptrNext!\n");
1433 _tcslwr(ptrNextNode->
ptrNext->stInfo.stFindInfo.cAlternateFileName);
1443 if (!pFindFirstStreamW)
1450 if (pFindFirstStreamW && pFindNextStreamW)
1452 hStreams = pFindFirstStreamW(wfdFileInfo.cFileName, FindStreamInfoStandard, &wfsdStreamInfo, 0);
1457 ERR(
"FindFirstStreamW not supported!\n");
1463 ptrCurNode = &ptrNextNode->
ptrNext->stInfo.ptrHead;
1464 while (pFindNextStreamW(hStreams, &wfsdStreamInfo))
1467 if (*ptrCurNode ==
NULL)
1469 WARN(
"Cannot allocate memory for *ptrCurNode!\n");
1476 memcpy(&(*ptrCurNode)->stStreamInfo, &wfsdStreamInfo,
1477 sizeof(WIN32_FIND_STREAM_DATA));
1482 _tcslwr((*ptrCurNode)->stStreamInfo.cStreamName);
1485 ptrCurNode = &(*ptrCurNode)->
ptrNext;
1494 ptrNextNode = ptrNextNode->
ptrNext;
1507 u64Temp.
HighPart = wfdFileInfo.nFileSizeHigh;
1508 u64Temp.
LowPart = wfdFileInfo.nFileSizeLow;
1521 if (ptrFileArray ==
NULL)
1523 WARN(
"Cannot allocate memory for ptrFileArray!\n");
1532 ptrNextNode = ptrStartNode;
1536 ptrFileArray[dwCount] = &ptrNextNode->
ptrNext->stInfo;
1537 ptrNextNode = ptrNextNode->
ptrNext;
1542 if (lpFlags->
stOrderBy.sCriteriaCount > 0)
1543 QsortFiles(ptrFileArray, 0, dwCount-1, lpFlags);
1546 cPathSep = pszFilePart[-1];
1547 pszFilePart[-1] =
_T(
'\0');
1559 pszFilePart[-1] = cPathSep;
1583 memcpy(szSubPath, szFullPath, (pszFilePart - szFullPath) *
sizeof(
TCHAR));
1584 _tcscpy(&szSubPath[pszFilePart - szFullPath],
_T(
"*.*"));
1596 memcpy(szSubPath, szFullPath, (pszFilePart - szFullPath) *
sizeof(
TCHAR));
1597 _tcscpy(&szSubPath[pszFilePart - szFullPath], wfdFileInfo.cFileName);
1599 pszSubFilePart = &szSubPath[
_tcslen(szSubPath)];
1600 _tcscat(pszSubFilePart, pszFilePart);
1603 if (
DirList(szSubPath, pszSubFilePart, lpFlags) != 0)
1659 _tcscpy(szNewPattern, pszPattern);
1660 pszPattern = szNewPattern;
1662 TRACE(
"Original pszPattern: %S\n", pszPattern);
1665 pNextDir = pszPattern;
1666 while ((pNextDir =
_tcschr(pNextDir,
_T(
'/'))))
1667 *pNextDir++ =
_T(
'\\');
1679 pNextDir = pszPattern;
1690 if ((pNextDir - pCurDir == 0) ||
IsDotDirectoryN(pCurDir, pNextDir - pCurDir))
1698 for (
ptr = pCurDir;
ptr < pNextDir; ++
ptr)
1700 if (*
ptr !=
_T(
'.'))
1716 if (
ptr[0] ==
_T(
'.') && (
ptr[1] ==
_T(
'\\') ||
ptr[1] == 0))
1721 else if (
ptr[0] ==
_T(
'.') &&
ptr[1] ==
_T(
'.') && (
ptr[2] ==
_T(
'\\') ||
ptr[2] == 0))
1743 TRACE(
"New pszPattern: %S\n", pszPattern);
1748 _tcscpy(pszFullPath, pszPattern);
1749 pszPatternPart =
NULL;
1752 TRACE(
"pszFullPath (1): %S\n", pszFullPath);
1753 TRACE(
"pszPatternPart (1): %S\n", pszPatternPart);
1770 pNextDir = pszPattern;
1781 if (
_istalpha(pNextDir[0]) && pNextDir[1] ==
_T(
':') && pNextDir[2] !=
_T(
'\\'))
1788 else if (pszPatternPart ==
NULL)
1795 pszPatternPart = &pszFullPath[
_tcslen(pszFullPath)];
1796 _tcscpy(pszPatternPart, pNextDir);
1797 pszPatternPart =
NULL;
1800 else if (
_tcscmp(pNextDir, pszPatternPart) != 0)
1807 TRACE(
"pszPatternPart: %S is DIFFERENT from file criterion: %S\n", pszPatternPart, pNextDir);
1813 _tcscpy(pszPatternPart, pNextDir);
1817 TRACE(
"pszFullPath (2): %S\n", pszFullPath);
1825 pszPatternPart = &pszFullPath[
_tcslen(pszFullPath)];
1826 if (pszPatternPart[-1] !=
_T(
'\\'))
1827 *pszPatternPart++ =
_T(
'\\');
1831 TRACE(
"pszPatternPart (2): %S\n", pszPatternPart);
1833 if (ppszPatternPart)
1834 *ppszPatternPart = pszPatternPart;
1904 prev_volume[0] =
_T(
'\0');
1910 for (loop = 0; loop < (
UINT)entries; loop++)
1946 ChangedVolume =
TRUE;
1951 if (!
_tcscmp(szFullPath, prev_volume))
1952 ChangedVolume =
FALSE;
1954 _tcscpy(prev_volume, szFullPath);
1961 cPathSep = pszFilePart[-1];
1962 pszFilePart[-1] =
_T(
'\0');
1969 pszFilePart[-1] = cPathSep;
1972 if (
DirList(szFullPath, pszFilePart, &stFlags) != 0)
1979 pszFilePart[-1] =
_T(
'\0');
#define RC_STRING_MAX_SIZE
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeparator)
VOID error_parameter_format(TCHAR ch)
VOID error_file_not_found(VOID)
VOID error_invalid_switch(TCHAR ch)
VOID ConOutResPaging(BOOL StartPaging, UINT resID)
VOID GetScreenSize(PSHORT maxx, PSHORT maxy)
BOOL ConPrintfVPaging(PCON_PAGER Pager, BOOL StartPaging, LPWSTR szFormat, va_list arg_ptr)
BOOL __cdecl ConOutPrintfPaging(BOOL StartPaging, LPWSTR szFormat,...)
static VOID DirHelp(VOID)
struct _DirSwitchesFlags DIRSWITCHFLAGS
BOOL(WINAPI * PGETFREEDISKSPACEEX)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER)
static INT PrintSummary(LPCTSTR szPath, ULONG ulFiles, ULONG ulDirs, ULONGLONG u64Bytes, LPDIRSWITCHFLAGS lpFlags, BOOL TotalSummary)
INT FormatTime(TCHAR *lpTime, LPSYSTEMTIME dt)
static VOID DirPrintNewList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
static ULONG recurse_dir_cnt
static VOID DirPrintOldList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
static VOID DirPrintWideList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
struct _DIRFINDLISTNODE * PDIRFINDLISTNODE
static LPTSTR getName(const TCHAR *file, TCHAR *dest)
INT CommandDir(LPTSTR rest)
static INT DirList(IN OUT LPTSTR szFullPath, IN LPTSTR pszFilePart, LPDIRSWITCHFLAGS lpFlags)
static ULONGLONG recurse_bytes
struct _DIRFINDSTREAMNODE * PDIRFINDSTREAMNODE
static BOOL DirReadParam(LPTSTR Line, LPTSTR **params, LPINT entries, LPDIRSWITCHFLAGS lpFlags)
static VOID DirNodeCleanup(PDIRFINDLISTNODE ptrStartNode, PDWORD pdwCount)
FORCEINLINE BOOL IsDotDirectory(IN LPCTSTR pszPath)
struct _DIRFINDINFO * PDIRFINDINFO
struct _DirSwitchesFlags * LPDIRSWITCHFLAGS
INT FormatDate(TCHAR *lpDate, LPSYSTEMTIME dt, BOOL b4Digit)
static VOID ResolvePattern(IN LPTSTR pszPattern, IN DWORD nBufferLength, OUT LPTSTR pszFullPath, OUT LPTSTR *ppszPatternPart OPTIONAL)
FORCEINLINE BOOL IsDotDirectoryN(IN const TCHAR *pPath, IN SIZE_T Length)
static BOOL CompareFiles(PDIRFINDINFO lpFile1, PDIRFINDINFO lpFile2, LPDIRSWITCHFLAGS lpFlags)
static BOOL PrintDirectoryHeader(LPCTSTR szPath, LPDIRSWITCHFLAGS lpFlags)
struct _DIRFINDLISTNODE DIRFINDLISTNODE
static VOID QsortFiles(PDIRFINDINFO ptrArray[], int i, int j, LPDIRSWITCHFLAGS lpFlags)
static VOID DirPrintFileDateTime(TCHAR *lpDate, TCHAR *lpTime, LPWIN32_FIND_DATA lpFile, LPDIRSWITCHFLAGS lpFlags)
static VOID DirPrintFiles(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
TCHAR * getExt(const TCHAR *file)
static VOID GetUserDiskFreeSpace(LPCTSTR lpRoot, PULARGE_INTEGER lpFreeSpace)
struct _DIRFINDSTREAMNODE DIRFINDSTREAMNODE
static ULONG recurse_file_cnt
static BOOL DirPrintf(LPDIRSWITCHFLAGS lpFlags, LPTSTR szFormat,...)
static VOID DirPrintBareList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
struct _DIRFINDINFO DIRFINDINFO
#define IsCJKCodePage(CodePage)
static VOID StripQuotes(LPSTR in)
static VOID freep(LPSTR *p)
BOOL add_entry(LPINT ac, LPSTR **arg, LPCSTR entry)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
static void cleanup(void)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
GLenum const GLfloat * params
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
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 GLint GLint j
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
struct _ULARGE_INTEGER * PULARGE_INTEGER
unsigned __int3264 UINT_PTR
#define FILE_ATTRIBUTE_READONLY
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_ATTRIBUTE_DIRECTORY
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define FILE_ATTRIBUTE_REPARSE_POINT
INT ConPrintfV(IN PCON_STREAM Stream, IN PCWSTR szStr, IN va_list args)
static const WCHAR szName[]
BOOL IsExistingDirectory(IN LPCTSTR pszPath)
PULONG MinorVersion OPTIONAL
WIN32_FIND_DATA stFindInfo
PDIRFINDSTREAMNODE ptrHead
struct _DIRFINDLISTNODE * ptrNext
struct _DIRFINDSTREAMNODE * ptrNext
WIN32_FIND_STREAM_DATA stStreamInfo
enum ETimeField eTimeField
enum EOrderBy eCriteria[3]
struct _DirSwitchesFlags::@66 stOrderBy
struct _DirSwitchesFlags::@65 stAttribs
struct _DirSwitchesFlags::@67 stTimeField
#define GetEnvironmentVariable
#define GetVolumeInformation
#define GetVolumePathName
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD nBufferLength