windows-nt/Source/XPSP1/NT/base/ntsetup/inc/compliance.h
2020-09-26 16:20:57 +08:00

366 lines
12 KiB
C

#ifndef _COMPLIANCE_H
#define _COMPLIANCE_H
#ifdef __cplusplus
extern "C" {
#endif
#define EVAL_MPC TEXT("82503")
#define SRV_NFR_MPC TEXT("51883")
#define ASRV_NFR_MPC TEXT("51882")
#define NT4SRV_NFR_MPC TEXT("51222")
#ifdef KERNEL_MODE
#define OEM_INSTALL_RPC L"OEM"
#define SELECT_INSTALL_RPC L"270"
#define MSDN_INSTALL_RPC L"335"
#endif
#define COMPLIANCE_INSTALLTYPE_UNKNOWN 0x00000000
#define COMPLIANCE_INSTALLTYPE_WIN31 0x00000001
#define COMPLIANCE_INSTALLTYPE_WIN9X 0x00000002
#define COMPLIANCE_INSTALLTYPE_NTW 0x00000004
#define COMPLIANCE_INSTALLTYPE_NTS 0x00000008
#define COMPLIANCE_INSTALLTYPE_NTSE 0x00000010
#define COMPLIANCE_INSTALLTYPE_NTSDTC 0x00000020
//
// this is for the downlevel terminal server edition product, which needs
// to be treated as an install type, not just a product suite. this includes
// nt4 terminal server edition as well as citrix winframe
//
#define COMPLIANCE_INSTALLTYPE_NTSTSE 0x00000040
#define COMPLIANCE_INSTALLTYPE_NTWP 0x00000080
#define COMPLIANCE_INSTALLTYPE_NTSB 0x00000100
#define COMPLIANCE_INSTALLTYPE_NTSBS 0x00000200
#define COMPLIANCE_INSTALLTYPE_ANY ( COMPLIANCE_INSTALLTYPE_WIN31 | \
COMPLIANCE_INSTALLTYPE_WIN9X | \
COMPLIANCE_INSTALLTYPE_NTW | \
COMPLIANCE_INSTALLTYPE_NTWP | \
COMPLIANCE_INSTALLTYPE_NTS | \
COMPLIANCE_INSTALLTYPE_NTSB | \
COMPLIANCE_INSTALLTYPE_NTSBS | \
COMPLIANCE_INSTALLTYPE_NTSE | \
COMPLIANCE_INSTALLTYPE_NTSDTC | \
COMPLIANCE_INSTALLTYPE_NTSTSE )
#define COMPLIANCE_INSTALLTYPE_NTANY ( COMPLIANCE_INSTALLTYPE_NTW | \
COMPLIANCE_INSTALLTYPE_NTWP | \
COMPLIANCE_INSTALLTYPE_NTS | \
COMPLIANCE_INSTALLTYPE_NTSB | \
COMPLIANCE_INSTALLTYPE_NTSBS | \
COMPLIANCE_INSTALLTYPE_NTSE | \
COMPLIANCE_INSTALLTYPE_NTSDTC | \
COMPLIANCE_INSTALLTYPE_NTSTSE )
#define COMPLIANCE_INSTALLVAR_UNKNOWN 0x00000000
#define COMPLIANCE_INSTALLVAR_SELECT 0x00000001
#define COMPLIANCE_INSTALLVAR_MSDN 0x00000002
#define COMPLIANCE_INSTALLVAR_OEM 0x00000004
#define COMPLIANCE_INSTALLVAR_CDRETAIL 0x00000008
#define COMPLIANCE_INSTALLVAR_FLOPPYRETAIL 0x00000010 // win95 only!
#define COMPLIANCE_INSTALLVAR_EVAL 0x00000020
#define COMPLIANCE_INSTALLVAR_NFR 0x00000040
#define COMPLIANCE_INSTALLVAR_ANY ( COMPLIANCE_INSTALLVAR_SELECT | \
COMPLIANCE_INSTALLVAR_MSDN | \
COMPLIANCE_INSTALLVAR_OEM | \
COMPLIANCE_INSTALLVAR_CDRETAIL | \
COMPLIANCE_INSTALLVAR_EVAL | \
COMPLIANCE_INSTALLVAR_NFR | \
COMPLIANCE_INSTALLVAR_FLOPPYRETAIL )
#define COMPLIANCE_INSTALLSUITE_UNKNOWN 0x00000000
#define COMPLIANCE_INSTALLSUITE_NONE 0x00000001
#define COMPLIANCE_INSTALLSUITE_SBS 0x00000002
#define COMPLIANCE_INSTALLSUITE_SBSR 0x00000004
#define COMPLIANCE_INSTALLSUITE_ENT 0x00000008
#define COMPLIANCE_INSTALLSUITE_COMM 0x00000010
#define COMPLIANCE_INSTALLSUITE_HYDRA 0x00000020
#define COMPLIANCE_INSTALLSUITE_TERMINAL COMPLIANCE_INSTALLSUITE_HYDRA
#define COMPLIANCE_INSTALLSUITE_BACK 0x00000040
#define COMPLIANCE_INSTALLSUITE_EMBED 0x00000080
#define COMPLIANCE_INSTALLSUITE_DTC 0x00000100
#define COMPLIANCE_INSTALLSUITE_PER 0x00000200
#define COMPLIANCE_INSTALLSUITE_BLADE 0x00000400
#define COMPLIANCE_INSTALLSUITE_ANY ( COMPLIANCE_INSTALLSUITE_SBS | \
COMPLIANCE_INSTALLSUITE_SBSR | \
COMPLIANCE_INSTALLSUITE_ENT | \
COMPLIANCE_INSTALLSUITE_COMM | \
COMPLIANCE_INSTALLSUITE_HYDRA | \
COMPLIANCE_INSTALLSUITE_BACK | \
COMPLIANCE_INSTALLSUITE_EMBED | \
COMPLIANCE_INSTALLSUITE_DTC | \
COMPLIANCE_INSTALLSUITE_BLADE | \
COMPLIANCE_INSTALLSUITE_PER )
#define COMPLIANCEERR_NONE 0x00000000
#define COMPLIANCEERR_VERSION 0x00000001
#define COMPLIANCEERR_SUITE 0x00000002
#define COMPLIANCEERR_TYPE 0x00000003
#define COMPLIANCEERR_VARIATION 0x00000004
#define COMPLIANCEERR_UNKNOWNTARGET 0x00000005
#define COMPLIANCEERR_UNKNOWNSOURCE 0x00000006
#define COMPLIANCEERR_SERVICEPACK5 0x00000007
#define COMPLIANCEERR_UNKNOWN COMPLIANCEERR_UNKNOWNSOURCE
#define COMPLIANCE_SKU_NONE 0x00000000
#define COMPLIANCE_SKU_NTWFULL 0x00000001
#define COMPLIANCE_SKU_NTW32U 0x00000002
//#define COMPLIANCE_SKU_NTWU 0x00000003
#define COMPLIANCE_SKU_NTSEFULL 0x00000004
#define COMPLIANCE_SKU_NTSFULL 0x00000005
#define COMPLIANCE_SKU_NTSEU 0x00000006
//#define COMPLIANCE_SKU_NTSSEU 0x00000007
#define COMPLIANCE_SKU_NTSU 0x00000008
#define COMPLIANCE_SKU_NTSDTC 0x00000009
//#define COMPLIANCE_SKU_NTSDTCU 0x0000000a
#define COMPLIANCE_SKU_NTWPFULL 0x0000000b
#define COMPLIANCE_SKU_NTWPU 0x0000000c
#define COMPLIANCE_SKU_NTSB 0x0000000d
#define COMPLIANCE_SKU_NTSBU 0x0000000e
#define COMPLIANCE_SKU_NTSBS 0x00000010
#define COMPLIANCE_SKU_NTSBSU 0x00000011
#define COMPLIANCE_SKU_STEPUP 0x00010000
#define COMPLIANCE_SKU_STEPUP_WIN9X 0x00020000
typedef struct _COMPLIANCE_DATA {
DWORD InstallType; // mask describing install type
DWORD InstallVariation; // mask describing install variation
DWORD InstallSuite; // mask describing install suite
BOOL RequiresValidation; // do we need to do validation for this SKU?
DWORD MinimumVersion; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
DWORD MaximumKnownVersionNt; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
DWORD BuildNumberNt; //
DWORD BuildNumberWin9x; //
DWORD InstallServicePack; // Service Pack number
} COMPLIANCE_DATA, *PCOMPLIANCE_DATA;
typedef struct _COMPLIANCE_SRC {
DWORD InstallType; // mask describing install type
DWORD InstallVariation; // mask describing install variation
DWORD InstallSuite; // mask describing install suite
DWORD Version; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
} COMPLIANCE_SRC, *PCOMPLIANCE_SRC;
//
// The install media object abstraction
//
//
// media object this pointer
//
typedef struct _st_CCMEDIA *PCCMEDIA;
//
// Compliance checking method of media object
//
typedef BOOLEAN (* PCC_CHECK_FUNCTION)(
IN PCCMEDIA This,
IN PCOMPLIANCE_DATA CompData,
OUT PUINT FailureReason,
OUT PBOOL NoUpgradeAllowed );
//
// install media object
//
typedef struct _st_CCMEDIA {
DWORD SourceType;
DWORD SourceVariation;
DWORD Version; // major * 100 + minor
DWORD BuildNumber;
BOOLEAN StepUpMedia;
PCC_CHECK_FUNCTION CheckInstall; // compliance check method
} CCMEDIA;
//
// common prototypes
//
PCCMEDIA
CCMediaCreate(
IN DWORD SourceSKU,
IN DWORD SourceVariation,
IN OPTIONAL DWORD Version,
IN OPTIONAL DWORD BuildNumber );
BOOLEAN
CCMediaInitialize(
OUT PCCMEDIA DestMedia,
IN DWORD Type,
IN DWORD Variation,
IN BOOLEAN StepupMedia,
IN OPTIONAL DWORD Version,
IN OPTIONAL DWORD BuildNumber);
BOOLEAN
CheckCompliance(
IN DWORD SourceSku,
IN DWORD SourceVariation,
IN DWORD SourceVersion,
IN DWORD SourceBuildNum,
IN PCOMPLIANCE_DATA Destination,
OUT PUINT Reason,
OUT PBOOL NoUpgradeAllowed
);
DWORD
DetermineSourceProduct(
OUT DWORD *SourceSkuVariation,
IN PCOMPLIANCE_DATA pcd
);
BOOL
GetSourceComplianceData(
OUT PCOMPLIANCE_DATA pcd,
IN PCOMPLIANCE_DATA Target
);
DWORD
CRC_32(
LPBYTE pb,
DWORD cb
);
BOOL
IsValidStepUpMode(
CHAR *StepUpArray,
ULONG *StepUpMode
);
//
// kernel mode prototypes
//
#ifdef KERNEL_MODE
BOOLEAN
pSpIsCompliant(
IN DWORD SourceVersion,
IN DWORD SourceBuildNum,
IN PDISK_REGION OsPartRegion,
IN PWSTR SystemRoot,
OUT PBOOLEAN UpgradeOnlyCompliant
);
BOOLEAN
pSpDetermineCurrentInstallation(
IN PDISK_REGION OsPartRegion,
IN PWSTR SystemRoot,
OUT PCOMPLIANCE_DATA pcd
);
BOOLEAN
pSpGetCurrentInstallVariation(
IN PWSTR szPid20,
OUT LPDWORD CurrentInstallVariation
);
BOOL
pSpDetermineSourceProduct(
OUT PCOMPLIANCE_DATA pcd
);
BOOLEAN
SpGetStepUpMode(
PWSTR PidExtraData,
BOOLEAN *StepUpMode
);
BOOLEAN
DetermineSourceVersionInfo(
OUT PDWORD Version,
OUT PDWORD BuildNumber
);
#define CCMemAlloc SpMemAlloc
#define CCMemFree SpMemFree
#else
//
// user mode prototypes
//
VOID
CCDisableBuildCheck(
VOID
);
BOOL
IsCompliant(
PBOOL UpgradeOnly,
PBOOL NoUpgradeAllowed,
PUINT SrcSku,
PUINT CurrentInstallType,
PUINT CurrentInstallBuild,
PUINT Reason
);
BOOLEAN
DetermineSourceVersionInfo(
IN TCHAR *InfPath,
OUT PDWORD Version,
OUT PDWORD BuildNumber
);
BOOL
DetermineCurrentInstallation(
LPDWORD CurrentInstallType,
LPDWORD CurrentInstallVariation,
LPDWORD CurrentInstallVersion,
LPDWORD CurrentInstallBuildNT,
LPDWORD CurrentInstallBuildWin9x,
LPDWORD CurrentInstallSuite,
LPDWORD CurrentInstallServicePack
);
BOOL
GetCurrentInstallVariation(
LPDWORD CurrentInstallVariation,
IN DWORD CurrentInstallType,
IN DWORD CurrentInstallBuildNT,
IN DWORD InstallVersion
);
BOOL
GetCurrentNtVersion(
LPDWORD CurrentInstallType,
LPDWORD CurrentInstallSuite
);
BOOL
GetCdSourceInstallType(
LPDWORD SourceInstallType
);
BOOL
GetSourceInstallVariation(
LPDWORD SourceInstallVariation
);
BOOL
IsWinPEMode(
VOID
);
#define CCMemAlloc malloc
#define CCMemFree free
#endif
#ifdef __cplusplus
} /* End of extern "C" { */
#endif /* __cplusplus */
#endif // _COMPLIANCE_H