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.

581 lines
13 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. common.h
  5. Abstract:
  6. This module defines the data structures and function prototypes
  7. shared by both SCE client and SCE server
  8. Author:
  9. Jin Huang (jinhuang) 23-Jan-1998
  10. Revision History:
  11. jinhuang (splitted from scep.h)
  12. --*/
  13. #ifndef _scecommon_
  14. #define _scecommon_
  15. typedef enum _SECURITY_DB_TYPE {
  16. SecurityDbSam = 1,
  17. SecurityDbLsa
  18. } SECURITY_DB_TYPE, *PSECURITY_DB_TYPE;
  19. #define SCE_TEMPLATE_MAX_SUPPORTED_VERSION 1
  20. #define szLegalNoticeTextKeyName L"MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\LegalNoticeText"
  21. #include "dsrole.h"
  22. //
  23. // type of system access lookup table
  24. //
  25. #define SCESETUP_UPDATE_DB_ONLY 0x1000L
  26. #define SCE_SYSTEM_DB 0x0100L
  27. #define SCE_CREATE_BUILTIN_ACCOUNTS 0x0200L
  28. #define SCE_POLBIND_NO_AUTH 0x0400L
  29. #define SCE_NO_ANALYZE 0x0800L
  30. #define SCE_NO_DOMAIN_POLICY 0x2000L
  31. #define SCE_NOCOPY_DOMAIN_POLICY 0x4000L
  32. #define SCE_COPY_LOCAL_POLICY 0x8000L
  33. #define SCE_POLICY_TEMPLATE 0x00010000L
  34. #define SCE_POLICY_FIRST 0x00020000L
  35. #define SCE_POLICY_LAST 0x00040000L
  36. #define SCE_SYSTEM_SETTINGS 0x00080000L
  37. #define SCE_DCPROMO_WAIT 0x00100000L
  38. #define SCE_SERVICE_NO_REALTIME_ENFORCE 0x00200000L
  39. #define SCE_NO_CONFIG_FILEKEY 0x00400000L
  40. #define SCE_DC_DEMOTE 0x00800000L
  41. #define SCE_RE_ANALYZE 0x01000000L
  42. #define SCE_RSOP_CALLBACK 0x02000000L
  43. #define SCE_GENERATE_ROLLBACK 0x04000000L
  44. #define SCE_FLAG_WINDOWS_DIR 1
  45. #define SCE_FLAG_SYSTEM_DIR 2
  46. #define SCE_FLAG_DSDIT_DIR 3
  47. #define SCE_FLAG_DSLOG_DIR 4
  48. #define SCE_FLAG_SYSVOL_DIR 5
  49. #define SCE_FLAG_BOOT_DRIVE 6
  50. #define SCE_FLAG_PROFILES_DIR 7
  51. #define SCE_GROUP_STATUS_DONE_IN_DS 0x80000000L
  52. #define SCEP_ADL_HTABLE_SIZE 256
  53. #define RELATIVE_SID_PREFIX L'#'
  54. #define RELATIVE_SID_PREFIX_SZ L"#"
  55. #define STRING_SID_SUBAUTH_SEPARATOR L'-'
  56. //
  57. // Macros to extract the SID from a object ACE
  58. //
  59. #define ScepObjectAceObjectTypePresent( Ace ) \
  60. ((((SCEP_PKNOWN_OBJECT_ACE)(Ace))->Flags & ACE_OBJECT_TYPE_PRESENT) != 0 )
  61. #define ScepObjectAceInheritedObjectTypePresent( Ace ) \
  62. ((((SCEP_PKNOWN_OBJECT_ACE)(Ace))->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) != 0 )
  63. #define ScepObjectAceSid( Ace ) \
  64. ((PSID)(((PUCHAR)&(((SCEP_PKNOWN_OBJECT_ACE)(Ace))->SidStart)) + \
  65. (ScepObjectAceObjectTypePresent(Ace) ? sizeof(GUID) : 0 ) + \
  66. (ScepObjectAceInheritedObjectTypePresent(Ace) ? sizeof(GUID) : 0 )))
  67. #define ScepObjectAceObjectType( Ace ) \
  68. ((GUID *)(ScepObjectAceObjectTypePresent(Ace) ? \
  69. &((SCEP_PKNOWN_OBJECT_ACE)(Ace))->SidStart : \
  70. NULL ))
  71. #define ScepObjectAceInheritedObjectType( Ace ) \
  72. ((GUID *)(ScepObjectAceInheritedObjectTypePresent(Ace) ? \
  73. ( ScepObjectAceObjectTypePresent(Ace) ? \
  74. (PULONG)(((PUCHAR)(&((SCEP_PKNOWN_OBJECT_ACE)(Ace))->SidStart)) + sizeof(GUID)) : \
  75. &((SCEP_PKNOWN_OBJECT_ACE)(Ace))->SidStart ) : \
  76. NULL ))
  77. static GENERIC_MAPPING FileGenericMapping = {
  78. FILE_GENERIC_READ,
  79. FILE_GENERIC_WRITE,
  80. FILE_GENERIC_EXECUTE,
  81. FILE_ALL_ACCESS
  82. };
  83. static GENERIC_MAPPING KeyGenericMapping = {
  84. KEY_READ,
  85. KEY_WRITE,
  86. KEY_EXECUTE,
  87. KEY_ALL_ACCESS
  88. };
  89. #define SERVICE_GENERIC_READ (STANDARD_RIGHTS_READ |\
  90. SERVICE_QUERY_CONFIG |\
  91. SERVICE_QUERY_STATUS |\
  92. SERVICE_ENUMERATE_DEPENDENTS |\
  93. SERVICE_INTERROGATE |\
  94. SERVICE_USER_DEFINED_CONTROL)
  95. #define SERVICE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
  96. SERVICE_START |\
  97. SERVICE_STOP |\
  98. SERVICE_PAUSE_CONTINUE |\
  99. SERVICE_INTERROGATE |\
  100. SERVICE_USER_DEFINED_CONTROL)
  101. #define SERVICE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
  102. SERVICE_CHANGE_CONFIG )
  103. static GENERIC_MAPPING SvcGenMap = {
  104. SERVICE_GENERIC_READ,
  105. SERVICE_GENERIC_WRITE,
  106. SERVICE_GENERIC_EXECUTE,
  107. SERVICE_ALL_ACCESS
  108. };
  109. typedef struct _SCE_KEY_LOOKUP {
  110. PWSTR KeyString;
  111. UINT Offset;
  112. CHAR BufferType;
  113. }SCE_KEY_LOOKUP;
  114. typedef struct _SCE_TATTOO_KEYS_ {
  115. PWSTR KeyName;
  116. DWORD KeyLen;
  117. CHAR DataType;
  118. DWORD SaveValue;
  119. PWSTR Value;
  120. }SCE_TATTOO_KEYS;
  121. typedef struct _SCEP_HANDLE_ {
  122. PVOID hProfile;
  123. PCWSTR ServiceName;
  124. } SCEP_HANDLE, *PSCEP_HANDLE;
  125. //
  126. // ACE template on which extraction macros are based on
  127. //
  128. typedef struct _SCEP_KNOWN_OBJECT_ACE {
  129. ACE_HEADER Header;
  130. ACCESS_MASK Mask;
  131. ULONG Flags;
  132. // GUID ObjectType; // Optionally present
  133. // GUID InheritedObjectType; // Optionally present
  134. ULONG SidStart;
  135. } SCEP_KNOWN_OBJECT_ACE, *SCEP_PKNOWN_OBJECT_ACE;
  136. typedef struct _SCEP_ADL_NODE_ {
  137. PISID pSid;
  138. GUID *pGuidObjectType;
  139. GUID *pGuidInheritedObjectType;
  140. UCHAR AceType;
  141. DWORD dwEffectiveMask;
  142. DWORD dw_CI_IO_Mask;
  143. DWORD dw_OI_IO_Mask;
  144. DWORD dw_NP_CI_IO_Mask;
  145. struct _SCEP_ADL_NODE_ *Next;
  146. } SCEP_ADL_NODE, *PSCEP_ADL_NODE;
  147. #define TICKS_PRIVILEGE 15
  148. #define TICKS_GROUPS 15
  149. #define TICKS_SYSTEM_ACCESS 3
  150. #define TICKS_SYSTEM_AUDITING 3
  151. #define TICKS_KERBEROS 3
  152. #define TICKS_REGISTRY_VALUES 4
  153. #define TICKS_GENERAL_SERVICES 10
  154. #define TICKS_SPECIFIC_SERVICES 5
  155. #define TICKS_SPECIFIC_POLICIES 5
  156. #define TICKS_SECURITY_POLICY_DS ( TICKS_SYSTEM_ACCESS + \
  157. TICKS_SYSTEM_AUDITING + \
  158. TICKS_REGISTRY_VALUES + \
  159. TICKS_KERBEROS )
  160. #define TICKS_MIGRATION_SECTION 100
  161. #define TICKS_MIGRATION_V11 50
  162. #define SCE_OPEN_OPTION_REQUIRE_ANALYSIS 1
  163. #define SCE_OPEN_OPTION_TATTOO 2
  164. #define SCE_RESET_POLICY_KEEP_LOCAL 0x1
  165. #define SCE_RESET_POLICY_ENFORCE_ATREBOOT 0x2
  166. #define SCE_RESET_POLICY_SYSPREP 0x4
  167. #define SCE_RESET_POLICY_TATTOO 0x8
  168. #define ARRAYSIZE(a) (sizeof(a)/sizeof((a)[0]))
  169. //
  170. // strsd.c
  171. //
  172. DWORD
  173. WINAPI
  174. ConvertTextSecurityDescriptor (
  175. IN PWSTR pwszTextSD,
  176. OUT PSECURITY_DESCRIPTOR *ppSD,
  177. OUT PULONG pcSDSize,
  178. OUT PSECURITY_INFORMATION pSeInfo
  179. );
  180. DWORD
  181. WINAPI
  182. ConvertSecurityDescriptorToText (
  183. IN PSECURITY_DESCRIPTOR pSD,
  184. IN SECURITY_INFORMATION SecurityInfo,
  185. OUT PWSTR *ppwszTextSD,
  186. OUT PULONG pcTextSize
  187. );
  188. //
  189. // defined in common.cpp
  190. //
  191. SCESTATUS
  192. ScepDosErrorToSceStatus(
  193. DWORD rc
  194. );
  195. SCESTATUS
  196. WINAPI
  197. SceSvcpGetInformationTemplate(
  198. IN HINF hInf,
  199. IN PCWSTR ServiceName,
  200. IN PCWSTR Key OPTIONAL,
  201. OUT PSCESVC_CONFIGURATION_INFO *ServiceInfo
  202. );
  203. SCESTATUS
  204. ScepBuildErrorLogInfo(
  205. IN DWORD rc,
  206. OUT PSCE_ERROR_LOG_INFO *Errlog,
  207. IN UINT nId,
  208. // IN PCWSTR fmt,
  209. ...
  210. );
  211. DWORD
  212. ScepAddToNameList(
  213. OUT PSCE_NAME_LIST *pNameList,
  214. IN PWSTR Name,
  215. IN ULONG Len
  216. );
  217. DWORD
  218. ScepRegQueryIntValue(
  219. IN HKEY hKeyRoot,
  220. IN PWSTR SubKey,
  221. IN PWSTR ValueName,
  222. OUT DWORD *Value
  223. );
  224. DWORD
  225. ScepRegQueryBinaryValue(
  226. IN HKEY hKeyRoot,
  227. IN PWSTR SubKey,
  228. IN PWSTR ValueName,
  229. OUT PBYTE *ppValue
  230. );
  231. DWORD
  232. ScepRegSetIntValue(
  233. IN HKEY hKeyRoot,
  234. IN PWSTR SubKey,
  235. IN PWSTR ValueName,
  236. IN DWORD Value
  237. );
  238. DWORD
  239. ScepRegQueryValue(
  240. IN HKEY hKeyRoot,
  241. IN PWSTR SubKey,
  242. IN PCWSTR ValueName,
  243. OUT PVOID *Value,
  244. OUT LPDWORD pRegType,
  245. OUT LPDWORD pdwSize OPTIONAL
  246. );
  247. DWORD
  248. ScepRegSetValue(
  249. IN HKEY hKeyRoot,
  250. IN PWSTR SubKey,
  251. IN PWSTR ValueName,
  252. IN DWORD RegType,
  253. IN BYTE *Value,
  254. IN DWORD ValueLen
  255. );
  256. DWORD
  257. ScepRegDeleteValue(
  258. IN HKEY hKeyRoot,
  259. IN PWSTR SubKey,
  260. IN PWSTR ValueName
  261. );
  262. DWORD
  263. ScepRemoveMultiSzItems(
  264. IN PWSTR pszData,
  265. IN DWORD dwDataSize,
  266. IN PWSTR pszRemoveList,
  267. IN DWORD dwRemoveLen,
  268. OUT PWSTR* ppszNewData,
  269. OUT PDWORD pdwNewDataSize
  270. );
  271. DWORD
  272. ScepAddMultiSzItems(
  273. IN PWSTR pszData,
  274. IN DWORD dwDataSize,
  275. IN PWSTR pszAddList,
  276. IN DWORD dwAddLen,
  277. OUT PWSTR* ppszNewData,
  278. OUT PDWORD pdwNewDataSize
  279. );
  280. SCESTATUS
  281. ScepCreateDirectory(
  282. IN PCWSTR ProfileLocation,
  283. IN BOOL FileOrDir,
  284. PSECURITY_DESCRIPTOR pSecurityDescriptor
  285. );
  286. DWORD
  287. ScepSceStatusToDosError(
  288. IN SCESTATUS SceStatus
  289. );
  290. SCESTATUS
  291. ScepChangeAclRevision(
  292. IN PSECURITY_DESCRIPTOR pSD,
  293. IN BYTE NewRevision
  294. );
  295. BOOL
  296. ScepEqualGuid(
  297. IN GUID *Guid1,
  298. IN GUID *Guid2
  299. );
  300. SCESTATUS
  301. ScepAddToGroupMembership(
  302. OUT PSCE_GROUP_MEMBERSHIP *pGroupMembership,
  303. IN PWSTR Keyname,
  304. IN DWORD KeyLen,
  305. IN PSCE_NAME_LIST pMembers,
  306. IN DWORD ValueType,
  307. IN BOOL bCheckDup,
  308. IN BOOL bReplaceList
  309. );
  310. DWORD
  311. ScepAddOneServiceToList(
  312. IN LPWSTR lpServiceName,
  313. IN LPWSTR lpDisplayName,
  314. IN DWORD ServiceStatus,
  315. IN PVOID pGeneral OPTIONAL,
  316. IN SECURITY_INFORMATION SeInfo,
  317. IN BOOL bSecurity,
  318. OUT PSCE_SERVICES *pServiceList
  319. );
  320. DWORD
  321. ScepIsAdminLoggedOn(
  322. OUT PBOOL bpAdminLogon,
  323. IN BOOL bFromServer
  324. );
  325. DWORD
  326. ScepGetProfileSetting(
  327. IN PCWSTR ValueName,
  328. IN BOOL bAdminLogon,
  329. OUT PWSTR *Setting
  330. );
  331. DWORD
  332. ScepCompareObjectSecurity(
  333. IN SE_OBJECT_TYPE ObjectType,
  334. IN BOOL IsContainer,
  335. IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
  336. IN PSECURITY_DESCRIPTOR ProfileSD,
  337. IN SECURITY_INFORMATION ProfileSeInfo,
  338. OUT PBYTE IsDifferent
  339. );
  340. SCESTATUS
  341. ScepAddToNameStatusList(
  342. OUT PSCE_NAME_STATUS_LIST *pNameList,
  343. IN PWSTR Name,
  344. IN ULONG Len,
  345. IN DWORD Status
  346. );
  347. DWORD
  348. ScepAddToObjectList(
  349. OUT PSCE_OBJECT_LIST *pNameList,
  350. IN PWSTR Name,
  351. IN ULONG Len,
  352. IN BOOL IsContainer,
  353. IN BYTE Status,
  354. IN DWORD Count,
  355. IN BYTE byFlags
  356. );
  357. DWORD
  358. ScepGetNTDirectory(
  359. IN PWSTR *ppDirectory,
  360. IN PDWORD pDirSize,
  361. IN DWORD Flag
  362. );
  363. DWORD
  364. SceAdjustPrivilege(
  365. IN ULONG Priv,
  366. IN BOOL Enable,
  367. IN HANDLE TokenToAdjust
  368. );
  369. DWORD
  370. ScepGetEnvStringSize(
  371. IN LPVOID peb
  372. );
  373. //!!!!!!!!!!!!!!!!!!!!!!!!!!!
  374. // routines to handle events
  375. //!!!!!!!!!!!!!!!!!!!!!!!!!!!
  376. BOOL
  377. InitializeEvents (
  378. IN LPTSTR EventSourceName
  379. );
  380. int
  381. LogEvent (
  382. IN HINSTANCE hInstance,
  383. IN DWORD LogLevel,
  384. IN DWORD dwEventID,
  385. IN UINT idMsg,
  386. ...
  387. );
  388. int
  389. LogEventAndReport(
  390. IN HINSTANCE hInstance,
  391. IN LPTSTR LogFileName,
  392. IN DWORD LogLevel,
  393. IN DWORD dwEventID,
  394. IN UINT idMsg,
  395. ...
  396. );
  397. BOOL ShutdownEvents (void);
  398. SCESTATUS
  399. ScepConvertToSDDLFormat(
  400. IN LPTSTR pszValue,
  401. IN DWORD Len
  402. );
  403. DWORD
  404. ScepWriteVariableUnicodeLog(
  405. IN HANDLE hFile,
  406. IN BOOL bAddCRLF,
  407. IN LPTSTR szFormat,
  408. ...
  409. );
  410. DWORD
  411. ScepWriteSingleUnicodeLog(
  412. IN HANDLE hFile,
  413. IN BOOL bAddCRLF,
  414. IN LPWSTR szMsg
  415. );
  416. WCHAR *
  417. ScepWcstrr(
  418. IN PWSTR pString,
  419. IN const WCHAR *pSubstring
  420. );
  421. DWORD
  422. ScepExpandEnvironmentVariable(
  423. IN PWSTR oldFileName,
  424. IN PCWSTR szEnv,
  425. IN DWORD nFlag,
  426. OUT PWSTR *newFileName
  427. );
  428. DWORD
  429. ScepEnforcePolicyPropagation();
  430. DWORD
  431. ScepGetTimeStampString(
  432. IN OUT PWSTR pvBuffer
  433. );
  434. DWORD
  435. ScepAppendCreateMultiSzRegValue(
  436. IN HKEY hKeyRoot,
  437. IN PWSTR pszSubKey,
  438. IN PWSTR pszValueName,
  439. IN PWSTR pszValueValue
  440. );
  441. DWORD
  442. ScepEscapeString(
  443. IN const PWSTR pszSource,
  444. IN const DWORD dwSourceChars,
  445. IN const WCHAR wcEscapee,
  446. IN const WCHAR wcEscaper,
  447. IN OUT PWSTR pszTarget
  448. );
  449. BOOL
  450. ScepIsValidFileOrDir(
  451. IN PWSTR pszFileOrDir
  452. );
  453. BOOL
  454. ScepLoadString(
  455. IN HINSTANCE hInstance,
  456. IN int iRCId,
  457. OUT LPWSTR *ppcwsz);
  458. DWORD
  459. ScepGetDomainRoleInfo(
  460. OUT DSROLE_MACHINE_ROLE *pMachineRole OPTIONAL,
  461. OUT PULONG pulRoleFlags OPTIONAL,
  462. OUT PWSTR *ppwszDomainNameFlat OPTIONAL
  463. );
  464. void
  465. ScepDuplicateString(
  466. IN LPCWSTR pcwszIn,
  467. OUT LPWSTR *ppwszOut);
  468. DWORD
  469. ScepCompareExplicitAcl(
  470. IN SE_OBJECT_TYPE ObjectType,
  471. IN BOOL IsContainer,
  472. IN PACL pAcl1,
  473. IN PACL pAcl2,
  474. OUT PBOOL pDifferent
  475. );
  476. DWORD
  477. ScepGetBuiltinSid(
  478. IN ULONG ulRid,
  479. OUT PSID *ppSid);
  480. #endif