Leaked source code of windows server 2003
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.

373 lines
12 KiB

  1. #ifndef _COMPLIANCE_H
  2. #define _COMPLIANCE_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #define EVAL_MPC TEXT("82503")
  7. #define DOTNET_EVAL_MPC TEXT("69763")
  8. #define SRV_NFR_MPC TEXT("51883")
  9. #define ASRV_NFR_MPC TEXT("51882")
  10. #define NT4SRV_NFR_MPC TEXT("51222")
  11. #ifdef KERNEL_MODE
  12. #define OEM_INSTALL_RPC L"OEM"
  13. #define SELECT_INSTALL_RPC L"270"
  14. #define MSDN_INSTALL_RPC L"335"
  15. #endif
  16. #define COMPLIANCE_INSTALLTYPE_UNKNOWN 0x00000000
  17. #define COMPLIANCE_INSTALLTYPE_WIN31 0x00000001
  18. #define COMPLIANCE_INSTALLTYPE_WIN9X 0x00000002
  19. #define COMPLIANCE_INSTALLTYPE_NTW 0x00000004
  20. #define COMPLIANCE_INSTALLTYPE_NTS 0x00000008
  21. #define COMPLIANCE_INSTALLTYPE_NTSE 0x00000010
  22. #define COMPLIANCE_INSTALLTYPE_NTSDTC 0x00000020
  23. //
  24. // this is for the downlevel terminal server edition product, which needs
  25. // to be treated as an install type, not just a product suite. this includes
  26. // nt4 terminal server edition as well as citrix winframe
  27. //
  28. #define COMPLIANCE_INSTALLTYPE_NTSTSE 0x00000040
  29. #define COMPLIANCE_INSTALLTYPE_NTWP 0x00000080
  30. #define COMPLIANCE_INSTALLTYPE_NTSB 0x00000100
  31. #define COMPLIANCE_INSTALLTYPE_NTSBS 0x00000200
  32. //
  33. // Powered Windows uses the same suite as blade and enterprise
  34. // However, we need to have it as a separate type for compliance to work
  35. #define COMPLIANCE_INSTALLTYPE_NTSPOW 0x00000400
  36. #define COMPLIANCE_INSTALLTYPE_ANY ( COMPLIANCE_INSTALLTYPE_WIN31 | \
  37. COMPLIANCE_INSTALLTYPE_WIN9X | \
  38. COMPLIANCE_INSTALLTYPE_NTW | \
  39. COMPLIANCE_INSTALLTYPE_NTWP | \
  40. COMPLIANCE_INSTALLTYPE_NTS | \
  41. COMPLIANCE_INSTALLTYPE_NTSB | \
  42. COMPLIANCE_INSTALLTYPE_NTSBS | \
  43. COMPLIANCE_INSTALLTYPE_NTSE | \
  44. COMPLIANCE_INSTALLTYPE_NTSDTC | \
  45. COMPLIANCE_INSTALLTYPE_NTSTSE | \
  46. COMPLIANCE_INSTALLTYPE_NTSPOW )
  47. #define COMPLIANCE_INSTALLTYPE_NTANY ( COMPLIANCE_INSTALLTYPE_NTW | \
  48. COMPLIANCE_INSTALLTYPE_NTWP | \
  49. COMPLIANCE_INSTALLTYPE_NTS | \
  50. COMPLIANCE_INSTALLTYPE_NTSB | \
  51. COMPLIANCE_INSTALLTYPE_NTSBS | \
  52. COMPLIANCE_INSTALLTYPE_NTSE | \
  53. COMPLIANCE_INSTALLTYPE_NTSDTC | \
  54. COMPLIANCE_INSTALLTYPE_NTSTSE | \
  55. COMPLIANCE_INSTALLTYPE_NTSPOW )
  56. #define COMPLIANCE_INSTALLVAR_UNKNOWN 0x00000000
  57. #define COMPLIANCE_INSTALLVAR_SELECT 0x00000001
  58. #define COMPLIANCE_INSTALLVAR_MSDN 0x00000002
  59. #define COMPLIANCE_INSTALLVAR_OEM 0x00000004
  60. #define COMPLIANCE_INSTALLVAR_CDRETAIL 0x00000008
  61. #define COMPLIANCE_INSTALLVAR_FLOPPYRETAIL 0x00000010 // win95 only!
  62. #define COMPLIANCE_INSTALLVAR_EVAL 0x00000020
  63. #define COMPLIANCE_INSTALLVAR_NFR 0x00000040
  64. #define COMPLIANCE_INSTALLVAR_ANY ( COMPLIANCE_INSTALLVAR_SELECT | \
  65. COMPLIANCE_INSTALLVAR_MSDN | \
  66. COMPLIANCE_INSTALLVAR_OEM | \
  67. COMPLIANCE_INSTALLVAR_CDRETAIL | \
  68. COMPLIANCE_INSTALLVAR_EVAL | \
  69. COMPLIANCE_INSTALLVAR_NFR | \
  70. COMPLIANCE_INSTALLVAR_FLOPPYRETAIL )
  71. #define COMPLIANCE_INSTALLSUITE_UNKNOWN 0x00000000
  72. #define COMPLIANCE_INSTALLSUITE_NONE 0x00000001
  73. #define COMPLIANCE_INSTALLSUITE_SBS 0x00000002
  74. #define COMPLIANCE_INSTALLSUITE_SBSR 0x00000004
  75. #define COMPLIANCE_INSTALLSUITE_ENT 0x00000008
  76. #define COMPLIANCE_INSTALLSUITE_COMM 0x00000010
  77. #define COMPLIANCE_INSTALLSUITE_HYDRA 0x00000020
  78. #define COMPLIANCE_INSTALLSUITE_TERMINAL COMPLIANCE_INSTALLSUITE_HYDRA
  79. #define COMPLIANCE_INSTALLSUITE_BACK 0x00000040
  80. #define COMPLIANCE_INSTALLSUITE_EMBED 0x00000080
  81. #define COMPLIANCE_INSTALLSUITE_DTC 0x00000100
  82. #define COMPLIANCE_INSTALLSUITE_PER 0x00000200
  83. #define COMPLIANCE_INSTALLSUITE_BLADE 0x00000400
  84. #define COMPLIANCE_INSTALLSUITE_ANY ( COMPLIANCE_INSTALLSUITE_SBS | \
  85. COMPLIANCE_INSTALLSUITE_SBSR | \
  86. COMPLIANCE_INSTALLSUITE_ENT | \
  87. COMPLIANCE_INSTALLSUITE_COMM | \
  88. COMPLIANCE_INSTALLSUITE_HYDRA | \
  89. COMPLIANCE_INSTALLSUITE_BACK | \
  90. COMPLIANCE_INSTALLSUITE_EMBED | \
  91. COMPLIANCE_INSTALLSUITE_DTC | \
  92. COMPLIANCE_INSTALLSUITE_BLADE | \
  93. COMPLIANCE_INSTALLSUITE_PER )
  94. #define COMPLIANCEERR_NONE 0x00000000
  95. #define COMPLIANCEERR_VERSION 0x00000001
  96. #define COMPLIANCEERR_SUITE 0x00000002
  97. #define COMPLIANCEERR_TYPE 0x00000003
  98. #define COMPLIANCEERR_VARIATION 0x00000004
  99. #define COMPLIANCEERR_UNKNOWNTARGET 0x00000005
  100. #define COMPLIANCEERR_UNKNOWNSOURCE 0x00000006
  101. #define COMPLIANCEERR_SERVICEPACK5 0x00000007
  102. #define COMPLIANCEERR_DTCWARNING 0x00000008
  103. #define COMPLIANCEERR_UNKNOWN COMPLIANCEERR_UNKNOWNSOURCE
  104. #define COMPLIANCE_SKU_NONE 0x00000000
  105. #define COMPLIANCE_SKU_NTWFULL 0x00000001
  106. #define COMPLIANCE_SKU_NTW32U 0x00000002
  107. //#define COMPLIANCE_SKU_NTWU 0x00000003
  108. #define COMPLIANCE_SKU_NTSEFULL 0x00000004
  109. #define COMPLIANCE_SKU_NTSFULL 0x00000005
  110. #define COMPLIANCE_SKU_NTSEU 0x00000006
  111. //#define COMPLIANCE_SKU_NTSSEU 0x00000007
  112. #define COMPLIANCE_SKU_NTSU 0x00000008
  113. #define COMPLIANCE_SKU_NTSDTC 0x00000009
  114. //#define COMPLIANCE_SKU_NTSDTCU 0x0000000a
  115. #define COMPLIANCE_SKU_NTWPFULL 0x0000000b
  116. #define COMPLIANCE_SKU_NTWPU 0x0000000c
  117. #define COMPLIANCE_SKU_NTSB 0x0000000d
  118. #define COMPLIANCE_SKU_NTSBU 0x0000000e
  119. #define COMPLIANCE_SKU_NTSBS 0x00000010
  120. #define COMPLIANCE_SKU_NTSBSU 0x00000011
  121. #define COMPLIANCE_SKU_STEPUP 0x00010000
  122. #define COMPLIANCE_SKU_STEPUP_WIN9X 0x00020000
  123. typedef struct _COMPLIANCE_DATA {
  124. DWORD InstallType; // mask describing install type
  125. DWORD InstallVariation; // mask describing install variation
  126. DWORD InstallSuite; // mask describing install suite
  127. BOOL RequiresValidation; // do we need to do validation for this SKU?
  128. DWORD MinimumVersion; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
  129. DWORD MaximumKnownVersionNt; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
  130. DWORD BuildNumberNt; //
  131. DWORD BuildNumberWin9x; //
  132. DWORD InstallServicePack; // Service Pack number
  133. } COMPLIANCE_DATA, *PCOMPLIANCE_DATA;
  134. typedef struct _COMPLIANCE_SRC {
  135. DWORD InstallType; // mask describing install type
  136. DWORD InstallVariation; // mask describing install variation
  137. DWORD InstallSuite; // mask describing install suite
  138. DWORD Version; // expressed as (majorversion.minorversion * 100), i.e., 3.51 == 351, 5.0 == 500, etc...
  139. } COMPLIANCE_SRC, *PCOMPLIANCE_SRC;
  140. //
  141. // The install media object abstraction
  142. //
  143. //
  144. // media object this pointer
  145. //
  146. typedef struct _st_CCMEDIA *PCCMEDIA;
  147. //
  148. // Compliance checking method of media object
  149. //
  150. typedef BOOLEAN (* PCC_CHECK_FUNCTION)(
  151. IN PCCMEDIA This,
  152. IN PCOMPLIANCE_DATA CompData,
  153. OUT PUINT FailureReason,
  154. OUT PBOOL NoUpgradeAllowed );
  155. //
  156. // install media object
  157. //
  158. typedef struct _st_CCMEDIA {
  159. DWORD SourceType;
  160. DWORD SourceVariation;
  161. DWORD Version; // major * 100 + minor
  162. DWORD BuildNumber;
  163. BOOLEAN StepUpMedia;
  164. PCC_CHECK_FUNCTION CheckInstall; // compliance check method
  165. } CCMEDIA;
  166. //
  167. // common prototypes
  168. //
  169. PCCMEDIA
  170. CCMediaCreate(
  171. IN DWORD SourceSKU,
  172. IN DWORD SourceVariation,
  173. IN OPTIONAL DWORD Version,
  174. IN OPTIONAL DWORD BuildNumber );
  175. BOOLEAN
  176. CCMediaInitialize(
  177. OUT PCCMEDIA DestMedia,
  178. IN DWORD Type,
  179. IN DWORD Variation,
  180. IN BOOLEAN StepupMedia,
  181. IN OPTIONAL DWORD Version,
  182. IN OPTIONAL DWORD BuildNumber);
  183. BOOLEAN
  184. CheckCompliance(
  185. IN DWORD SourceSku,
  186. IN DWORD SourceVariation,
  187. IN DWORD SourceVersion,
  188. IN DWORD SourceBuildNum,
  189. IN PCOMPLIANCE_DATA Destination,
  190. OUT PUINT Reason,
  191. OUT PBOOL NoUpgradeAllowed
  192. );
  193. DWORD
  194. DetermineSourceProduct(
  195. OUT DWORD *SourceSkuVariation,
  196. IN PCOMPLIANCE_DATA pcd
  197. );
  198. BOOL
  199. GetSourceComplianceData(
  200. OUT PCOMPLIANCE_DATA pcd,
  201. IN PCOMPLIANCE_DATA Target
  202. );
  203. DWORD
  204. CRC_32(
  205. LPBYTE pb,
  206. DWORD cb
  207. );
  208. BOOL
  209. IsValidStepUpMode(
  210. CHAR *StepUpArray,
  211. ULONG *StepUpMode
  212. );
  213. //
  214. // kernel mode prototypes
  215. //
  216. #ifdef KERNEL_MODE
  217. BOOLEAN
  218. pSpIsCompliant(
  219. IN DWORD SourceVersion,
  220. IN DWORD SourceBuildNum,
  221. IN PDISK_REGION OsPartRegion,
  222. IN PWSTR SystemRoot,
  223. OUT PBOOLEAN UpgradeOnlyCompliant
  224. );
  225. BOOLEAN
  226. pSpDetermineCurrentInstallation(
  227. IN PDISK_REGION OsPartRegion,
  228. IN PWSTR SystemRoot,
  229. OUT PCOMPLIANCE_DATA pcd
  230. );
  231. BOOLEAN
  232. pSpGetCurrentInstallVariation(
  233. IN PWSTR szPid20,
  234. OUT LPDWORD CurrentInstallVariation
  235. );
  236. BOOL
  237. pSpDetermineSourceProduct(
  238. OUT PCOMPLIANCE_DATA pcd
  239. );
  240. BOOLEAN
  241. SpGetStepUpMode(
  242. PWSTR PidExtraData,
  243. BOOLEAN *StepUpMode
  244. );
  245. BOOLEAN
  246. DetermineSourceVersionInfo(
  247. OUT PDWORD Version,
  248. OUT PDWORD BuildNumber
  249. );
  250. #define CCMemAlloc SpMemAlloc
  251. #define CCMemFree SpMemFree
  252. #else
  253. //
  254. // user mode prototypes
  255. //
  256. VOID
  257. CCDisableBuildCheck(
  258. VOID
  259. );
  260. BOOL
  261. IsCompliant(
  262. PBOOL UpgradeOnly,
  263. PBOOL NoUpgradeAllowed,
  264. PUINT SrcSku,
  265. PUINT CurrentInstallType,
  266. PUINT CurrentInstallBuild,
  267. PUINT Reason
  268. );
  269. BOOLEAN
  270. DetermineSourceVersionInfo(
  271. IN TCHAR *InfPath,
  272. OUT PDWORD Version,
  273. OUT PDWORD BuildNumber
  274. );
  275. BOOL
  276. DetermineCurrentInstallation(
  277. LPDWORD CurrentInstallType,
  278. LPDWORD CurrentInstallVariation,
  279. LPDWORD CurrentInstallVersion,
  280. LPDWORD CurrentInstallBuildNT,
  281. LPDWORD CurrentInstallBuildWin9x,
  282. LPDWORD CurrentInstallSuite,
  283. LPDWORD CurrentInstallServicePack
  284. );
  285. BOOL
  286. GetCurrentInstallVariation(
  287. LPDWORD CurrentInstallVariation,
  288. IN DWORD CurrentInstallType,
  289. IN DWORD CurrentInstallBuildNT,
  290. IN DWORD InstallVersion
  291. );
  292. BOOL
  293. GetCurrentNtVersion(
  294. LPDWORD CurrentInstallType,
  295. LPDWORD CurrentInstallSuite
  296. );
  297. BOOL
  298. GetCdSourceInstallType(
  299. LPDWORD SourceInstallType
  300. );
  301. BOOL
  302. GetSourceInstallVariation(
  303. LPDWORD SourceInstallVariation
  304. );
  305. BOOL
  306. IsWinPEMode(
  307. VOID
  308. );
  309. #define CCMemAlloc malloc
  310. #define CCMemFree free
  311. #endif
  312. #ifdef __cplusplus
  313. } /* End of extern "C" { */
  314. #endif /* __cplusplus */
  315. #endif // _COMPLIANCE_H