223 lines
7.9 KiB
C
223 lines
7.9 KiB
C
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
uninstall.h
|
|
|
|
Abstract:
|
|
|
|
General uninstall-related functions and structure.
|
|
|
|
Author:
|
|
|
|
Aghajanyan Souren 27-Mar-2001
|
|
|
|
Revision History:
|
|
|
|
sourenag 27-Mar-2001 persistence support
|
|
|
|
--*/
|
|
#if (_WIN32_WINNT >= 0x500)
|
|
|
|
#ifndef _UNINSTALL_GENERAL_
|
|
#define _UNINSTALL_GENERAL_
|
|
|
|
#include "winioctl.h"
|
|
|
|
#define MAX_DRIVE_NUMBER ('Z' - 'A' + 1)
|
|
|
|
typedef enum{
|
|
DiskInfoCmp_Equal,
|
|
DiskInfoCmp_DifferentLetter,
|
|
DiskInfoCmp_FileSystemHasChanged,
|
|
DiskInfoCmp_GeometryHasChanged,
|
|
DiskInfoCmp_WrongParameters,
|
|
DiskInfoCmp_DriveMountPointHasChanged,
|
|
DiskInfoCmp_PartitionPlaceHasChanged,
|
|
DiskInfoCmp_PartitionLengthHasChanged,
|
|
DiskInfoCmp_PartitionTypeHasChanged,
|
|
DiskInfoCmp_PartitionStyleHasChanged,
|
|
DiskInfoCmp_PartitionCountHasChanged,
|
|
DiskInfoCmp_PartitionNumberHasChanged,
|
|
DiskInfoCmp_RewritePartitionHasChanged,
|
|
DiskInfoCmp_PartitionAttributesHasChanged
|
|
}DISKINFO_COMPARATION_STATUS, *PDISKINFO_COMPARATION_STATUS;
|
|
|
|
typedef struct {
|
|
DISK_GEOMETRY DiskGeometry;
|
|
DRIVE_LAYOUT_INFORMATION_EX * DiskLayout;
|
|
} DISKINFO, *PDISKINFO;
|
|
|
|
typedef struct {
|
|
WCHAR Drive;
|
|
|
|
PCWSTR FileSystemName;
|
|
DWORD FileSystemFlags;
|
|
|
|
PCWSTR VolumeNTPath;
|
|
} DRIVEINFO, *PDRIVEINFO;
|
|
|
|
|
|
typedef struct {
|
|
PCWSTR FileName;
|
|
BOOL IsCab;
|
|
ULARGE_INTEGER FileSize;
|
|
} FILEINTEGRITYINFO, *PFILEINTEGRITYINFO;
|
|
|
|
typedef struct {
|
|
ULARGE_INTEGER BootFilesDiskSpace;
|
|
ULARGE_INTEGER BackupFilesDiskSpace;
|
|
ULARGE_INTEGER UndoFilesDiskSpace;
|
|
|
|
UINT NumberOfDrives;
|
|
PDRIVEINFO DrivesInfo;
|
|
|
|
UINT NumberOfDisks;
|
|
PDISKINFO DisksInfo;
|
|
|
|
UINT NumberOfFiles;
|
|
PFILEINTEGRITYINFO FilesInfo;
|
|
} BACKUPIMAGEINFO, *PBACKUPIMAGEINFO;
|
|
|
|
|
|
BOOL
|
|
GetDriveInfo(
|
|
IN WCHAR Drive,
|
|
IN OUT DRIVEINFO * pInfo
|
|
);
|
|
|
|
BOOL
|
|
GetDrivesInfo(
|
|
IN OUT DRIVEINFO * pInfo,
|
|
IN OUT UINT * pDiskInfoRealCount,
|
|
IN UINT DiskInfoMaxCount
|
|
);
|
|
|
|
BOOL
|
|
GetPhysycalDiskNumber(
|
|
OUT UINT * pNumberOfPhysicalDisks
|
|
);
|
|
|
|
BOOL
|
|
GetDiskInfo(
|
|
IN UINT Drive,
|
|
IN OUT DISKINFO * pInfo
|
|
);
|
|
|
|
BOOL
|
|
GetDisksInfo(
|
|
OUT DISKINFO ** pInfo,
|
|
OUT UINT * pNumberOfItem
|
|
);
|
|
|
|
BOOL
|
|
GetIntegrityInfoW(
|
|
IN PCWSTR FileName,
|
|
IN PCWSTR DirPath,
|
|
OUT FILEINTEGRITYINFO * IntegrityInfoPtr
|
|
);
|
|
|
|
VOID
|
|
FreeDisksInfo(
|
|
IN DISKINFO * pInfo,
|
|
IN UINT NumberOfItem
|
|
);
|
|
|
|
BOOL
|
|
GetDrivesInfo(
|
|
IN OUT DRIVEINFO * pInfo,
|
|
IN OUT UINT * pDiskInfoRealCount,
|
|
IN UINT DiskInfoMaxCount
|
|
);
|
|
|
|
BOOL
|
|
GetUndoDrivesInfo(
|
|
OUT DRIVEINFO * pInfo,
|
|
OUT UINT * pNumberOfDrive,
|
|
IN WCHAR BootDrive,
|
|
IN WCHAR SystemDrive,
|
|
IN WCHAR UndoDrive
|
|
);
|
|
|
|
DISKINFO_COMPARATION_STATUS
|
|
CompareDriveInfo(
|
|
IN DRIVEINFO * FirstInfo,
|
|
IN DRIVEINFO * SecondInfo
|
|
);
|
|
|
|
BOOL
|
|
CompareDrivesInfo(
|
|
IN DRIVEINFO * FirstInfo,
|
|
IN DRIVEINFO * SecondInfo,
|
|
IN UINT DriveInfoCount,
|
|
OUT PDISKINFO_COMPARATION_STATUS OutDiskCmpStatus, OPTIONAL
|
|
OUT UINT * OutIfFailedDiskInfoIndex OPTIONAL
|
|
);
|
|
|
|
DISKINFO_COMPARATION_STATUS
|
|
CompareDiskInfo(
|
|
IN DISKINFO * FirstInfo,
|
|
IN DISKINFO * SecondInfo
|
|
);
|
|
|
|
BOOL
|
|
CompareDisksInfo(
|
|
IN DISKINFO * FirstInfo,
|
|
IN DISKINFO * SecondInfo,
|
|
IN UINT DiskInfoCount,
|
|
OUT PDISKINFO_COMPARATION_STATUS OutDiskCmpStatus, OPTIONAL
|
|
OUT UINT * OutIfFailedDiskInfoIndex OPTIONAL
|
|
);
|
|
|
|
#define BACKUPIMAGEINFO_VERSION 2
|
|
|
|
#define DRIVE_LAYOUT_INFORMATION_EX_PERSISTENCE \
|
|
PERSIST_BEGIN_DECLARE_STRUCT(DRIVE_LAYOUT_INFORMATION_EX, BACKUPIMAGEINFO_VERSION) \
|
|
PERSIST_FIELD_BY_VALUE(DRIVE_LAYOUT_INFORMATION_EX, DWORD, PartitionStyle), \
|
|
PERSIST_FIELD_BY_VALUE(DRIVE_LAYOUT_INFORMATION_EX, DWORD, PartitionCount), \
|
|
PERSIST_FIELD_BY_VALUE(DRIVE_LAYOUT_INFORMATION_EX, DRIVE_LAYOUT_INFORMATION_MBR, Mbr), \
|
|
PERSIST_FIELD_BY_VALUE(DRIVE_LAYOUT_INFORMATION_EX, DRIVE_LAYOUT_INFORMATION_GPT, Gpt), \
|
|
PERSIST_STRUCT_BY_VALUE_VARIABLE_LENGTH(DRIVE_LAYOUT_INFORMATION_EX, PARTITION_INFORMATION_EX, PartitionEntry, PartitionCount, 1), \
|
|
PERSIST_END_DECLARE_STRUCT(DRIVE_LAYOUT_INFORMATION_EX, BACKUPIMAGEINFO_VERSION)
|
|
|
|
#define DISKINFO_PERSISTENCE PERSIST_BEGIN_DECLARE_STRUCT(DISKINFO, BACKUPIMAGEINFO_VERSION) \
|
|
PERSIST_FIELD_BY_VALUE(DISKINFO, DISK_GEOMETRY, DiskGeometry), \
|
|
PERSIST_FIELD_NESTED_TYPE(DISKINFO, DRIVE_LAYOUT_INFORMATION_EX, BACKUPIMAGEINFO_VERSION, DiskLayout, BYREF), \
|
|
PERSIST_END_DECLARE_STRUCT(DISKINFO, BACKUPIMAGEINFO_VERSION)
|
|
|
|
#define DRIVEINFO_PERSISTENCE PERSIST_BEGIN_DECLARE_STRUCT(DRIVEINFO, BACKUPIMAGEINFO_VERSION)\
|
|
PERSIST_FIELD_BY_VALUE(DRIVEINFO, WCHAR, Drive), \
|
|
PERSIST_FIELD_STRINGW(DRIVEINFO, FileSystemName), \
|
|
PERSIST_FIELD_BY_VALUE(DRIVEINFO, DWORD, FileSystemFlags), \
|
|
PERSIST_FIELD_STRINGW(DRIVEINFO, VolumeNTPath), \
|
|
PERSIST_END_DECLARE_STRUCT(DRIVEINFO, BACKUPIMAGEINFO_VERSION)
|
|
|
|
#define FILEINTEGRITYINFO_PERSISTENCE PERSIST_BEGIN_DECLARE_STRUCT(FILEINTEGRITYINFO, BACKUPIMAGEINFO_VERSION)\
|
|
PERSIST_FIELD_STRINGW(FILEINTEGRITYINFO, FileName), \
|
|
PERSIST_FIELD_BY_VALUE(FILEINTEGRITYINFO, BOOL, IsCab), \
|
|
PERSIST_FIELD_BY_VALUE(FILEINTEGRITYINFO, ULARGE_INTEGER, FileSize), \
|
|
PERSIST_END_DECLARE_STRUCT(FILEINTEGRITYINFO, BACKUPIMAGEINFO_VERSION)
|
|
|
|
#define BACKUPIMAGEINFO_PERSISTENCE PERSIST_BEGIN_DECLARE_STRUCT(BACKUPIMAGEINFO, BACKUPIMAGEINFO_VERSION)\
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, ULARGE_INTEGER, BootFilesDiskSpace), \
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, ULARGE_INTEGER, BackupFilesDiskSpace), \
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, ULARGE_INTEGER, UndoFilesDiskSpace), \
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, UINT, NumberOfDisks), \
|
|
PERSIST_FIELD_NESTED_TYPE_CYCLE(BACKUPIMAGEINFO, DISKINFO, BACKUPIMAGEINFO_VERSION, DisksInfo, BYREF, NumberOfDisks), \
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, UINT, NumberOfDrives), \
|
|
PERSIST_FIELD_NESTED_TYPE_CYCLE(BACKUPIMAGEINFO, DRIVEINFO, BACKUPIMAGEINFO_VERSION, DrivesInfo, BYREF, NumberOfDrives), \
|
|
PERSIST_FIELD_BY_VALUE(BACKUPIMAGEINFO, UINT, NumberOfFiles), \
|
|
PERSIST_FIELD_NESTED_TYPE_CYCLE(BACKUPIMAGEINFO, FILEINTEGRITYINFO, BACKUPIMAGEINFO_VERSION, FilesInfo, BYREF, NumberOfFiles), \
|
|
PERSIST_END_DECLARE_STRUCT(BACKUPIMAGEINFO, BACKUPIMAGEINFO_VERSION)
|
|
|
|
|
|
BOOL
|
|
IsFloppyDiskInDrive(
|
|
VOID
|
|
);
|
|
|
|
#endif
|
|
#endif
|