|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
file.h
Abstract:
Declares interfaces for routines that simplify access to the file system. These include:
- Dealing with short/long file names on both Win9x and NT in a single binary - Checking for file existance - Forcing creation of a path - Packing files on a floppy (for research and data gathering purposes) - WriteFileString wrapper to simplify WriteFile of a string
Author:
Jim Schmidt (jimschm) 13-Feb-1997
Revision History:
jimschm 21-Jan-1999 Centralized cmd line parser marcw 15-May-1998 Packed file enum
--*/
#pragma once
#define INVALID_ATTRIBUTES 0xffffffff
BOOL IsPathLengthOkA ( IN PCSTR FileSpec );
BOOL IsPathLengthOkW ( IN PCWSTR FileSpec );
BOOL OurGetLongPathNameA ( IN PCSTR ShortPath, OUT PSTR Buffer, IN INT BufferSizeInBytes );
BOOL OurGetLongPathNameW ( IN PCWSTR ShortPath, OUT PWSTR Buffer, IN INT BufferSizeInChars );
DWORD OurGetShortPathNameW ( PCWSTR LongPath, PWSTR ShortPath, DWORD Size );
#define OurGetShortPathNameA GetShortPathNameA
DWORD OurGetFullPathNameW ( PCWSTR FileName, DWORD Size, PWSTR FullPath, PWSTR *FilePtr );
#define OurGetFullPathNameA GetFullPathNameA
BOOL CopyFileSpecToLongA( IN PCSTR FullFileSpecIn, OUT PSTR OutPath );
BOOL CopyFileSpecToLongW( IN PCWSTR FullFileSpecIn, OUT PWSTR OutPath );
BOOL DoesFileExistExA( IN PCSTR Path, OUT PWIN32_FIND_DATAA FindData OPTIONAL );
#define DoesFileExistA(x) DoesFileExistExA (x, NULL)
BOOL DoesFileExistExW( IN PCWSTR Path, OUT PWIN32_FIND_DATAW FindData OPTIONAL );
#define DoesFileExistW(x) DoesFileExistExW (x, NULL)
DWORD MakeSurePathExistsA( IN LPCSTR szPath, IN BOOL PathOnly );
DWORD MakeSurePathExistsW( IN LPCWSTR szPath, IN BOOL PathOnly );
typedef struct tagPACKFILEENUMA {
CHAR Identifier[MAX_MBCHAR_PATH]; DWORD SizeLow; DWORD SizeHigh; HANDLE Handle;
} PACKFILEENUMA, *PPACKFILEENUMA, PACKFILEENUMW, *PPACKFILEENUMW;
BOOL PackedFile_AddFileA ( IN PCSTR PackFile, IN PCSTR NewFile, IN PCSTR Identifier OPTIONAL );
BOOL PackedFile_ExtractFileA ( IN PCSTR PackFile, IN PCSTR FileIdentifier, IN PCSTR FileName OPTIONAL );
BOOL PackedFile_EnumFirstA ( IN PCSTR PackFile, OUT PPACKFILEENUMA Enum );
BOOL PackedFile_EnumNextA ( IN PPACKFILEENUMA Enum );
VOID PackedFile_AbortEnum ( IN OUT PPACKFILEENUMA Enum );
BOOL PackedFile_ExtractFileUsingEnumA ( IN PPACKFILEENUMA Enum, IN PCSTR FileName OPTIONAL );
//
// The W versions of these functions are not functional...unimplemented.
//
BOOL PackedFile_AddFileW ( IN PCSTR PackFile, IN PCSTR NewFile, IN PCSTR Identifier OPTIONAL );
BOOL PackedFile_ExtractFileW ( IN PCSTR PackFile, IN PCSTR FileIdentifier, IN PCSTR FileName OPTIONAL );
BOOL PackedFile_EnumFirstW ( IN PCSTR PackFile, OUT PPACKFILEENUMA Enum );
BOOL PackedFile_EnumNextW ( IN PPACKFILEENUMA Enum );
BOOL PackedFile_ExtractFileUsingEnumW ( IN PPACKFILEENUMA Enum, IN PCSTR FileName OPTIONAL );
BOOL WriteFileStringA ( IN HANDLE File, IN PCSTR String );
BOOL WriteFileStringW ( IN HANDLE File, IN PCWSTR String );
typedef struct { HANDLE FindHandle; WIN32_FIND_DATAA FindData; PSTR SavedEndOfFileBuffer; PSTR SavedEndOfPattern; } FIND_DATAA, *PFIND_DATAA;
typedef struct { HANDLE FindHandle; WIN32_FIND_DATAW FindData; PWSTR SavedEndOfFileBuffer; PWSTR SavedEndOfPattern; } FIND_DATAW, *PFIND_DATAW;
#define FILE_ENUM_ALL_LEVELS 0
#define FILE_ENUM_THIS_LEVEL 1
typedef enum { TREE_ENUM_INIT, TREE_ENUM_BEGIN, TREE_ENUM_FILES_BEGIN, TREE_ENUM_RETURN_ITEM, TREE_ENUM_FILES_NEXT, TREE_ENUM_DIRS_BEGIN, TREE_ENUM_DIRS_NEXT, TREE_ENUM_DIRS_FILTER, TREE_ENUM_PUSH, TREE_ENUM_POP, TREE_ENUM_DONE, TREE_ENUM_FAILED, TREE_ENUM_CLEANED_UP } TREE_ENUM_STATE;
typedef struct { //
// Enumerated items
//
PCSTR Name; PCSTR SubPath; PCSTR FullPath; PWIN32_FIND_DATAA FindData; BOOL Directory; UINT Level; UINT MaxLevel;
//
// Enumeration state -- private
//
BOOL EnumDirsFirst; BOOL EnumDepthFirst; CHAR RootPath[MAX_MBCHAR_PATH]; UINT RootPathSize; CHAR Pattern[MAX_MBCHAR_PATH]; PSTR EndOfPattern; CHAR FilePattern[MAX_MBCHAR_PATH]; UINT FilePatternSize; CHAR FileBuffer[MAX_MBCHAR_PATH]; PSTR EndOfFileBuffer; TREE_ENUM_STATE State; GROWBUFFER FindDataArray; PFIND_DATAA Current; } TREE_ENUMA, *PTREE_ENUMA;
typedef struct { //
// Enumerated items
//
PCWSTR Name; PCWSTR SubPath; PCWSTR FullPath; PWIN32_FIND_DATAW FindData; BOOL Directory; UINT Level; UINT MaxLevel;
//
// Enumeration state -- private
//
BOOL EnumDirsFirst; BOOL EnumDepthFirst; WCHAR RootPath[MAX_PATH * 2]; UINT RootPathSize; WCHAR Pattern[MAX_PATH * 2]; PWSTR EndOfPattern; WCHAR FilePattern[MAX_PATH * 2]; UINT FilePatternSize; WCHAR FileBuffer[MAX_PATH * 2]; PWSTR EndOfFileBuffer; TREE_ENUM_STATE State; GROWBUFFER FindDataArray; PFIND_DATAW Current; } TREE_ENUMW, *PTREE_ENUMW;
BOOL EnumFirstFileInTreeExA ( OUT PTREE_ENUMA EnumPtr, IN PCSTR RootPath, IN PCSTR FilePattern, OPTIONAL IN BOOL EnumDirsFirst, IN BOOL EnumDepthFirst, IN INT MaxLevel );
BOOL EnumNextFileInTreeA ( IN OUT PTREE_ENUMA EnumPtr );
VOID AbortEnumFileInTreeA ( IN OUT PTREE_ENUMA EnumPtr );
#define EnumFirstFileInTreeA(ptr, path, pattern, dirfirst) EnumFirstFileInTreeExA((ptr), (path), (pattern), (dirfirst), FALSE, FILE_ENUM_ALL_LEVELS)
BOOL EnumFirstFileInTreeExW ( OUT PTREE_ENUMW EnumPtr, IN PCWSTR RootPath, IN PCWSTR FilePattern, OPTIONAL IN BOOL EnumDirsFirst, IN BOOL EnumDepthFirst, IN INT MaxLevel );
BOOL EnumNextFileInTreeW ( IN OUT PTREE_ENUMW EnumPtr );
VOID AbortEnumFileInTreeW ( IN OUT PTREE_ENUMW EnumPtr );
#define EnumFirstFileInTreeW(ptr, path, pattern, dirfirst) EnumFirstFileInTreeExW((ptr), (path), (pattern), (dirfirst), FALSE, FILE_ENUM_ALL_LEVELS)
VOID AbortEnumCurrentDirA ( IN OUT PTREE_ENUMA EnumPtr );
VOID AbortEnumCurrentDirW ( IN OUT PTREE_ENUMW EnumPtr );
typedef struct { PCSTR FileName; PCSTR FullPath; BOOL Directory;
HANDLE Handle; CHAR RootPath[MAX_MBCHAR_PATH]; PSTR EndOfRoot; HANDLE Enum; WIN32_FIND_DATAA fd; } FILE_ENUMA, *PFILE_ENUMA;
typedef struct { PCWSTR FileName; PCWSTR FullPath; BOOL Directory;
HANDLE Handle; WCHAR RootPath[MAX_WCHAR_PATH]; PWSTR EndOfRoot; HANDLE Enum; WIN32_FIND_DATAW fd; } FILE_ENUMW, *PFILE_ENUMW;
BOOL EnumFirstFileA ( OUT PFILE_ENUMA EnumPtr, IN PCSTR RootPath, IN PCSTR FilePattern OPTIONAL );
BOOL EnumFirstFileW ( OUT PFILE_ENUMW EnumPtr, IN PCWSTR RootPath, IN PCWSTR FilePattern OPTIONAL );
BOOL EnumNextFileA ( IN OUT PFILE_ENUMA EnumPtr );
BOOL EnumNextFileW ( IN OUT PFILE_ENUMW EnumPtr );
VOID AbortFileEnumA ( IN OUT PFILE_ENUMA EnumPtr );
VOID AbortFileEnumW ( IN OUT PFILE_ENUMW EnumPtr );
BOOL ExtractIconImageFromFileA ( IN PCSTR ModuleContainingIcon, IN PCSTR GroupIconId, // OPTIONAL if file is an ICO file
IN OUT PGROWBUFFER Buffer );
BOOL ExtractIconImageFromFileW ( IN PCWSTR ModuleContainingIcon, IN PCWSTR GroupIconId, // OPTIONAL if file is an ICO file
IN OUT PGROWBUFFER Buffer );
BOOL ExtractIconImageFromFileExA ( IN PCSTR ModuleContainingIcon, IN PCSTR GroupIconId, IN OUT PGROWBUFFER Buffer, IN HANDLE IcoFileHandle, OPTIONAL IN HANDLE PeModuleHandle, OPTIONAL IN HANDLE NeModuleHandle OPTIONAL );
BOOL ExtractIconImageFromFileExW ( IN PCWSTR ModuleContainingIcon, IN PCWSTR GroupIconId, IN OUT PGROWBUFFER Buffer, IN HANDLE IcoFileHandle, OPTIONAL IN HANDLE PeModuleHandle, OPTIONAL IN HANDLE NeModuleHandle OPTIONAL );
BOOL WriteIconImageArrayToIcoFileA ( IN PCSTR DestinationFile, IN PGROWBUFFER Buffer );
BOOL WriteIconImageArrayToIcoFileW ( IN PCWSTR DestinationFile, IN PGROWBUFFER Buffer );
BOOL WriteIconImageArrayToPeFileA ( IN PCSTR DestinationFile, IN PGROWBUFFER Buffer, IN PCSTR GroupIconId );
BOOL WriteIconImageArrayToPeFileW ( IN PCWSTR DestinationFile, IN PGROWBUFFER Buffer, IN PCWSTR GroupIconId );
BOOL WriteIconImageArrayToPeFileExA ( IN PCSTR DestinationFile, IN PGROWBUFFER IconImageArray, IN PCSTR GroupIconId, IN PWORD NextIconId, OPTIONAL IN HANDLE UpdateHandle );
BOOL WriteIconImageArrayToPeFileExW ( IN PCWSTR DestinationFile, IN PGROWBUFFER IconImageArray, IN PCWSTR GroupIconId, IN PWORD NextIconId, OPTIONAL IN HANDLE UpdateHandle );
BOOL WriteIconImageArrayToIcoFileEx ( IN PGROWBUFFER Buffer, IN HANDLE File );
PCSTR ExtractIconNamesFromFileA ( IN PCSTR ModuleContainingIcons, IN OUT PGROWBUFFER NameBuf );
PCWSTR ExtractIconNamesFromFileW ( IN PCWSTR ModuleContainingIcons, IN OUT PGROWBUFFER NameBuf );
PCSTR ExtractIconNamesFromFileExA ( IN PCSTR ModuleContainingIcons, IN OUT PGROWBUFFER NameBuf, IN HANDLE Module, IN HANDLE Module16 );
PCWSTR ExtractIconNamesFromFileExW ( IN PCWSTR ModuleContainingIcons, IN OUT PGROWBUFFER NameBuf, IN HANDLE Module, IN HANDLE Module16 );
BOOL IsFileAnIcoA ( IN PCSTR FileInQuestion );
BOOL IsFileAnIcoW ( IN PCWSTR FileInQuestion );
typedef struct { WORD GroupId; WORD IconId; GROWBUFFER IconImages; GROWBUFFER IconList; CHAR DestFile[MAX_MBCHAR_PATH]; HANDLE Module; HANDLE Module16; CHAR ModuleName[MAX_MBCHAR_PATH]; HANDLE IcoFile; CHAR IcoFileName[MAX_MBCHAR_PATH]; HANDLE Update; CHAR IconImageFileName[MAX_MBCHAR_PATH]; HANDLE IconImageFile; BOOL SaveMode; BOOL Error; } ICON_EXTRACT_CONTEXTA, *PICON_EXTRACT_CONTEXTA;
typedef struct { WORD GroupId; WORD IconId; GROWBUFFER IconImages; GROWBUFFER IconList; WCHAR DestFile[MAX_WCHAR_PATH]; HANDLE Module; HANDLE Module16; WCHAR ModuleName[MAX_WCHAR_PATH]; HANDLE IcoFile; WCHAR IcoFileName[MAX_WCHAR_PATH]; HANDLE Update; WCHAR IconImageFileName[MAX_WCHAR_PATH]; HANDLE IconImageFile; BOOL SaveMode; BOOL Error; } ICON_EXTRACT_CONTEXTW, *PICON_EXTRACT_CONTEXTW;
BOOL BeginIconExtractionA ( OUT PICON_EXTRACT_CONTEXTA Context, IN PCSTR DestFile OPTIONAL );
BOOL BeginIconExtractionW ( OUT PICON_EXTRACT_CONTEXTW Context, IN PCWSTR DestFile OPTIONAL );
BOOL OpenIconImageFileA ( IN OUT PICON_EXTRACT_CONTEXTA Context, IN PCSTR FileName, IN BOOL SaveMode );
BOOL OpenIconImageFileW ( IN OUT PICON_EXTRACT_CONTEXTW Context, IN PCWSTR FileName, IN BOOL SaveMode );
BOOL CopyIconA ( IN OUT PICON_EXTRACT_CONTEXTA Context, IN PCSTR FileContainingIcon, OPTIONAL IN PCSTR IconId, OPTIONAL IN INT IconIndex OPTIONAL );
BOOL CopyIconW ( IN OUT PICON_EXTRACT_CONTEXTW Context, IN PCWSTR FileContainingIcon, OPTIONAL IN PCWSTR IconId, OPTIONAL IN INT IconIndex OPTIONAL );
BOOL CopyAllIconsA ( IN OUT PICON_EXTRACT_CONTEXTA Context, IN PCSTR FileContainingIcons );
BOOL CopyAllIconsW ( IN OUT PICON_EXTRACT_CONTEXTW Context, IN PCWSTR FileContainingIcons );
BOOL EndIconExtractionA ( IN OUT PICON_EXTRACT_CONTEXTA Context );
BOOL EndIconExtractionW ( IN OUT PICON_EXTRACT_CONTEXTW Context );
//
// New Executable resource access
//
HANDLE OpenNeFileA ( PCSTR FileName );
HANDLE OpenNeFileW ( PCWSTR FileName );
VOID CloseNeFile ( HANDLE Handle );
//
// Once upon a time ENUMRESTYPEPROC was defined as a TCHAR prototype,
// which was broken. If ENUMRESTYPEPROCA isn't defined, we'll define
// it. (NOTE: The current winbase.h has these typedefs.)
//
#ifndef ENUMRESTYPEPROCA
#if 0
typedef BOOL (CALLBACK* ENUMRESTYPEPROCA)(HMODULE hModule, PCSTR lpType, LONG_PTR lParam);
typedef BOOL (CALLBACK* ENUMRESTYPEPROCW)(HMODULE hModule, PCWSTR lpType, LONG_PTR lParam);
#endif
//
// to be consistent with winbase.h, the second arg is non-const. But that's
// actually a bug in winbase.h.
//
typedef BOOL (CALLBACK* ENUMRESTYPEPROCA)(HMODULE hModule, PSTR lpType, LONG_PTR lParam);
typedef BOOL (CALLBACK* ENUMRESTYPEPROCW)(HMODULE hModule, PWSTR lpType, LONG_PTR lParam);
//
// These two prototypes are OK
//
typedef BOOL (CALLBACK* ENUMRESNAMEPROCA)(HMODULE hModule, PCSTR lpType, PSTR lpName, LONG_PTR lParam);
typedef BOOL (CALLBACK* ENUMRESNAMEPROCW)(HMODULE hModule, PCWSTR lpType, PWSTR lpName, LONG_PTR lParam);
#endif
BOOL EnumNeResourceTypesA ( IN HANDLE Handle, IN ENUMRESTYPEPROCA EnumFunc, IN LONG lParam );
BOOL EnumNeResourceTypesW ( IN HANDLE Handle, IN ENUMRESTYPEPROCW EnumFunc, IN LONG lParam );
BOOL EnumNeResourceNamesA ( IN HANDLE Handle, IN PCSTR Type, IN ENUMRESNAMEPROCA EnumFunc, IN LONG lParam );
BOOL EnumNeResourceNamesW ( IN HANDLE Handle, IN PCWSTR Type, IN ENUMRESNAMEPROCW EnumFunc, IN LONG lParam );
DWORD SizeofNeResourceA ( IN HANDLE Handle, IN PCSTR Type, IN PCSTR Name );
DWORD SizeofNeResourceW ( IN HANDLE Handle, IN PCWSTR Type, IN PCWSTR Name );
PBYTE FindNeResourceExA ( IN HANDLE Handle, IN PCSTR Type, IN PCSTR Name );
PBYTE FindNeResourceExW ( IN HANDLE Handle, IN PCWSTR Type, IN PCWSTR Name );
#define FindNeResourceA(h,n,t) FindNeResourceExA(h,t,n)
#define FindNeResourceW(h,n,t) FindNeResourceExW(h,t,n)
#pragma pack(push, 1)
#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ
#define IMAGE_NE_SIGNATURE 0x454E // NE
#define IMAGE_PE_SIGNATURE 0x00004550l // PE00
typedef struct _DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} DOS_HEADER, *PDOS_HEADER;
typedef struct { WORD Signature; // 00h
BYTE LinkerVersion; // 02h
BYTE LinkerRevision; // 03h
WORD OffsetToEntryTable; // 04h
WORD LengthOfEntryTable; // 06h
DWORD Reserved; // 08h
WORD Flags; // 0ch
WORD AutoDataSegment; // 0eh
WORD LocalHeapSize; // 10h
WORD StackSize; // 12h
DWORD EntryAddress; // 14h
DWORD StackAddress; // 18h
WORD SegmentTableEntries; // 1ch
WORD ModuleReferenceTableEntries; // 1eh
WORD NonResidentTableSize; // 20h
WORD OffsetToSegmentTable; // 22h
WORD OffsetToResourceTable; // 24h
WORD OffsetToResidentNameTable; // 26h
WORD OffsetToModuleReferenceTable; // 28h
WORD OffsetToImportedNameTable; // 2ah
WORD OffsetToNonResidentNameTable; // 2ch
WORD Unused; // 2eh
WORD MovableEntryPoints; // 30h
WORD LogicalSectorShiftCount; // 32h
WORD ResourceSegments; // 34h
BYTE TargetOS; // 36h
BYTE AdditionalFlags; // 37h
WORD FastLoadOffset; // 38h
WORD SectorsInFastLoad; // 3ah
WORD Reserved2; // 3ch
WORD WindowsVersion; // 3eh
} NE_INFO_BLOCK, *PNE_INFO_BLOCK;
typedef struct { WORD Offset; WORD Length; WORD Flags; WORD Id; WORD Handle; WORD Usage; } NE_RES_NAMEINFO, *PNE_RES_NAMEINFO;
typedef struct { WORD TypeId; WORD ResourceCount; DWORD Reserved; NE_RES_NAMEINFO NameInfo[]; } NE_RES_TYPEINFO, *PNE_RES_TYPEINFO;
#pragma pack(pop)
typedef struct { WORD AlignShift; GROWLIST TypeInfoArray; GROWLIST ResourceNames; } NE_RESOURCES, *PNE_RESOURCES;
BOOL LoadNeHeader ( IN HANDLE File, OUT PNE_INFO_BLOCK Header );
BOOL LoadNeResources ( IN HANDLE File, OUT PNE_RESOURCES Resources );
VOID FreeNeResources ( PNE_RESOURCES Resources );
BOOL LoadNeIconFromFileA ( PCSTR FileName, INT IconIndex );
PVOID MapFileIntoMemoryExA ( IN PCSTR FileName, OUT PHANDLE FileHandle, OUT PHANDLE MapHandle, IN BOOL WriteAccess );
PVOID MapFileIntoMemoryExW ( IN PCWSTR FileName, OUT PHANDLE FileHandle, OUT PHANDLE MapHandle, IN BOOL WriteAccess );
#define MapFileIntoMemoryA(FileName,FileHandle,MapHandle) MapFileIntoMemoryExA(FileName,FileHandle,MapHandle,FALSE)
#define MapFileIntoMemoryW(FileName,FileHandle,MapHandle) MapFileIntoMemoryExW(FileName,FileHandle,MapHandle,FALSE)
BOOL UnmapFile ( IN PVOID FileImage, IN HANDLE MapHandle, IN HANDLE FileHandle );
BOOL RemoveCompleteDirectoryA ( IN PCSTR Dir );
BOOL RemoveCompleteDirectoryW ( IN PCWSTR Dir );
typedef struct { PCSTR OriginalArg; PCSTR CleanedUpArg; DWORD Attributes; BOOL Quoted; } CMDLINEARGA, *PCMDLINEARGA;
typedef struct { PCSTR CmdLine; UINT ArgCount; CMDLINEARGA Args[]; } CMDLINEA, *PCMDLINEA;
typedef struct { PCWSTR OriginalArg; PCWSTR CleanedUpArg; DWORD Attributes; BOOL Quoted; } CMDLINEARGW, *PCMDLINEARGW;
typedef struct { PCWSTR CmdLine; UINT ArgCount; CMDLINEARGW Args[]; } CMDLINEW, *PCMDLINEW;
PCMDLINEA ParseCmdLineA ( IN PCSTR CmdLine, IN OUT PGROWBUFFER Buffer );
PCMDLINEW ParseCmdLineW ( IN PCWSTR CmdLine, IN OUT PGROWBUFFER Buffer );
BOOL GetFileSizeFromFilePathA( IN PCSTR FilePath, OUT ULARGE_INTEGER * FileSize );
BOOL GetFileSizeFromFilePathW( IN PCWSTR FilePath, OUT ULARGE_INTEGER * FileSize );
#define NUMDRIVELETTERS 26
#define UNKNOWN_DRIVE '?'
typedef struct {
CHAR Letter[NUMDRIVELETTERS]; BOOL ExistsOnSystem[NUMDRIVELETTERS]; DWORD Type[NUMDRIVELETTERS]; // Returned from GetDriveType:
// DRIVE_FIXED, DRIVE_CDROM or DRIVE_REMOVABLE
CHAR IdentifierString[NUMDRIVELETTERS][MAX_PATH]; // For caller use
} DRIVELETTERSA, *PDRIVELETTERSA;
typedef struct {
WCHAR Letter[NUMDRIVELETTERS]; BOOL ExistsOnSystem[NUMDRIVELETTERS]; DWORD Type[NUMDRIVELETTERS]; // Returned from GetDriveType:
// DRIVE_FIXED, DRIVE_CDROM or DRIVE_REMOVABLE
WCHAR IdentifierString[NUMDRIVELETTERS][MAX_PATH]; // For caller use
} DRIVELETTERSW, *PDRIVELETTERSW;
VOID InitializeDriveLetterStructureA ( OUT PDRIVELETTERSA DriveLetters );
VOID InitializeDriveLetterStructureW ( OUT PDRIVELETTERSW DriveLetters );
BOOL GetDiskFreeSpaceNewA( IN PCSTR DriveName, OUT DWORD * OutSectorsPerCluster, OUT DWORD * OutBytesPerSector, OUT ULARGE_INTEGER * OutNumberOfFreeClusters, OUT ULARGE_INTEGER * OutTotalNumberOfClusters );
BOOL GetDiskFreeSpaceNewW( IN PCWSTR DriveName, OUT DWORD * OutSectorsPerCluster, OUT DWORD * OutBytesPerSector, OUT ULARGE_INTEGER * OutNumberOfFreeClusters, OUT ULARGE_INTEGER * OutTotalNumberOfClusters );
DWORD QuietGetFileAttributesA ( IN PCSTR FilePath );
DWORD QuietGetFileAttributesW ( IN PCWSTR FilePath );
BOOL IsPathOnFixedDriveA ( IN PCSTR FileSpec OPTIONAL );
BOOL IsPathOnFixedDriveW ( IN PCWSTR FileSpec OPTIONAL );
DWORD MakeSureLongPathExistsW ( IN PCWSTR Path, IN BOOL PathOnly );
DWORD SetLongPathAttributesW ( IN PCWSTR Path, IN DWORD Attributes );
DWORD GetLongPathAttributesW ( IN PCWSTR Path );
BOOL DeleteLongPathW ( IN PCWSTR Path );
BOOL RemoveLongDirectoryPathW ( IN PCWSTR Path );
#ifdef UNICODE
#define MakeSureLongPathExists MakeSureLongPathExistsW
#define SetLongPathAttributes SetLongPathAttributesW
#define GetLongPathAttributes GetLongPathAttributesW
#define DeleteLongPath DeleteLongPathW
#define RemoveLongDirectoryPath RemoveLongDirectoryPathW
#define IsPathLengthOk IsPathLengthOkW
#define IsPathLengthOkT IsPathLengthOkW
#define OurGetLongPathName OurGetLongPathNameW
#define OurGetShortPathName OurGetShortPathNameW
#define OurGetFullPathName OurGetFullPathNameW
#define CopyFileSpecToLong CopyFileSpecToLongW
#define DoesFileExist DoesFileExistW
#define DoesFileExistEx DoesFileExistExW
#define MakeSurePathExists MakeSurePathExistsW
#define PACKFILEENUM PACKFILEENUMW
#define PackedFile_ExtractFileUsingEnum PackedFile_ExtractFileUsingEnumW
#define PackedFile_AddFile PackedFile_AddFileW
#define PackedFile_ExtractFile PackedFile_ExtractFileW
#define PackedFile_EnumFirst PackedFile_EnumFirstW
#define PackedFile_EnumNext PackedFile_EnumNextW
#define WriteFileString WriteFileStringW
#define TREE_ENUM TREE_ENUMW
#define PTREE_ENUM PTREE_ENUMW
#define FILE_ENUM FILE_ENUMW
#define PFILE_ENUM PFILE_ENUMW
#define EnumFirstFileInTreeEx EnumFirstFileInTreeExW
#define EnumFirstFileInTree EnumFirstFileInTreeW
#define EnumNextFileInTree EnumNextFileInTreeW
#define AbortEnumFileInTree AbortEnumFileInTreeW
#define AbortEnumCurrentDir AbortEnumCurrentDirW
#define EnumFirstFile EnumFirstFileW
#define EnumNextFile EnumNextFileW
#define AbortFileEnum AbortFileEnumW
#define ExtractIconImageFromFile ExtractIconImageFromFileW
#define ExtractIconImageFromFileEx ExtractIconImageFromFileExW
#define WriteIconImageArrayToIcoFile WriteIconImageArrayToIcoFileW
#define WriteIconImageArrayToIcoFileEx WriteIconImageArrayToIcoFileExW
#define WriteIconImageArrayToPeFile WriteIconImageArrayToPeFileW
#define WriteIconImageArrayToPeFileEx WriteIconImageArrayToPeFileExW
#define ExtractIconNamesFromFile ExtractIconNamesFromFileW
#define ExtractIconNamesFromFileEx ExtractIconNamesFromFileExW
#define IsFileAnIco IsFileAnIcoW
#define ICON_EXTRACT_CONTEXT ICON_EXTRACT_CONTEXTW
#define PICON_EXTRACT_CONTEXT PICON_EXTRACT_CONTEXTW
#define BeginIconExtraction BeginIconExtractionW
#define OpenIconImageFile OpenIconImageFileW
#define CopyIcon CopyIconW
#define CopyAllIcons CopyAllIconsW
#define EndIconExtraction EndIconExtractionW
#define OpenNeFile OpenNeFileW
#define EnumNeResourceTypes EnumNeResourceTypesW
#define EnumNeResourceNames EnumNeResourceNamesW
#define SizeofNeResource SizeofNeResourceW
#define FindNeResource FindNeResourceW
#define FindNeResourceEx FindNeResourceExW
#define MapFileIntoMemory MapFileIntoMemoryW
#define MapFileIntoMemoryEx MapFileIntoMemoryExW
#define RemoveCompleteDirectory RemoveCompleteDirectoryW
#define CMDLINE CMDLINEW
#define CMDLINEARG CMDLINEARGW
#define PCMDLINE PCMDLINEW
#define PCMDLINEARG PCMDLINEARGW
#define ParseCmdLine ParseCmdLineW
#define GetFileSizeFromFilePath GetFileSizeFromFilePathW
#define GetDiskInfo GetDiskInfoW
#define GetIntegrityInfo GetIntegrityInfoW
#define DRIVELETTERS DRIVELETTERSW
#define PDRIVELETTERS PDRIVELETTERSW
#define InitializeDriveLetterStructure InitializeDriveLetterStructureW
#define GetDiskFreeSpaceNew GetDiskFreeSpaceNewW
#define QuietGetFileAttributes QuietGetFileAttributesW
#define IsPathOnFixedDrive IsPathOnFixedDriveW
#else
#define IsPathLengthOk IsPathLengthOkA
#define IsPathLengthOkT IsPathLengthOkA
#define OurGetLongPathName OurGetLongPathNameA
#define OurGetShortPathName OurGetShortPathNameA
#define OurGetFullPathName OurGetFullPathNameA
#define MakeSurePathExists MakeSurePathExistsA
#define DoesFileExist DoesFileExistA
#define DoesFileExistEx DoesFileExistExA
#define CopyFileSpecToLong CopyFileSpecToLongA
#define PACKFILEENUM PACKFILEENUMA
#define PackedFile_ExtractFileUsingEnum PackedFile_ExtractFileUsingEnumA
#define PackedFile_AddFile PackedFile_AddFileA
#define PackedFile_ExtractFile PackedFile_ExtractFileA
#define PackedFile_EnumFirst PackedFile_EnumFirstA
#define PackedFile_EnumNext PackedFile_EnumNextA
#define WriteFileString WriteFileStringA
#define TREE_ENUM TREE_ENUMA
#define PTREE_ENUM PTREE_ENUMA
#define FILE_ENUM FILE_ENUMA
#define PFILE_ENUM PFILE_ENUMA
#define EnumFirstFileInTreeEx EnumFirstFileInTreeExA
#define EnumFirstFileInTree EnumFirstFileInTreeA
#define EnumNextFileInTree EnumNextFileInTreeA
#define AbortEnumFileInTree AbortEnumFileInTreeA
#define AbortEnumCurrentDir AbortEnumCurrentDirA
#define EnumFirstFile EnumFirstFileA
#define EnumNextFile EnumNextFileA
#define AbortFileEnum AbortFileEnumA
#define ExtractIconImageFromFile ExtractIconImageFromFileA
#define ExtractIconImageFromFileEx ExtractIconImageFromFileExA
#define WriteIconImageArrayToIcoFile WriteIconImageArrayToIcoFileA
#define WriteIconImageArrayToIcoFileEx WriteIconImageArrayToIcoFileExA
#define WriteIconImageArrayToPeFile WriteIconImageArrayToPeFileA
#define WriteIconImageArrayToPeFileEx WriteIconImageArrayToPeFileExA
#define ExtractIconNamesFromFile ExtractIconNamesFromFileA
#define ExtractIconNamesFromFileEx ExtractIconNamesFromFileExA
#define IsFileAnIco IsFileAnIcoA
#define ICON_EXTRACT_CONTEXT ICON_EXTRACT_CONTEXTA
#define PICON_EXTRACT_CONTEXT PICON_EXTRACT_CONTEXTA
#define BeginIconExtraction BeginIconExtractionA
#define OpenIconImageFile OpenIconImageFileA
#define CopyIcon CopyIconA
#define CopyAllIcons CopyAllIconsA
#define EndIconExtraction EndIconExtractionA
#define OpenNeFile OpenNeFileA
#define EnumNeResourceTypes EnumNeResourceTypesA
#define EnumNeResourceNames EnumNeResourceNamesA
#define SizeofNeResource SizeofNeResourceA
#define FindNeResource FindNeResourceA
#define FindNeResourceEx FindNeResourceExA
#define MapFileIntoMemory MapFileIntoMemoryA
#define MapFileIntoMemoryEx MapFileIntoMemoryExA
#define RemoveCompleteDirectory RemoveCompleteDirectoryA
#define CMDLINE CMDLINEA
#define CMDLINEARG CMDLINEARGA
#define PCMDLINE PCMDLINEA
#define PCMDLINEARG PCMDLINEARGA
#define ParseCmdLine ParseCmdLineA
#define GetFileSizeFromFilePath GetFileSizeFromFilePathA
#define DRIVELETTERS DRIVELETTERSA
#define PDRIVELETTERS PDRIVELETTERSA
#define InitializeDriveLetterStructure InitializeDriveLetterStructureA
#define GetDiskFreeSpaceNew GetDiskFreeSpaceNewA
#define QuietGetFileAttributes QuietGetFileAttributesA
#define IsPathOnFixedDrive IsPathOnFixedDriveA
#endif
|