/*++ Copyright (c) 1998 Microsoft Corporation Module Name: fileops.h Abstract: Declares the file operation data structures and macros that access the file operations. Every operation on a file is recorded using routines declared here. The file op code keeps conflicting operations from being set on a file. See common\memdb\fileops.c for implementation details. Author: Jim Schmidt (jimschm) 23-Sep-1998 (complete redesign) Revision History: mvander 26-Map-1999 Added MODULESTATUS defines --*/ #pragma once /*++ Macro Expansion List Description: PATH_OPERATIONS defines a list of characteristics for operations that can be performed on a file. Some operation combinations are prohibited. See the code in fileops.c for a list of prohibited combinations. NOTES: - THERE CAN ONLY BE A MAX OF 16 DEFINITIONS!! - THE BITS MUST BE SORTED!! - CANNOT HAVE UNUSED BITS INBETWEEN OPERATIONS!! Line Syntax: DEFMAC(Bit, Name, CooperativeOperations, MaxProperties) Arguments: Bit - Specifies the single bit (MUST FIT IN 24 BITS), in sorted order Name - Specifies the name of the operation constant (will appear in OPERATION enum type) MemDbName - Specifies the name as stored in memdb MaxProperties - Specifies 0, 1 or UNLIMITED, indicating the number of properties that can be applied to the operation Variables and Types Generated From List: OPERATION g_OperationFlags --*/ #define PATH_OPERATIONS \ DEFMAC(0x0001, OPERATION_FILE_DELETE, Op01, 0) \ DEFMAC(0x0002, OPERATION_FILE_DELETE_EXTERNAL, Op02, 0) \ DEFMAC(0x0004, OPERATION_FILE_MOVE, Op03, 1) \ DEFMAC(0x0008, OPERATION_FILE_COPY, Op04, UNLIMITED) \ DEFMAC(0x0010, OPERATION_FILE_MOVE_EXTERNAL, Op05, 1) \ DEFMAC(0x0020, OPERATION_CLEANUP, Op06, 0) \ DEFMAC(0x0040, OPERATION_MIGDLL_HANDLED, Op07, 0) \ DEFMAC(0x0080, OPERATION_CREATE_FILE, Op08, 0) \ DEFMAC(0x0100, OPERATION_SHORT_FILE_NAME, Op09, 1) \ DEFMAC(0x0200, OPERATION_LINK_EDIT, Op10, UNLIMITED) \ DEFMAC(0x0400, OPERATION_SHELL_FOLDER, Op11, UNLIMITED) \ DEFMAC(0x0800, OPERATION_TEMP_PATH, Op12, 2) \ DEFMAC(0x1000, OPERATION_FILE_MOVE_BY_NT, Op13, 1) \ DEFMAC(0x2000, OPERATION_FILE_MOVE_SHELL_FOLDER, Op14, 1) \ DEFMAC(0x4000, OPERATION_PRESERVED_DIR, Op15, 0) \ DEFMAC(0x8000, OPERATION_OS_FILE, Op16, 0) \ DEFMAC(0x010000, OPERATION_FILE_DISABLED, Op17, 0) \ DEFMAC(0x020000, OPERATION_LINK_STUB, Op18, UNLIMITED) \ DEFMAC(0x040000, OPERATION_LONG_FILE_NAME, Op19, 0) \ DEFMAC(0x080000, OPERATION_CHANGE_EXTERNAL, Op20, 0) \ DEFMAC(0x100000, OPERATION_NUL_3, Opn3, 0) \ DEFMAC(0x200000, OPERATION_NUL_2, Opn2, 0) \ DEFMAC(0x400000, OPERATION_NUL_1, Opn1, 0) \ // // Combined constants // #define ALL_MOVE_OPERATIONS (OPERATION_FILE_MOVE|OPERATION_FILE_MOVE_EXTERNAL|OPERATION_FILE_MOVE_BY_NT|OPERATION_FILE_MOVE_SHELL_FOLDER) #define ALL_COPY_OPERATIONS (OPERATION_FILE_COPY) #define ALL_DELETE_OPERATIONS (OPERATION_FILE_DELETE|OPERATION_CLEANUP|OPERATION_FILE_DELETE_EXTERNAL) #define ALL_OPERATIONS (0xffffff) #define ALL_DEST_CHANGE_OPERATIONS (ALL_MOVE_OPERATIONS|ALL_COPY_OPERATIONS) #define ALL_CHANGE_OPERATIONS (OPERATION_FILE_DISABLED|OPERATION_LINK_EDIT|OPERATION_LINK_STUB|OPERATION_CREATE_FILE|ALL_DEST_CHANGE_OPERATIONS|ALL_DELETE_OPERATIONS|OPERATION_CHANGE_EXTERNAL) #define ALL_CONTENT_CHANGE_OPERATIONS (ALL_DELETE_OPERATIONS|OPERATION_MIGDLL_HANDLED|OPERATION_CREATE_FILE|OPERATION_LINK_EDIT|OPERATION_LINK_STUB|OPERATION_FILE_DISABLED|OPERATION_CHANGE_EXTERNAL) // // Declare OPERATION type // #define DEFMAC(bit,name,memdbname,maxattribs) name = bit, typedef enum { PATH_OPERATIONS LAST_OPERATION } OPERATION; #undef DEFMAC #define INVALID_SEQUENCER 0 // // File status flags returned by GetFileInfoOnNt and GetFileStatusOnNt // #define FILESTATUS_UNCHANGED 0x00 #define FILESTATUS_DELETED 0x01 #define FILESTATUS_MOVED 0x02 #define FILESTATUS_REPLACED 0x04 #define FILESTATUS_NTINSTALLED 0x08 #define FILESTATUS_BACKUP 0x10 // // Backup flags (for CleanOut memdb category) // #define BACKUP_FILE 0 #define BACKUP_SUBDIRECTORY_FILES 1 #define BACKUP_SUBDIRECTORY_TREE 2 #define BACKUP_AND_CLEAN_TREE 3 #define BACKUP_AND_CLEAN_SUBDIR 4 // // When a file is announced, it can be announced with one of the following. // #define ACT_UNKNOWN 0 #define ACT_REINSTALL 1 // application that needs to be reinstalled #define ACT_MINORPROBLEMS 2 // application with minor problems #define ACT_INCOMPATIBLE 3 // incompatible application - migdb based #define ACT_INC_SAFETY 4 // items removed for safety #define ACT_INC_NOBADAPPS 5 // incompatible application - no CheckBadApps entry #define ACT_REINSTALL_BLOCK 6 // application that needs to be reinstalled (highly suggested) #define ACT_INC_PREINSTUTIL 7 // incompatible preinstalled utility #define ACT_INC_SIMILAROSFUNC 8 // incompatible utility but NT has similar functionality #define ACT_INC_IHVUTIL 9 // incompatible hardware accessory #define USF_9X TEXT("9X") #define USF_9XA "9X" #define USF_9XW L"9X" #define USF_NT TEXT("NT") #define USF_NTA "NT" #define USF_NTW L"NT" // // Module status for use with MEMDB_CATEGORY_MODULE_CHECK // #define MODULESTATUS_NT_MODULE 0 #define MODULESTATUS_CHECKED 1 #define MODULESTATUS_CHECKING 2 #define MODULESTATUS_UNCHECKED 3 #define MODULESTATUS_BAD 4 #define MODULESTATUS_FILENOTFOUND 5 // // Enum types // typedef struct { // External members CHAR Path[MAX_MBCHAR_PATH]; UINT Sequencer; // Internal members MEMDB_ENUMW MemDbEnum; } FILEOP_ENUMA, *PFILEOP_ENUMA; typedef struct { // External members WCHAR Path[MAX_WCHAR_PATH]; UINT Sequencer; // Internal members MEMDB_ENUMW MemDbEnum; } FILEOP_ENUMW, *PFILEOP_ENUMW; typedef struct { // External members CHAR Property[MEMDB_MAX * 2]; CHAR PropertyName[MEMDB_MAX * 2]; // Internal members MEMDB_ENUMW MemDbEnum; } FILEOP_PROP_ENUMA, *PFILEOP_PROP_ENUMA; typedef struct { // External members WCHAR Property[MEMDB_MAX]; WCHAR PropertyName[MEMDB_MAX]; // Internal members MEMDB_ENUMW MemDbEnum; } FILEOP_PROP_ENUMW, *PFILEOP_PROP_ENUMW; typedef struct { // External PCWSTR Path; UINT Sequencer; PCWSTR Property; UINT PropertyNum; OPERATION CurrentOperation; BOOL PropertyValid; // Internal UINT State; DWORD Operations; UINT OperationNum; WCHAR FileSpec[MAX_WCHAR_PATH]; FILEOP_ENUMW OpEnum; FILEOP_PROP_ENUMW PropEnum; } ALL_FILEOPS_ENUMW, *PALL_FILEOPS_ENUMW; typedef struct { // External CHAR Path[MAX_MBCHAR_PATH]; UINT Sequencer; CHAR Property[MEMDB_MAX * 2]; UINT PropertyNum; OPERATION CurrentOperation; BOOL PropertyValid; // Internal ALL_FILEOPS_ENUMW Enum; } ALL_FILEOPS_ENUMA, *PALL_FILEOPS_ENUMA; typedef struct _SHELLFOLDER_ENUMA { CHAR ShellFolder[MEMDB_MAX]; PCSTR UserFixedName; PCSTR Side; MEMDB_ENUMA e; } SHELLFOLDER_ENUMA, *PSHELLFOLDER_ENUMA; typedef struct _SHELLFOLDER_ENUMW { WCHAR ShellFolder[MEMDB_MAX]; PCWSTR UserFixedName; PCWSTR Side; MEMDB_ENUMW e; } SHELLFOLDER_ENUMW, *PSHELLFOLDER_ENUMW; typedef struct { CHAR SrcFile[MAX_MBCHAR_PATH]; CHAR DestFile[MAX_MBCHAR_PATH]; ALL_FILEOPS_ENUMA e; } FILERELOC_ENUMA, *PFILERELOC_ENUMA; // // Generalized file operations // VOID InitOperationTable ( VOID ); UINT AddOperationToPathA ( IN PCSTR FileSpec, IN OPERATION Operation ); UINT AddOperationToPathW ( IN PCWSTR FileSpec, IN OPERATION Operation ); BOOL AddPropertyToPathExA ( IN UINT Sequencer, IN OPERATION Operation, IN PCSTR Property, IN PCSTR AlternateDataSection OPTIONAL ); #define AddPropertyToPathA(seq,op,attr) AddPropertyToPathExA(seq,op,attr,NULL) BOOL AddPropertyToPathExW ( IN UINT Sequencer, IN OPERATION Operation, IN PCWSTR Property, IN PCWSTR AlternateDataSection OPTIONAL ); #define AddPropertyToPathW(seq,op,attr) AddPropertyToPathExW(seq,op,attr,NULL) BOOL AssociatePropertyWithPathA ( IN PCSTR FileSpec, IN OPERATION Operation, IN PCSTR Property ); BOOL AssociatePropertyWithPathW ( IN PCWSTR FileSpec, IN OPERATION Operation, IN PCWSTR Property ); UINT GetSequencerFromPathA ( IN PCSTR FileSpec ); UINT GetSequencerFromPathW ( IN PCWSTR FileSpec ); BOOL GetPathFromSequencerA ( IN UINT Sequencer, OUT PSTR PathBuf ); BOOL GetPathFromSequencerW ( IN UINT Sequencer, OUT PWSTR PathBuf ); DWORD GetOperationsOnPathA ( IN PCSTR FileSpec ); DWORD GetOperationsOnPathW ( IN PCWSTR FileSpec ); VOID RemoveOperationsFromSequencer ( IN UINT Sequencer, IN DWORD Operations ); VOID RemoveOperationsFromPathA ( IN PCSTR FileSpec, IN DWORD Operations ); #define RemoveAllOperationsFromPathA(file) RemoveOperationsFromPathA(file,ALL_OPERATIONS) VOID RemoveOperationsFromPathW ( IN PCWSTR FileSpec, IN DWORD Operations ); #define RemoveAllOperationsFromPathW(file) RemoveOperationsFromPathW(file,ALL_OPERATIONS) UINT ForceOperationOnPathA ( IN PCSTR FileSpec, IN OPERATION Operation ); UINT ForceOperationOnPathW ( IN PCWSTR FileSpec, IN OPERATION Operation ); BOOL IsFileMarkedForOperationA ( IN PCSTR FileSpec, IN DWORD Operations ); BOOL IsFileMarkedForOperationW ( IN PCWSTR FileSpec, IN DWORD Operations ); BOOL IsFileMarkedInDataA ( IN PCSTR FileSpec ); BOOL IsFileMarkedInDataW ( IN PCWSTR FileSpec ); DWORD GetPathPropertyOffset ( IN UINT Sequencer, IN OPERATION Operation, IN DWORD Property ); BOOL GetPathPropertyA ( IN PCSTR FileSpec, IN DWORD Operations, IN DWORD Property, OUT PSTR PropertyBuf OPTIONAL // MEMDB_MAX ); BOOL GetPathPropertyW ( IN PCWSTR FileSpec, IN DWORD Operations, IN DWORD Property, OUT PWSTR PropertyBuf OPTIONAL // MEMDB_MAX ); BOOL EnumFirstPathInOperationA ( OUT PFILEOP_ENUMA EnumPtr, IN OPERATION Operation ); BOOL EnumFirstPathInOperationW ( OUT PFILEOP_ENUMW EnumPtr, IN OPERATION Operation ); BOOL EnumNextPathInOperationA ( IN OUT PFILEOP_ENUMA EnumPtr ); BOOL EnumNextPathInOperationW ( IN OUT PFILEOP_ENUMW EnumPtr ); BOOL EnumFirstFileOpPropertyA ( OUT PFILEOP_PROP_ENUMA EnumPtr, IN UINT Sequencer, IN OPERATION Operation ); BOOL EnumFirstFileOpPropertyW ( OUT PFILEOP_PROP_ENUMW EnumPtr, IN UINT Sequencer, IN OPERATION Operation ); BOOL EnumNextFileOpPropertyA ( IN OUT PFILEOP_PROP_ENUMA EnumPtr ); BOOL EnumNextFileOpPropertyW ( IN OUT PFILEOP_PROP_ENUMW EnumPtr ); BOOL EnumFirstFileOpA ( OUT PALL_FILEOPS_ENUMA EnumPtr, IN DWORD Operations, IN PCSTR FileSpec OPTIONAL ); BOOL EnumFirstFileOpW ( OUT PALL_FILEOPS_ENUMW EnumPtr, IN DWORD Operations, IN PCWSTR FileSpec OPTIONAL ); BOOL EnumNextFileOpA ( IN OUT PALL_FILEOPS_ENUMA EnumPtr ); BOOL EnumNextFileOpW ( IN OUT PALL_FILEOPS_ENUMW EnumPtr ); BOOL TestPathsForOperationsA ( IN PCSTR BaseFileSpec, IN DWORD OperationsToFind ); BOOL TestPathsForOperationsW ( IN PCWSTR BaseFileSpec, IN DWORD OperationsToFind ); BOOL IsFileMarkedForAnnounceA ( IN PCSTR FileSpec ); BOOL IsFileMarkedAsKnownGoodA ( IN PCSTR FileSpec ); BOOL IsFileMarkedForAnnounceW ( IN PCWSTR FileSpec ); DWORD GetFileAnnouncementA ( IN PCSTR FileSpec ); DWORD GetFileAnnouncementW ( IN PCWSTR FileSpec ); DWORD GetFileAnnouncementContextA ( IN PCSTR FileSpec ); DWORD GetFileAnnouncementContextW ( IN PCWSTR FileSpec ); BOOL IsFileProvidedByNtA ( IN PCSTR FileName ); BOOL IsFileProvidedByNtW ( IN PCWSTR FileName ); BOOL GetNewPathForFileA ( IN PCSTR SrcFileSpec, OUT PSTR NewPath ); BOOL GetNewPathForFileW ( IN PCWSTR SrcFileSpec, OUT PWSTR NewPath ); BOOL AnnounceFileInReportA ( IN PCSTR SrcFileSpec, IN DWORD ContextPtr, IN DWORD Action ); BOOL MarkFileAsKnownGoodA ( IN PCSTR SrcFileSpec ); BOOL AddCompatibleShellA ( IN PCSTR SrcFileSpec, IN DWORD ContextPtr ); BOOL AddCompatibleRunKeyA ( IN PCSTR SrcFileSpec, IN DWORD ContextPtr ); BOOL AddCompatibleDosA ( IN PCSTR SrcFileSpec, IN DWORD ContextPtr ); BOOL AddControlPanelAppletA ( IN PCSTR FileSpec, IN DWORD ContextPtr, OPTIONAL IN DWORD Action ); BOOL AddCompatibleHlpA ( IN PCSTR SrcFileSpec, IN DWORD ContextPtr ); BOOL MarkFileForTemporaryMoveExA ( IN PCSTR SrcFileSpec, IN PCSTR FinalDest, IN PCSTR TempSpec, IN BOOL TempSpecIsFile ); #define MarkFileForTemporaryMoveA(s,d,t) MarkFileForTemporaryMoveExA(s,d,t,FALSE) PCSTR GetTemporaryLocationForFileA ( IN PCSTR SourceFile ); PCWSTR GetTemporaryLocationForFileW ( IN PCWSTR SourceFile ); BOOL MarkHiveForTemporaryMoveA ( IN PCSTR HivePath, IN PCSTR TempDir, IN PCSTR UserName, IN BOOL DefaultHives, IN BOOL CreateOnly ); VOID ComputeTemporaryPathA ( IN PCSTR SourcePath, IN PCSTR SourcePrefix, OPTIONAL IN PCSTR TempPrefix, OPTIONAL IN PCSTR SetupTempDir, OUT PSTR TempPath ); VOID MarkShellFolderForMoveA ( IN PCSTR SrcPath, IN PCSTR TempPath ); BOOL FileIsProvidedByNtA ( IN PCSTR FullPath, IN PCSTR FileName, IN DWORD UserFlags ); BOOL DeclareTemporaryFileA ( IN PCSTR FileSpec ); BOOL DeclareTemporaryFileW ( IN PCWSTR FileSpec ); BOOL EnumFirstFileRelocA ( OUT PFILERELOC_ENUMA EnumPtr, IN PCSTR FileSpec OPTIONAL ); BOOL EnumNextFileRelocA ( IN OUT PFILERELOC_ENUMA EnumPtr ); BOOL GetNtFilePathA ( IN PCSTR FileName, OUT PSTR FullPath ); BOOL GetNtFilePathW ( IN PCWSTR FileName, OUT PWSTR FullPath ); DWORD GetFileInfoOnNtA ( IN PCSTR FileName, OUT PSTR NewFileName, // optional IN UINT BufferSize // required if NewFileName is specified, buffer size in chars ); DWORD GetFileInfoOnNtW ( IN PCWSTR FileName, OUT PWSTR NewFileName, // optional IN UINT BufferSize // required if NewFileName is specified, buffer size in chars ); DWORD GetFileStatusOnNtA ( IN PCSTR FileName ); DWORD GetFileStatusOnNtW ( IN PCWSTR FileName ); PSTR GetPathStringOnNtA ( IN PCSTR FileName ); PWSTR GetPathStringOnNtW ( IN PCWSTR FileName ); PCWSTR SetCurrentUserW ( IN PCWSTR User ); PCSTR ExtractArgZeroExA ( IN PCSTR CmdLine, OUT PSTR Buffer, IN PCSTR TerminatingChars, OPTIONAL IN BOOL KeepQuotes ); #define ExtractArgZeroA(cmdline,buf) ExtractArgZeroExA(cmdline,buf,NULL,TRUE) PCWSTR ExtractArgZeroExW ( IN PCWSTR CmdLine, OUT PWSTR Buffer, IN PCWSTR TerminatingChars, OPTIONAL IN BOOL KeepQuotes ); #define ExtractArgZeroW(cmdline,buf) ExtractArgZeroExW(cmdline,buf,NULL,TRUE) BOOL CanSetOperationA ( IN PCSTR FileSpec, IN OPERATION Operation ); BOOL CanSetOperationW ( IN PCWSTR FileSpec, IN OPERATION Operation ); PCSTR GetSourceFileLongNameA ( IN PCSTR ShortName ); PCWSTR GetSourceFileLongNameW ( IN PCWSTR ShortName ); BOOL WriteBackupFilesA ( IN BOOL Win9xSide, IN PCSTR TempDir, OUT ULARGE_INTEGER * OutAmountOfSpaceIfCompressed, OPTIONAL OUT ULARGE_INTEGER * OutAmountOfSpace, OPTIONAL IN INT CompressionFactor, OPTIONAL IN INT BootCabImagePadding, OPTIONAL OUT ULARGE_INTEGER * OutAmountOfSpaceForDelFiles, OPTIONAL OUT ULARGE_INTEGER * OutAmountOfSpaceClusterAligned OPTIONAL ); BOOL WriteHashTableToFileW ( IN HANDLE File, IN HASHTABLE FileTable ); BOOL IsDirEmptyW( IN PCWSTR DirPathPtr ); BOOL IsDirEmptyA( IN PCSTR DirPathPtr ); VOID AddDirPathToEmptyDirsCategoryA( IN PCSTR DirPathPtr, IN BOOL AddParentDirIfFile, OPTIONAL IN BOOL AddParentDirIfFileExist OPTIONAL ); VOID AddDirPathToEmptyDirsCategoryW( IN PCWSTR DirPathPtr, IN BOOL AddParentDirIfFile, OPTIONAL IN BOOL AddParentDirIfFileExist OPTIONAL ); // // Wrapper macros // #define IsFileMarkedForPreDeleteA(file) IsFileMarkedForOperationA(file, OPERATION_FILE_DELETE) #define IsFileMarkedForPreDeleteW(file) IsFileMarkedForOperationW(file, OPERATION_FILE_DELETE) #define IsFileMarkedForPostDeleteA(file) IsFileMarkedForOperationA(file, OPERATION_CLEANUP) #define IsFileMarkedForPostDeleteW(file) IsFileMarkedForOperationW(file, OPERATION_CLEANUP) #define IsFileMarkedForDeleteA(file) IsFileMarkedForOperationA(file, ALL_DELETE_OPERATIONS) #define IsFileMarkedForDeleteW(file) IsFileMarkedForOperationW(file, ALL_DELETE_OPERATIONS) #define IsFileMarkedAsDestA(file) IsFileMarkedInDataA(file) #define IsFileMarkedAsDestW(file) IsFileMarkedInDataW(file) #define IsFileMarkedAsCopyA(file) IsFileMarkedForOperationA(file, OPERATION_FILE_COPY) #define IsFileMarkedAsCopyW(file) IsFileMarkedForOperationW(file, OPERATION_FILE_COPY) #define IsFileMarkedForMoveA(file) IsFileMarkedForOperationA(file, ALL_MOVE_OPERATIONS) #define IsFileMarkedForMoveW(file) IsFileMarkedForOperationW(file, ALL_MOVE_OPERATIONS) #define IsFileMarkedAsHandledA(file) IsFileMarkedForOperationA(file, OPERATION_MIGDLL_HANDLED) #define IsFileMarkedAsHandledW(file) IsFileMarkedForOperationW(file, OPERATION_MIGDLL_HANDLED) #define IsFileMarkedForChangeA(file) IsFileMarkedForOperationA(file, ALL_OPERATIONS) #define IsFileMarkedForChangeW(file) IsFileMarkedForOperationW(file, ALL_OPERATIONS) #define IsFileMarkedForCreationA(file) IsFileMarkedForOperationA(file, OPERATION_CREATE_FILE) #define IsFileMarkedForCreationW(file) IsFileMarkedForOperationW(file, OPERATION_CREATE_FILE) #define IsDirectoryMarkedAsEmptyA(file) IsFileMarkedForOperationA(file, OPERATION_PRESERVED_DIR) #define IsDirectoryMarkedAsEmptyW(file) IsFileMarkedForOperationW(file, OPERATION_PRESERVED_DIR) #define IsFileMarkedAsOsFileA(file) IsFileMarkedForOperationA(file, OPERATION_OS_FILE) #define IsFileMarkedAsOsFileW(file) IsFileMarkedForOperationW(file, OPERATION_OS_FILE) #define IsFileDisabledA(file) IsFileMarkedForOperationA(file, OPERATION_FILE_DISABLED) #define IsFileDisabledW(file) IsFileMarkedForOperationW(file, OPERATION_FILE_DISABLED) #define IsFileMarkedForBackupA(file) IsFileMarkedForOperationA(file, OPERATION_CHANGE_EXTERNAL) #define IsFileMarkedForBackupW(file) IsFileMarkedForOperationW(file, OPERATION_CHANGE_EXTERNAL) #define MarkFileForDeleteA(file) (AddOperationToPathA(file, OPERATION_FILE_DELETE) != INVALID_SEQUENCER) #define MarkFileForExternalDeleteA(file) (AddOperationToPathA(file, OPERATION_FILE_DELETE_EXTERNAL) != INVALID_SEQUENCER) #define MarkFileForMoveA(source,dest) AssociatePropertyWithPathA(source, OPERATION_FILE_MOVE, dest) #define MarkFileForCopyA(source,dest) AssociatePropertyWithPathA(source, OPERATION_FILE_COPY, dest) #define MarkFileForMoveExternalA(source,dest) AssociatePropertyWithPathA(source, OPERATION_FILE_MOVE_EXTERNAL, dest) #define MarkFileForShellFolderMoveA(source,dest) AssociatePropertyWithPathA(source, OPERATION_FILE_MOVE_SHELL_FOLDER, dest) #define MarkFileForMoveByNtA(source,dest) AssociatePropertyWithPathA(source, OPERATION_FILE_MOVE_BY_NT, dest) #define MarkFileForCleanUpA(file) (AddOperationToPathA(file, OPERATION_CLEANUP) != INVALID_SEQUENCER) #define MarkPathAsHandledA(path) (AddOperationToPathA(path, OPERATION_MIGDLL_HANDLED) != INVALID_SEQUENCER) #define MarkFileForCreationA(path) (AddOperationToPathA(path, OPERATION_CREATE_FILE) != INVALID_SEQUENCER) #define MarkDirectoryAsPreservedA(file) (AddOperationToPathA(file, OPERATION_PRESERVED_DIR) != INVALID_SEQUENCER) #define MarkFileAsOsFileA(file) (AddOperationToPathA(file, OPERATION_OS_FILE) != INVALID_SEQUENCER) #define MarkFileForBackupA(file) (AddOperationToPathA(file, OPERATION_CHANGE_EXTERNAL) != INVALID_SEQUENCER) #define DisableFileA(file) (AddOperationToPathA(file, OPERATION_FILE_DISABLED) != INVALID_SEQUENCER) #define MarkFileForDeleteW(file) (AddOperationToPathW(file, OPERATION_FILE_DELETE) != INVALID_SEQUENCER) #define MarkFileForExternalDeleteW(file) (AddOperationToPathW(file, OPERATION_FILE_DELETE_EXTERNAL) != INVALID_SEQUENCER) #define MarkFileForMoveW(source,dest) AssociatePropertyWithPathW(source, OPERATION_FILE_MOVE, dest) #define MarkFileForCopyW(source,dest) AssociatePropertyWithPathW(source, OPERATION_FILE_COPY, dest) #define MarkFileForMoveExternalW(source,dest) AssociatePropertyWithPathW(source, OPERATION_FILE_MOVE_EXTERNAL, dest) #define MarkFileForShellFolderMoveW(source,dest) AssociatePropertyWithPathW(source, OPERATION_FILE_MOVE_SHELL_FOLDER, dest) #define MarkFileForMoveByNtW(source,dest) AssociatePropertyWithPathW(source, OPERATION_FILE_MOVE_BY_NT, dest) #define MarkFileForCleanUpW(file) (AddOperationToPathW(file, OPERATION_CLEANUP) != INVALID_SEQUENCER) #define MarkPathAsHandledW(path) (AddOperationToPathW(path, OPERATION_MIGDLL_HANDLED) != INVALID_SEQUENCER) #define MarkFileForCreationW(path) (AddOperationToPathW(path, OPERATION_CREATE_FILE) != INVALID_SEQUENCER) #define MarkDirectoryAsPreservedW(file) (AddOperationToPathW(file, OPERATION_PRESERVED_DIR) != INVALID_SEQUENCER) #define MarkFileAsOsFileW(file) (AddOperationToPathW(file, OPERATION_OS_FILE) != INVALID_SEQUENCER) #define MarkFileForBackupW(file) (AddOperationToPathW(file, OPERATION_CHANGE_EXTERNAL) != INVALID_SEQUENCER) #define DisableFileW(file) (AddOperationToPathW(file, OPERATION_FILE_DISABLED) != INVALID_SEQUENCER) #ifndef UNICODE #define FILEOP_ENUM FILEOP_ENUMA #define FILEOP_PROP_ENUM FILEOP_PROP_ENUMA #define ALL_FILEOPS_ENUM ALL_FILEOPS_ENUMA #define SHELLFOLDER_ENUM SHELLFOLDER_ENUMA #define FILERELOC_ENUM FILERELOC_ENUMA #define AddOperationToPath AddOperationToPathA #define AddPropertyToPathEx AddPropertyToPathExA #define AssociatePropertyWithPath AssociatePropertyWithPathA #define GetSequencerFromPath GetSequencerFromPathA #define GetPathFromSequencer GetPathFromSequencerA #define GetOperationsOnPath GetOperationsOnPathA #define RemoveOperationsFromPath RemoveOperationsFromPathA #define IsFileMarkedForOperation IsFileMarkedForOperationA #define IsFileMarkedInData IsFileMarkedInDataA #define GetPathProperty GetPathPropertyA #define EnumFirstPathInOperation EnumFirstPathInOperationA #define EnumNextPathInOperation EnumNextPathInOperationA #define EnumFirstFileOpProperty EnumFirstFileOpPropertyA #define EnumNextFileOpProperty EnumNextFileOpPropertyA #define EnumFirstFileOp EnumFirstFileOpA #define EnumNextFileOp EnumNextFileOpA #define TestPathsForOperations TestPathsForOperationsA #define IsFileMarkedForAnnounce IsFileMarkedForAnnounceA #define GetFileAnnouncement GetFileAnnouncementA #define GetFileAnnouncementContext GetFileAnnouncementContextA #define IsFileMarkedAsKnownGood IsFileMarkedAsKnownGoodA #define IsFileProvidedByNt IsFileProvidedByNtA #define GetNewPathForFile GetNewPathForFileA #define AnnounceFileInReport AnnounceFileInReportA #define MarkFileAsKnownGood MarkFileAsKnownGoodA #define AddCompatibleShell AddCompatibleShellA #define AddCompatibleRunKey AddCompatibleRunKeyA #define AddCompatibleDos AddCompatibleDosA #define AddControlPanelApplet AddControlPanelAppletA #define AddCompatibleHlp AddCompatibleHlpA #define MarkFileForTemporaryMove MarkFileForTemporaryMoveA #define MarkFileForTemporaryMoveEx MarkFileForTemporaryMoveExA #define GetTemporaryLocationForFile GetTemporaryLocationForFileA #define MarkHiveForTemporaryMove MarkHiveForTemporaryMoveA #define ComputeTemporaryPath ComputeTemporaryPathA #define MarkShellFolderForMove MarkShellFolderForMoveA #define FileIsProvidedByNt FileIsProvidedByNtA #define DeclareTemporaryFile DeclareTemporaryFileA #define EnumFirstFileReloc EnumFirstFileRelocA #define EnumNextFileReloc EnumNextFileRelocA #define GetNtFilePath GetNtFilePathA #define GetFileInfoOnNt GetFileInfoOnNtA #define GetFileStatusOnNt GetFileStatusOnNtA #define GetPathStringOnNt GetPathStringOnNtA #define ExtractArgZeroEx ExtractArgZeroExA #define IsFileMarkedForPreDelete IsFileMarkedForPreDeleteA #define IsFileMarkedForPostDelete IsFileMarkedForPostDeleteA #define IsFileMarkedForDelete IsFileMarkedForDeleteA #define IsFileMarkedAsDest IsFileMarkedAsDestA #define IsFileMarkedAsCopy IsFileMarkedAsCopyA #define IsFileMarkedForMove IsFileMarkedForMoveA #define IsFileMarkedAsHandled IsFileMarkedAsHandledA #define IsFileMarkedForChange IsFileMarkedForChangeA #define IsFileMarkedForCreation IsFileMarkedForCreationA #define IsDirectoryMarkedAsEmpty IsDirectoryMarkedAsEmptyA #define MarkFileForDelete MarkFileForDeleteA #define MarkFileForExternalDelete MarkFileForExternalDeleteA #define MarkFileForMove MarkFileForMoveA #define MarkFileForCopy MarkFileForCopyA #define MarkFileForMoveExternal MarkFileForMoveExternalA #define MarkFileForShellFolderMove MarkFileForShellFolderMoveA #define MarkFileForMoveByNt MarkFileForMoveByNtA #define MarkFileForCleanUp MarkFileForCleanUpA #define MarkPathAsHandled MarkPathAsHandledA #define MarkFileForCreation MarkFileForCreationA #define MarkDirectoryAsPreserved MarkDirectoryAsPreservedA #define ExtractArgZero ExtractArgZeroA #define AddPropertyToPath AddPropertyToPathA #define RemoveAllOperationsFromPath RemoveAllOperationsFromPathA #define ForceOperationOnPath ForceOperationOnPathA #define MarkFileAsOsFile MarkFileAsOsFileA #define MarkFileForBackup MarkFileForBackupA #define IsFileMarkedAsOsFile IsFileMarkedAsOsFileA #define DisableFile DisableFileA #define IsFileDisabled IsFileDisabledA #define IsFileMarkedForBackup IsFileMarkedForBackupA #define CanSetOperation CanSetOperationA #define GetSourceFileLongName GetSourceFileLongNameA #define IsDirEmpty IsDirEmptyA #define AddDirPathToEmptyDirsCategory AddDirPathToEmptyDirsCategoryA #else #define FILEOP_ENUM FILEOP_ENUMW #define FILEOP_PROP_ENUM FILEOP_PROP_ENUMW #define ALL_FILEOPS_ENUM ALL_FILEOPS_ENUMW #define SHELLFOLDER_ENUM SHELLFOLDER_ENUMW #define FILERELOC_ENUM FILERELOC_ENUMW #define AddOperationToPath AddOperationToPathW #define AddPropertyToPathEx AddPropertyToPathExW #define AssociatePropertyWithPath AssociatePropertyWithPathW #define GetSequencerFromPath GetSequencerFromPathW #define GetPathFromSequencer GetPathFromSequencerW #define GetOperationsOnPath GetOperationsOnPathW #define RemoveOperationsFromPath RemoveOperationsFromPathW #define IsFileMarkedForOperation IsFileMarkedForOperationW #define IsFileMarkedInData IsFileMarkedInDataW #define GetPathProperty GetPathPropertyW #define EnumFirstPathInOperation EnumFirstPathInOperationW #define EnumNextPathInOperation EnumNextPathInOperationW #define EnumFirstFileOpProperty EnumFirstFileOpPropertyW #define EnumNextFileOpProperty EnumNextFileOpPropertyW #define EnumFirstFileOp EnumFirstFileOpW #define EnumNextFileOp EnumNextFileOpW #define TestPathsForOperations TestPathsForOperationsW #define IsFileMarkedForAnnounce IsFileMarkedForAnnounceW #define GetFileAnnouncement GetFileAnnouncementW #define GetFileAnnouncementContext GetFileAnnouncementContextW #define IsFileProvidedByNt IsFileProvidedByNtW #define GetNewPathForFile GetNewPathForFileW #define GetTemporaryLocationForFile GetTemporaryLocationForFileW #define DeclareTemporaryFile DeclareTemporaryFileW #define GetNtFilePath GetNtFilePathW #define GetFileInfoOnNt GetFileInfoOnNtW #define GetFileStatusOnNt GetFileStatusOnNtW #define GetPathStringOnNt GetPathStringOnNtW #define ExtractArgZeroEx ExtractArgZeroExW #define IsFileMarkedForPreDelete IsFileMarkedForPreDeleteW #define IsFileMarkedForPostDelete IsFileMarkedForPostDeleteW #define IsFileMarkedForDelete IsFileMarkedForDeleteW #define IsFileMarkedAsDest IsFileMarkedAsDestW #define IsFileMarkedAsCopy IsFileMarkedAsCopyW #define IsFileMarkedForMove IsFileMarkedForMoveW #define IsFileMarkedAsHandled IsFileMarkedAsHandledW #define IsFileMarkedForChange IsFileMarkedForChangeW #define IsFileMarkedForCreation IsFileMarkedForCreationW #define IsDirectoryMarkedAsEmpty IsDirectoryMarkedAsEmptyW #define MarkFileForDelete MarkFileForDeleteW #define MarkFileForExternalDelete MarkFileForExternalDeleteW #define MarkFileForMove MarkFileForMoveW #define MarkFileForCopy MarkFileForCopyW #define MarkFileForMoveExternal MarkFileForMoveExternalW #define MarkFileForShellFolderMove MarkFileForShellFolderMoveW #define MarkFileForMoveByNt MarkFileForMoveByNtW #define MarkFileForCleanUp MarkFileForCleanUpW #define MarkPathAsHandled MarkPathAsHandledW #define MarkFileForCreation MarkFileForCreationW #define MarkDirectoryAsPreserved MarkDirectoryAsPreservedW #define RecordSrcFromDest RecordSrcFromDestW #define ExtractArgZero ExtractArgZeroW #define AddPropertyToPath AddPropertyToPathW #define RemoveAllOperationsFromPath RemoveAllOperationsFromPathW #define ForceOperationOnPath ForceOperationOnPathW #define MarkFileAsOsFile MarkFileAsOsFileW #define MarkFileForBackup MarkFileForBackupW #define IsFileMarkedAsOsFile IsFileMarkedAsOsFileW #define DisableFile DisableFileW #define IsFileDisabled IsFileDisabledW #define IsFileMarkedForBackup IsFileMarkedForBackupW #define CanSetOperation CanSetOperationW #define GetSourceFileLongName GetSourceFileLongNameW #define IsDirEmpty IsDirEmptyW #define AddDirPathToEmptyDirsCategory AddDirPathToEmptyDirsCategoryW #endif