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.

320 lines
9.0 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. sceutil.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 _sceutil_
  14. #define _sceutil_
  15. #include <ntlsa.h>
  16. #include <cfgmgr32.h>
  17. #define SCEP_SAM_FILTER_POLICY_PROP_EVENT L"E_ScepSamFilterAndPolicyPropExclusion"
  18. typedef struct _SCE_USER_PRIV_LOOKUP {
  19. UINT Value;
  20. PWSTR Name;
  21. }SCE_USER_PRIV_LOOKUP;
  22. static SCE_USER_PRIV_LOOKUP SCE_Privileges[] = {
  23. {0, (PWSTR)SE_NETWORK_LOGON_NAME},
  24. // Access the computer from network
  25. {SE_TCB_PRIVILEGE, (PWSTR)SE_TCB_NAME},
  26. // Act as part of the operating System
  27. {SE_MACHINE_ACCOUNT_PRIVILEGE, (PWSTR)SE_MACHINE_ACCOUNT_NAME},
  28. // Add workstations to the domain
  29. {SE_BACKUP_PRIVILEGE, (PWSTR)SE_BACKUP_NAME},
  30. // Back up files and directories
  31. {SE_CHANGE_NOTIFY_PRIVILEGE, (PWSTR)SE_CHANGE_NOTIFY_NAME},
  32. // Bypass traverse checking
  33. {SE_SYSTEMTIME_PRIVILEGE, (PWSTR)SE_SYSTEMTIME_NAME},
  34. // Change the system time
  35. {SE_CREATE_PAGEFILE_PRIVILEGE, (PWSTR)SE_CREATE_PAGEFILE_NAME},
  36. // Create a pagefile
  37. {SE_CREATE_TOKEN_PRIVILEGE, (PWSTR)SE_CREATE_TOKEN_NAME},
  38. // Create a token object
  39. {SE_CREATE_PERMANENT_PRIVILEGE, (PWSTR)SE_CREATE_PERMANENT_NAME},
  40. // Create permanent shared objects
  41. {SE_DEBUG_PRIVILEGE, (PWSTR)SE_DEBUG_NAME},
  42. // Debug programs
  43. {SE_REMOTE_SHUTDOWN_PRIVILEGE, (PWSTR)SE_REMOTE_SHUTDOWN_NAME},
  44. // Force shutdown from a remote system
  45. {SE_AUDIT_PRIVILEGE, (PWSTR)SE_AUDIT_NAME},
  46. // Generate security audits
  47. {SE_INCREASE_QUOTA_PRIVILEGE, (PWSTR)SE_INCREASE_QUOTA_NAME},
  48. // Increase quotas
  49. {SE_INC_BASE_PRIORITY_PRIVILEGE,(PWSTR)SE_INC_BASE_PRIORITY_NAME},
  50. // Increase scheduling priority
  51. {SE_LOAD_DRIVER_PRIVILEGE, (PWSTR)SE_LOAD_DRIVER_NAME},
  52. // Load and unload device drivers
  53. {SE_LOCK_MEMORY_PRIVILEGE, (PWSTR)SE_LOCK_MEMORY_NAME},
  54. // Lock pages in memory
  55. {0, (PWSTR)SE_BATCH_LOGON_NAME},
  56. // Logon as a batch job
  57. {0, (PWSTR)SE_SERVICE_LOGON_NAME},
  58. // Logon as a service
  59. {0, (PWSTR)SE_INTERACTIVE_LOGON_NAME},
  60. // Logon locally
  61. {SE_SECURITY_PRIVILEGE, (PWSTR)SE_SECURITY_NAME},
  62. // Manage auditing and security log
  63. {SE_SYSTEM_ENVIRONMENT_PRIVILEGE, (PWSTR)SE_SYSTEM_ENVIRONMENT_NAME},
  64. // Modify firmware environment variables
  65. {SE_PROF_SINGLE_PROCESS_PRIVILEGE,(PWSTR)SE_PROF_SINGLE_PROCESS_NAME},
  66. // Profile single process
  67. {SE_SYSTEM_PROFILE_PRIVILEGE, (PWSTR)SE_SYSTEM_PROFILE_NAME},
  68. // Profile system performance
  69. {SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, (PWSTR)SE_ASSIGNPRIMARYTOKEN_NAME},
  70. // Replace a process-level token
  71. {SE_RESTORE_PRIVILEGE, (PWSTR)SE_RESTORE_NAME},
  72. // Restore files and directories
  73. {SE_SHUTDOWN_PRIVILEGE, (PWSTR)SE_SHUTDOWN_NAME},
  74. // Shut down the system
  75. {SE_TAKE_OWNERSHIP_PRIVILEGE, (PWSTR)SE_TAKE_OWNERSHIP_NAME},
  76. // Take ownership of files or other objects
  77. // {SE_UNSOLICITED_INPUT_PRIVILEGE,(PWSTR)SE_UNSOLICITED_INPUT_NAME},
  78. // Unsolicited Input is obsolete and unused
  79. {0, (PWSTR)SE_DENY_NETWORK_LOGON_NAME},
  80. // Deny access the computer from network
  81. {0, (PWSTR)SE_DENY_BATCH_LOGON_NAME},
  82. // Deny Logon as a batch job
  83. {0, (PWSTR)SE_DENY_SERVICE_LOGON_NAME},
  84. // Deny Logon as a service
  85. {0, (PWSTR)SE_DENY_INTERACTIVE_LOGON_NAME},
  86. // Deny logon locally
  87. {SE_UNDOCK_PRIVILEGE, (PWSTR)SE_UNDOCK_NAME},
  88. // Undock privilege
  89. {SE_SYNC_AGENT_PRIVILEGE, (PWSTR)SE_SYNC_AGENT_NAME},
  90. // Sync agent privilege
  91. {SE_ENABLE_DELEGATION_PRIVILEGE,(PWSTR)SE_ENABLE_DELEGATION_NAME},
  92. // enable delegation privilege
  93. {SE_MANAGE_VOLUME_PRIVILEGE, (PWSTR)SE_MANAGE_VOLUME_NAME},
  94. // (NTFS) Manage volume privilege
  95. {0, (PWSTR)SE_REMOTE_INTERACTIVE_LOGON_NAME},
  96. // (TS) logon locally from a TS session
  97. {0, (PWSTR)SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME},
  98. // (TS) deny logon locally from a TS session
  99. {SE_IMPERSONATE_PRIVILEGE, (PWSTR)SE_IMPERSONATE_NAME},
  100. // Allow impersonation after authentication
  101. {SE_CREATE_GLOBAL_PRIVILEGE,(PWSTR)SE_CREATE_GLOBAL_NAME}
  102. // Create objects in session 0 (global)
  103. };
  104. typedef struct _SCE_TEMP_NODE_ {
  105. PWSTR Name;
  106. DWORD Len;
  107. BOOL bFree;
  108. } SCE_TEMP_NODE, *PSCE_TEMP_NODE;
  109. //
  110. // Bit masks encoding rsop area information
  111. //
  112. #define SCE_RSOP_PASSWORD_INFO (0x1)
  113. #define SCE_RSOP_LOCKOUT_INFO (0x1 << 1)
  114. #define SCE_RSOP_LOGOFF_INFO (0x1 << 2)
  115. #define SCE_RSOP_ADMIN_INFO (0x1 << 3)
  116. #define SCE_RSOP_GUEST_INFO (0x1 << 4)
  117. #define SCE_RSOP_GROUP_INFO (0x1 << 5)
  118. #define SCE_RSOP_PRIVILEGE_INFO (0x1 << 6)
  119. #define SCE_RSOP_FILE_SECURITY_INFO (0x1 << 7)
  120. #define SCE_RSOP_REGISTRY_SECURITY_INFO (0x1 << 8)
  121. #define SCE_RSOP_AUDIT_LOG_MAXSIZE_INFO (0x1 << 9)
  122. #define SCE_RSOP_AUDIT_LOG_RETENTION_INFO (0x1 << 10)
  123. #define SCE_RSOP_AUDIT_LOG_GUEST_INFO (0x1 << 11)
  124. #define SCE_RSOP_AUDIT_EVENT_INFO (0x1 << 12)
  125. #define SCE_RSOP_KERBEROS_INFO (0x1 << 13)
  126. #define SCE_RSOP_REGISTRY_VALUE_INFO (0x1 << 14)
  127. #define SCE_RSOP_SERVICES_INFO (0x1 << 15)
  128. #define SCE_RSOP_FILE_SECURITY_INFO_CHILD (0x1 << 16)
  129. #define SCE_RSOP_REGISTRY_SECURITY_INFO_CHILD (0x1 << 17)
  130. #define SCE_RSOP_LSA_POLICY_INFO (0x1 << 18)
  131. #define SCE_RSOP_DISABLE_ADMIN_INFO (0x1 << 19)
  132. #define SCE_RSOP_DISABLE_GUEST_INFO (0x1 << 20)
  133. BOOL
  134. ScepLookupWellKnownName(
  135. IN PWSTR Name,
  136. IN OPTIONAL LSA_HANDLE LsaPolicy,
  137. OPTIONAL OUT PWSTR *ppwszSid);
  138. INT
  139. ScepLookupPrivByName(
  140. IN PCWSTR Right
  141. );
  142. INT
  143. ScepLookupPrivByValue(
  144. IN DWORD Priv
  145. );
  146. SCESTATUS
  147. ScepGetProductType(
  148. OUT PSCE_SERVER_TYPE srvProduct
  149. );
  150. SCESTATUS
  151. ScepConvertMultiSzToDelim(
  152. IN PWSTR pValue,
  153. IN DWORD Len,
  154. IN WCHAR DelimFrom,
  155. IN WCHAR Delim
  156. );
  157. DWORD
  158. ScepAddTwoNamesToNameList(
  159. OUT PSCE_NAME_LIST *pNameList,
  160. IN BOOL bAddSeparator,
  161. IN PWSTR Name1,
  162. IN ULONG Length1,
  163. IN PWSTR Name2,
  164. IN ULONG Length2
  165. );
  166. NTSTATUS
  167. ScepDomainIdToSid(
  168. IN PSID DomainId,
  169. IN ULONG RelativeId,
  170. OUT PSID *Sid
  171. );
  172. DWORD
  173. ScepConvertSidToPrefixStringSid(
  174. IN PSID pSid,
  175. OUT PWSTR *StringSid
  176. );
  177. NTSTATUS
  178. ScepConvertSidToName(
  179. IN LSA_HANDLE LsaPolicy,
  180. IN PSID AccountSid,
  181. IN BOOL bFromDomain,
  182. OUT PWSTR *AccountName,
  183. OUT DWORD *Length OPTIONAL
  184. );
  185. NTSTATUS
  186. ScepConvertNameToSid(
  187. IN LSA_HANDLE LsaPolicy,
  188. IN PWSTR AccountName,
  189. OUT PSID *AccountSid
  190. );
  191. SCESTATUS
  192. ScepConvertNameToSidString(
  193. IN LSA_HANDLE LsaHandle,
  194. IN PWSTR Name,
  195. IN BOOL bAccountDomainOnly,
  196. OUT PWSTR *SidString,
  197. OUT DWORD *SidStrLen
  198. );
  199. SCESTATUS
  200. ScepLookupSidStringAndAddToNameList(
  201. IN LSA_HANDLE LsaHandle,
  202. IN OUT PSCE_NAME_LIST *pNameList,
  203. IN PWSTR LookupString,
  204. IN ULONG Len
  205. );
  206. SCESTATUS
  207. ScepLookupNameAndAddToSidStringList(
  208. IN LSA_HANDLE LsaHandle,
  209. IN OUT PSCE_NAME_LIST *pNameList,
  210. IN PWSTR LookupString,
  211. IN ULONG Len
  212. );
  213. NTSTATUS
  214. ScepOpenLsaPolicy(
  215. IN ACCESS_MASK access,
  216. OUT PLSA_HANDLE pPolicyHandle,
  217. IN BOOL bDoNotNotify
  218. );
  219. BOOL
  220. ScepIsSidFromAccountDomain(
  221. IN PSID pSid
  222. );
  223. BOOL
  224. SetupINFAsUCS2(
  225. IN LPCTSTR szName
  226. );
  227. WCHAR *
  228. ScepStripPrefix(
  229. IN LPTSTR pwszPath
  230. );
  231. DWORD
  232. ScepGenerateGuid(
  233. OUT PWSTR *ppwszGuid
  234. );
  235. SCESTATUS
  236. SceInfpGetPrivileges(
  237. IN HINF hInf,
  238. IN BOOL bLookupAccount,
  239. OUT PSCE_PRIVILEGE_ASSIGNMENT *pPrivileges,
  240. OUT PSCE_ERROR_LOG_INFO *Errlog OPTIONAL
  241. );
  242. DWORD
  243. ScepQueryAndAddService(
  244. IN SC_HANDLE hScManager,
  245. IN LPWSTR lpServiceName,
  246. IN LPWSTR lpDisplayName,
  247. OUT PSCE_SERVICES *pServiceList
  248. );
  249. NTSTATUS
  250. ScepIsSystemContext(
  251. IN HANDLE hUserToken,
  252. OUT BOOL *pbSystem
  253. );
  254. BOOL
  255. IsNT5();
  256. DWORD
  257. ScepVerifyTemplateName(
  258. IN PWSTR InfTemplateName,
  259. OUT PSCE_ERROR_LOG_INFO *pErrlog OPTIONAL
  260. );
  261. NTSTATUS
  262. ScepLsaLookupNames2(
  263. IN LSA_HANDLE PolicyHandle,
  264. IN ULONG Flags,
  265. IN PWSTR pszAccountName,
  266. OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
  267. OUT PLSA_TRANSLATED_SID2 *Sids
  268. );
  269. NTSTATUS ScepIsMigratedAccount(
  270. IN LSA_HANDLE LsaHandle,
  271. IN PLSA_UNICODE_STRING pName,
  272. IN PLSA_UNICODE_STRING pDomain,
  273. IN PSID pSid,
  274. OUT bool *pbMigratedAccount
  275. );
  276. #endif