You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
359 lines
6.5 KiB
359 lines
6.5 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
util.h
|
|
|
|
Abstract:
|
|
|
|
Interface for utility functions
|
|
|
|
Author:
|
|
|
|
Ovidiu Temereanca (ovidiut) 08-Nov-2000
|
|
|
|
Revision History:
|
|
|
|
<alias> <date> <comment>
|
|
|
|
--*/
|
|
|
|
|
|
typedef struct tagGENERIC_LIST {
|
|
struct tagGENERIC_LIST* Next;
|
|
} GENERIC_LIST, *PGENERIC_LIST;
|
|
|
|
typedef struct tagSTRINGLIST {
|
|
struct tagSTRINGLIST* Next;
|
|
PTSTR String;
|
|
} STRINGLIST, *PSTRINGLIST;
|
|
|
|
typedef struct tagSDLIST {
|
|
struct tagSDLIST* Next;
|
|
PTSTR String;
|
|
DWORD_PTR Data;
|
|
} SDLIST, *PSDLIST;
|
|
|
|
|
|
typedef struct {
|
|
PTSTR FileName;
|
|
TCHAR FullPath[MAX_PATH];
|
|
WIN32_FIND_DATA FindData;
|
|
//
|
|
// private data
|
|
//
|
|
HANDLE Handle;
|
|
} FILEPATTERN_ENUM, *PFILEPATTERN_ENUM;
|
|
|
|
|
|
#define ENUM_FIRSTFILE 1
|
|
#define ENUM_NEXTFILE 2
|
|
#define ENUM_SUBDIRS 3
|
|
#define ENUM_SUBDIR 4
|
|
|
|
typedef struct tagFILEENUMLIST {
|
|
struct tagFILEENUMLIST* Next;
|
|
PTSTR Dir;
|
|
DWORD EnumState;
|
|
FILEPATTERN_ENUM Enum;
|
|
} FILEENUMLIST, *PFILEENUMLIST;
|
|
|
|
|
|
#define ECF_ENUM_SUBDIRS 0x0001
|
|
#define ECF_ABORT_ENUM_DIR 0x0002
|
|
#define ECF_STOP_ON_LONG_PATHS 0x0004
|
|
|
|
|
|
typedef struct {
|
|
PTSTR FileName;
|
|
PTSTR SubPath;
|
|
PTSTR FullPath;
|
|
PWIN32_FIND_DATA FindData;
|
|
DWORD ControlFlags;
|
|
//
|
|
// private data
|
|
//
|
|
PCTSTR FilePattern;
|
|
DWORD RootLen;
|
|
PFILEENUMLIST DirCurrent;
|
|
HANDLE Handle;
|
|
} FILEPATTERNREC_ENUM, *PFILEPATTERNREC_ENUM;
|
|
|
|
|
|
|
|
PTSTR
|
|
BuildPathEx (
|
|
IN PTSTR DestPath,
|
|
IN DWORD Chars,
|
|
IN PCTSTR Path1,
|
|
IN PCTSTR Path2
|
|
);
|
|
|
|
#define BuildPath(d,p1,p2) BuildPathEx(d,ARRAYSIZE(d),p1,p2)
|
|
|
|
|
|
PTSTR
|
|
DupString (
|
|
IN PCTSTR String
|
|
);
|
|
|
|
PTSTR
|
|
DupMultiSz (
|
|
IN PCTSTR MultiSz
|
|
);
|
|
|
|
PTSTR
|
|
CreatePrintableString (
|
|
IN PCTSTR MultiSz
|
|
);
|
|
|
|
PWSTR
|
|
AnsiToUnicode (
|
|
IN PCSTR SzAnsi
|
|
);
|
|
|
|
PWSTR
|
|
MultiSzAnsiToUnicode (
|
|
IN PCSTR MultiSzAnsi
|
|
);
|
|
|
|
PSTR
|
|
UnicodeToAnsi (
|
|
IN PCWSTR Unicode
|
|
);
|
|
|
|
BOOL
|
|
EnumFirstFilePattern (
|
|
OUT PFILEPATTERN_ENUM Enum,
|
|
IN PCTSTR Dir,
|
|
IN PCTSTR FilePattern
|
|
);
|
|
|
|
BOOL
|
|
EnumNextFilePattern (
|
|
IN OUT PFILEPATTERN_ENUM Enum
|
|
);
|
|
|
|
VOID
|
|
AbortEnumFilePattern (
|
|
IN OUT PFILEPATTERN_ENUM Enum
|
|
);
|
|
|
|
BOOL
|
|
EnumFirstFilePatternRecursive (
|
|
OUT PFILEPATTERNREC_ENUM Enum,
|
|
IN PCTSTR Dir,
|
|
IN PCTSTR FilePattern,
|
|
IN DWORD ControlFlags
|
|
);
|
|
|
|
BOOL
|
|
EnumNextFilePatternRecursive (
|
|
IN OUT PFILEPATTERNREC_ENUM Enum
|
|
);
|
|
|
|
VOID
|
|
AbortEnumFilePatternRecursive (
|
|
IN OUT PFILEPATTERNREC_ENUM Enum
|
|
);
|
|
|
|
BOOL
|
|
CreateDir (
|
|
IN PCTSTR DirName
|
|
);
|
|
|
|
PSTRINGLIST
|
|
CreateStringCell (
|
|
IN PCTSTR String
|
|
);
|
|
|
|
VOID
|
|
DeleteStringCell (
|
|
IN PSTRINGLIST Cell
|
|
);
|
|
|
|
BOOL
|
|
FindStringCell (
|
|
IN PSTRINGLIST StringList,
|
|
IN PCTSTR String,
|
|
IN BOOL CaseSensitive
|
|
);
|
|
|
|
VOID
|
|
DeleteStringList (
|
|
IN PSTRINGLIST List
|
|
);
|
|
|
|
PFILEENUMLIST
|
|
CreateFileEnumCell (
|
|
IN PCTSTR Dir,
|
|
IN PCTSTR FilePattern,
|
|
IN DWORD Attributes,
|
|
IN DWORD EnumState
|
|
);
|
|
|
|
VOID
|
|
DeleteFileEnumCell (
|
|
IN PFILEENUMLIST Cell
|
|
);
|
|
|
|
BOOL
|
|
InsertList (
|
|
IN OUT PGENERIC_LIST* List,
|
|
IN PGENERIC_LIST NewList
|
|
);
|
|
|
|
VOID
|
|
DeleteFileEnumList (
|
|
IN PFILEENUMLIST NewList
|
|
);
|
|
|
|
PCTSTR
|
|
FindSubString (
|
|
IN PCTSTR String,
|
|
IN TCHAR Separator,
|
|
IN PCTSTR SubStr,
|
|
IN BOOL CaseSensitive
|
|
);
|
|
|
|
VOID
|
|
GetCurrentWinnt32RegKey (
|
|
OUT PTSTR Key,
|
|
IN INT Chars
|
|
);
|
|
|
|
BOOL
|
|
IsFileVersionLesser (
|
|
IN PCTSTR FileToCompare,
|
|
IN PCTSTR FileToCompareWith
|
|
);
|
|
|
|
BOOL
|
|
CopyTree (
|
|
IN PCTSTR SourceRoot,
|
|
IN PCTSTR DestRoot
|
|
);
|
|
|
|
BOOL
|
|
StringToInt (
|
|
IN PCTSTR Field,
|
|
OUT PINT IntegerValue
|
|
);
|
|
|
|
BOOL
|
|
CheckForFileVersionEx (
|
|
LPCTSTR FileName,
|
|
LPCTSTR FileVer, OPTIONAL
|
|
LPCTSTR BinProductVer, OPTIONAL
|
|
LPCTSTR LinkDate OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
GetLinkDate (
|
|
IN PCTSTR FilePath,
|
|
OUT PDWORD LinkDate
|
|
);
|
|
|
|
VOID
|
|
FixMissingKnownDlls (
|
|
OUT PSTRINGLIST* MissingKnownDlls,
|
|
IN PCTSTR RestrictedCheckList OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
UndoFixMissingKnownDlls (
|
|
IN PSTRINGLIST MissingKnownDlls
|
|
);
|
|
|
|
BOOL
|
|
IsPatternMatchA (
|
|
IN PCSTR strPattern,
|
|
IN PCSTR strStr
|
|
);
|
|
|
|
BOOL
|
|
IsPatternMatchW (
|
|
IN PCWSTR wstrPattern,
|
|
IN PCWSTR wstrStr
|
|
);
|
|
|
|
#ifdef UNICODE
|
|
#define IsPatternMatch(pattern,string) IsPatternMatchW(pattern,string)
|
|
#else
|
|
#define IsPatternMatch(pattern,string) IsPatternMatchA(pattern,string)
|
|
#endif
|
|
|
|
|
|
BOOL
|
|
Winnt32GetDiskFreeSpaceNewA(
|
|
IN PCSTR DriveName,
|
|
OUT DWORD * OutSectorsPerCluster,
|
|
OUT DWORD * OutBytesPerSector,
|
|
OUT ULARGE_INTEGER * OutNumberOfFreeClusters,
|
|
OUT ULARGE_INTEGER * OutTotalNumberOfClusters
|
|
);
|
|
|
|
BOOL
|
|
Winnt32GetDiskFreeSpaceNewW(
|
|
IN PCWSTR DriveName,
|
|
OUT DWORD * OutSectorsPerCluster,
|
|
OUT DWORD * OutBytesPerSector,
|
|
OUT ULARGE_INTEGER * OutNumberOfFreeClusters,
|
|
OUT ULARGE_INTEGER * OutTotalNumberOfClusters
|
|
);
|
|
|
|
BOOL
|
|
ReplaceSubStr(
|
|
IN OUT LPTSTR SrcStr,
|
|
IN LPTSTR SrcSubStr,
|
|
IN LPTSTR DestSubStr
|
|
);
|
|
|
|
#ifdef UNICODE
|
|
|
|
#define Winnt32GetDiskFreeSpaceNew Winnt32GetDiskFreeSpaceNewW
|
|
|
|
#else
|
|
|
|
#define Winnt32GetDiskFreeSpaceNew Winnt32GetDiskFreeSpaceNewA
|
|
|
|
#endif
|
|
|
|
VOID
|
|
RemoveTrailingWack (
|
|
PTSTR String
|
|
);
|
|
|
|
ULONGLONG
|
|
SystemTimeToFileTime64 (
|
|
IN PSYSTEMTIME SystemTime
|
|
);
|
|
|
|
DWORD
|
|
MyGetFullPathName (
|
|
IN PCTSTR FileName, // file name
|
|
IN DWORD BufferLength, // size of path buffer
|
|
IN PTSTR Buffer, // path buffer
|
|
OUT PTSTR* FilePart // address of file name in path
|
|
);
|
|
|
|
DWORD
|
|
MyGetModuleFileName (
|
|
IN HMODULE Module,
|
|
OUT PTSTR Buffer,
|
|
IN DWORD BufferLength
|
|
);
|
|
|
|
//
|
|
// Macro to make ansi vs unicode string handling
|
|
// a little easier
|
|
//
|
|
#ifdef UNICODE
|
|
#define NewAnsiString(x) UnicodeToAnsi(x)
|
|
#define NewPortableString(x) AnsiToUnicode(x)
|
|
#else
|
|
#define NewAnsiString(x) DupString(x)
|
|
#define NewPortableString(x) DupString(x)
|
|
#endif
|