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.

934 lines
31 KiB

  1. /*++
  2. Copyright (c) 1991 Microsoft Corporation
  3. Module Name:
  4. adtp.h
  5. Abstract:
  6. Local Security Authority - Audit Log Management - Private Defines,
  7. data and function prototypes.
  8. Functions, data and defines in this module are internal to the
  9. Auditing Subcomponent of the LSA Subsystem.
  10. Author:
  11. Scott Birrell (ScottBi) November 20, 1991
  12. Environment:
  13. Revision History:
  14. --*/
  15. #ifndef _LSAP_ADTP_
  16. #define _LSAP_ADTP_
  17. #include "ausrvp.h"
  18. #include "cfiles\adtdebug.h"
  19. //
  20. // Names of the registry keys where security event log information
  21. // is rooted and the object names are listed under an event source
  22. // module.
  23. //
  24. #define LSAP_ADT_AUDIT_MODULES_KEY_NAME L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\EventLog\\Security"
  25. #define LSAP_ADT_OBJECT_NAMES_KEY_NAME L"ObjectNames"
  26. #define MAX_OBJECT_TYPES 32
  27. //
  28. // Macros for setting fields in an SE_AUDIT_PARAMETERS array.
  29. //
  30. // These must be kept in sync with similar macros in se\sepaudit.c.
  31. //
  32. #define LsapSetParmTypeSid( AuditParameters, Index, Sid ) \
  33. { \
  34. if( Sid ) { \
  35. \
  36. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeSid; \
  37. (AuditParameters).Parameters[(Index)].Length = RtlLengthSid( (Sid) ); \
  38. (AuditParameters).Parameters[(Index)].Address = (Sid); \
  39. \
  40. } else { \
  41. \
  42. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeNone; \
  43. (AuditParameters).Parameters[(Index)].Length = 0; \
  44. (AuditParameters).Parameters[(Index)].Address = NULL; \
  45. \
  46. } \
  47. }
  48. #define LsapSetParmTypeAccessMask( AuditParameters, Index, AccessMask, ObjectTypeIndex ) \
  49. { \
  50. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeAccessMask; \
  51. (AuditParameters).Parameters[(Index)].Length = sizeof( ACCESS_MASK ); \
  52. (AuditParameters).Parameters[(Index)].Data[0] = (AccessMask); \
  53. (AuditParameters).Parameters[(Index)].Data[1] = (ObjectTypeIndex); \
  54. }
  55. #define LsapSetParmTypeString( AuditParameters, Index, String ) \
  56. { \
  57. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeString; \
  58. (AuditParameters).Parameters[(Index)].Length = \
  59. sizeof(UNICODE_STRING)+(String)->Length; \
  60. (AuditParameters).Parameters[(Index)].Address = (String); \
  61. }
  62. #define LsapSetParmTypeUlong( AuditParameters, Index, Ulong ) \
  63. { \
  64. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeUlong; \
  65. (AuditParameters).Parameters[(Index)].Length = sizeof( (Ulong) ); \
  66. (AuditParameters).Parameters[(Index)].Data[0] = (ULONG)(Ulong); \
  67. }
  68. #define LsapSetParmTypeHexUlong( AuditParameters, Index, Ulong ) \
  69. { \
  70. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeHexUlong; \
  71. (AuditParameters).Parameters[(Index)].Length = sizeof( (Ulong) ); \
  72. (AuditParameters).Parameters[(Index)].Data[0] = (ULONG)(Ulong); \
  73. }
  74. #define LsapSetParmTypeHexInt64( AuditParameters, Index, Qword ) \
  75. { \
  76. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeHexInt64; \
  77. (AuditParameters).Parameters[(Index)].Length = sizeof( (Qword) ); \
  78. *(PULONGLONG)((AuditParameters).Parameters[(Index)].Data) = (Qword); \
  79. }
  80. #define LsapSetParmTypeTime( AuditParameters, Index, Time ) \
  81. { \
  82. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeTime; \
  83. (AuditParameters).Parameters[(Index)].Length = sizeof( LARGE_INTEGER ); \
  84. *(PLARGE_INTEGER)((AuditParameters).Parameters[(Index)].Data) = (Time); \
  85. }
  86. #define LsapSetParmTypeDateTime( AuditParameters, Index, Time ) \
  87. { \
  88. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeDateTime; \
  89. (AuditParameters).Parameters[(Index)].Length = sizeof( LARGE_INTEGER ); \
  90. *(PLARGE_INTEGER)((AuditParameters).Parameters[(Index)].Data) = (Time); \
  91. }
  92. #define LsapSetParmTypeDuration( AuditParameters, Index, Duration ) \
  93. { \
  94. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeDuration; \
  95. (AuditParameters).Parameters[(Index)].Length = sizeof( LARGE_INTEGER ); \
  96. *(PLARGE_INTEGER)((AuditParameters).Parameters[(Index)].Data) = (Duration); \
  97. }
  98. #define LsapSetParmTypeGuid( AuditParameters, Index, pGuid ) \
  99. { \
  100. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeGuid; \
  101. (AuditParameters).Parameters[(Index)].Length = sizeof( GUID ); \
  102. (AuditParameters).Parameters[(Index)].Address = (pGuid); \
  103. }
  104. #define LsapSetParmTypeNoLogon( AuditParameters, Index ) \
  105. { \
  106. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeNoLogonId; \
  107. }
  108. #define LsapSetParmTypeLogonId( AuditParameters, Index, LogonId ) \
  109. { \
  110. PLUID TmpLuid; \
  111. \
  112. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeLogonId; \
  113. (AuditParameters).Parameters[(Index)].Length = sizeof( (LogonId) ); \
  114. TmpLuid = (PLUID)(&(AuditParameters).Parameters[(Index)].Data[0]); \
  115. *TmpLuid = (LogonId); \
  116. }
  117. #define LsapSetParmTypePrivileges( AuditParameters, Index, Privileges ) \
  118. { \
  119. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypePrivs; \
  120. (AuditParameters).Parameters[(Index)].Length = LsapPrivilegeSetSize( (Privileges) ); \
  121. (AuditParameters).Parameters[(Index)].Address = (Privileges); \
  122. }
  123. #define LsapSetParmTypeStringList( AuditParameters, Index, StringList ) \
  124. { \
  125. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeStringList; \
  126. (AuditParameters).Parameters[(Index)].Length = LsapStringListSize( (StringList) ); \
  127. (AuditParameters).Parameters[(Index)].Address = (StringList); \
  128. }
  129. #define LsapSetParmTypeSidList( AuditParameters, Index, SidList ) \
  130. { \
  131. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeSidList; \
  132. (AuditParameters).Parameters[(Index)].Length = LsapSidListSize( (SidList) ); \
  133. (AuditParameters).Parameters[(Index)].Address = (SidList); \
  134. }
  135. #define LsapSetParmTypeUac( AuditParameters, Index, OldUac, NewUac ) \
  136. { \
  137. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeUserAccountControl; \
  138. (AuditParameters).Parameters[(Index)].Length = 2 * sizeof(ULONG); \
  139. (AuditParameters).Parameters[(Index)].Data[0] = (ULONG_PTR) (OldUac); \
  140. (AuditParameters).Parameters[(Index)].Data[1] = (ULONG_PTR) (NewUac); \
  141. }
  142. #define LsapSetParmTypeNoUac( AuditParameters, Index ) \
  143. { \
  144. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeNoUac; \
  145. }
  146. #define LsapSetParmTypePtr( AuditParameters, Index, Ptr ) \
  147. { \
  148. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypePtr; \
  149. (AuditParameters).Parameters[(Index)].Length = sizeof(ULONG_PTR); \
  150. (AuditParameters).Parameters[(Index)].Data[0] = (ULONG_PTR) (Ptr); \
  151. }
  152. #define LsapSetParmTypeMessage( AuditParameters, Index, MessageId ) \
  153. { \
  154. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeMessage; \
  155. (AuditParameters).Parameters[(Index)].Length = sizeof(ULONG); \
  156. (AuditParameters).Parameters[(Index)].Data[0] = (ULONG_PTR) (MessageId); \
  157. }
  158. #define LsapSetParmTypeSockAddr( AuditParameters, Index, pSockAddr ) \
  159. { \
  160. USHORT sa_family = ((SOCKADDR*) pSockAddr)->sa_family; \
  161. \
  162. (AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeSockAddr;\
  163. if ( sa_family == AF_INET6 ) \
  164. { \
  165. (AuditParameters).Parameters[(Index)].Length = sizeof(SOCKADDR_IN6);\
  166. } \
  167. else if ( sa_family == AF_INET ) \
  168. { \
  169. (AuditParameters).Parameters[(Index)].Length = sizeof(SOCKADDR_IN);\
  170. } \
  171. else \
  172. { \
  173. (AuditParameters).Parameters[(Index)].Length = sizeof(SOCKADDR);\
  174. if ( sa_family != 0 ) \
  175. { \
  176. AdtAssert(FALSE, ("LsapSetParmTypeSockAddr: invalid sa_family: %d",sa_family)); \
  177. } \
  178. } \
  179. (AuditParameters).Parameters[(Index)].Address = (pSockAddr); \
  180. }
  181. #define IsInRange(item,min_val,max_val) \
  182. (((item) >= min_val) && ((item) <= max_val))
  183. //
  184. // see msaudite.mc for def. of valid category-id
  185. //
  186. #define IsValidCategoryId(c) \
  187. (IsInRange((c), SE_ADT_MIN_CATEGORY_ID, SE_ADT_MAX_CATEGORY_ID))
  188. //
  189. // see msaudite.mc for def. of valid audit-id
  190. //
  191. #define IsValidAuditId(a) \
  192. (IsInRange((a), SE_ADT_MIN_AUDIT_ID, SE_ADT_MAX_AUDIT_ID))
  193. //
  194. // check for reasonable value of parameter count. we must have atleast
  195. // 2 parameters in the audit-params array. Thus the min limit is 3.
  196. // The max limit is determined by the value in ntlsa.h
  197. //
  198. #define IsValidParameterCount(p) \
  199. (IsInRange((p), 2, SE_MAX_AUDIT_PARAMETERS))
  200. //
  201. // macro used by LsapAdtDemarshallAuditInfo and LsapAuditFailed
  202. // to decide when not to assert in DBG build
  203. //
  204. #define LsapAdtNeedToAssert( Status ) \
  205. (( Status != STATUS_LOG_FILE_FULL ) && \
  206. ( Status != STATUS_DISK_FULL ) && \
  207. ( Status != STATUS_INSUFFICIENT_RESOURCES ) && \
  208. ( Status != STATUS_NO_MEMORY ) && \
  209. ( Status != STATUS_COMMITMENT_LIMIT ))
  210. #define SEP_MAX_PRIVILEGE_COUNT (SE_MAX_WELL_KNOWN_PRIVILEGE-SE_MIN_WELL_KNOWN_PRIVILEGE+32)
  211. #define IsValidPrivilegeCount( count ) ((count == 0) || \
  212. ((count > 0) && \
  213. (count <= SEP_MAX_PRIVILEGE_COUNT)))
  214. ///////////////////////////////////////////////////////////////////////////
  215. // //
  216. // Private data for Audit Log Management //
  217. // //
  218. ///////////////////////////////////////////////////////////////////////////
  219. #define LSAP_ADT_LOG_FULL_SHUTDOWN_TIMEOUT (ULONG) 0x0000012cL
  220. extern RTL_CRITICAL_SECTION LsapAdtLogFullLock;
  221. //
  222. // Structure describing a queued audit record
  223. //
  224. typedef struct _LSAP_ADT_QUEUED_RECORD {
  225. LIST_ENTRY Link;
  226. SE_ADT_PARAMETER_ARRAY Buffer;
  227. } LSAP_ADT_QUEUED_RECORD, *PLSAP_ADT_QUEUED_RECORD;
  228. //
  229. // Audit Log Queue Header. The queue is maintained in chronological
  230. // (FIFO) order. New records are appended to the back of the queue.
  231. //
  232. typedef struct _LSAP_ADT_LOG_QUEUE_HEAD {
  233. PLSAP_ADT_QUEUED_RECORD FirstQueuedRecord;
  234. PLSAP_ADT_QUEUED_RECORD LastQueuedRecord;
  235. } LSAP_ADT_LOG_QUEUE_HEAD, *PLSAP_ADT_LOG_QUEUE_HEAD;
  236. //
  237. // String that will be passed in for SubsystemName for audits generated
  238. // by LSA (eg, logon, logoff, restart, etc).
  239. //
  240. extern UNICODE_STRING LsapSubsystemName;
  241. //
  242. // String that will be passed in for SubsystemName for some audits generated
  243. // by LSA for LSA objects (PolicyObject, SecretObject, TrustedDomainObject, UserAccountObject).
  244. //
  245. extern UNICODE_STRING LsapLsaName;
  246. //
  247. // max number of replacement string params that we support in
  248. // eventlog audit record.
  249. //
  250. #define SE_MAX_AUDIT_PARAM_STRINGS 48
  251. //
  252. // Maximum number of strings used to represent an ObjectTypeList.
  253. //
  254. #define LSAP_ADT_OBJECT_TYPE_STRINGS 1
  255. ///////////////////////////////////////////////////////////////////////////////
  256. // /
  257. // The following structures and data are used by LSA to contain /
  258. // drive letter-device name mapping information. LSA obtains this /
  259. // information once during initialization and saves it for use /
  260. // by auditing code. /
  261. // /
  262. ///////////////////////////////////////////////////////////////////////////////
  263. ///////////////////////////////////////////////////////////////////////////////
  264. // /
  265. // The DRIVE_MAPPING structure contains the drive letter (without /
  266. // the colon) and a unicode string containing the name of the /
  267. // corresponding device. The buffer in the unicode string is /
  268. // allocated from the LSA heap and is never freed. /
  269. // /
  270. ///////////////////////////////////////////////////////////////////////////////
  271. typedef struct _DRIVE_MAPPING {
  272. WCHAR DriveLetter;
  273. UNICODE_STRING DeviceName;
  274. } DRIVE_MAPPING, PDRIVE_MAPPING;
  275. ////////////////////////////////////////////////////////////////////////////////
  276. // /
  277. // We assume a maximum of 26 drive letters. Though no auditing /
  278. // will occur due to references to files on floppy (drives A and /
  279. // B), perform their name lookup anyway. This will then just /
  280. // work if somehow we start auditing files on floppies. /
  281. // /
  282. ////////////////////////////////////////////////////////////////////////////////
  283. #define MAX_DRIVE_MAPPING 26
  284. extern DRIVE_MAPPING DriveMappingArray[];
  285. //
  286. // This is a structure that contains all auditing information specific to a
  287. // monitored user. Currently this information is read from the registry.
  288. //
  289. typedef struct _PER_USER_AUDITING_ELEMENT {
  290. struct _PER_USER_AUDITING_ELEMENT * Next;
  291. PSID pSid;
  292. ULONGLONG RawPolicy;
  293. TOKEN_AUDIT_POLICY TokenAuditPolicy;
  294. TOKEN_AUDIT_POLICY_ELEMENT PolicyArray[POLICY_AUDIT_EVENT_TYPE_COUNT - 1];
  295. } PER_USER_AUDITING_ELEMENT, *PPER_USER_AUDITING_ELEMENT;
  296. //
  297. // This structure allows for the per user auditing settings for a user
  298. // to be queried by the logon ID.
  299. //
  300. typedef struct _PER_USER_AUDITING_LUID_QUERY_ELEMENT {
  301. struct _PER_USER_AUDITING_LUID_QUERY_ELEMENT * Next;
  302. LUID Luid;
  303. TOKEN_AUDIT_POLICY Policy;
  304. TOKEN_AUDIT_POLICY_ELEMENT PolicyArray[POLICY_AUDIT_EVENT_TYPE_COUNT - ANYSIZE_ARRAY];
  305. } PER_USER_AUDITING_LUID_QUERY_ELEMENT, *PPER_USER_AUDITING_LUID_QUERY_ELEMENT;
  306. #define PER_USER_AUDITING_POLICY_TABLE_SIZE 11
  307. #define PER_USER_AUDITING_LUID_TABLE_SIZE 16
  308. #define PER_USER_AUDITING_MAX_POLICY_SIZE (sizeof(TOKEN_AUDIT_POLICY) + (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) * (POLICY_AUDIT_EVENT_TYPE_COUNT - ANYSIZE_ARRAY)))
  309. extern LONG LsapAdtPerUserAuditUserCount;
  310. extern LONG LsapAdtPerUserAuditLogonCount;
  311. extern LONG LsapAdtPerUserAuditHint[POLICY_AUDIT_EVENT_TYPE_COUNT];
  312. extern LONG LsapAdtPerUserPolicyCategoryCount[POLICY_AUDIT_EVENT_TYPE_COUNT];
  313. extern HKEY LsapAdtPerUserKey;
  314. extern HANDLE LsapAdtPerUserKeyEvent;
  315. extern HANDLE LsapAdtPerUserKeyTimer;
  316. extern RTL_RESOURCE LsapAdtPerUserPolicyTableResource;
  317. extern RTL_RESOURCE LsapAdtPerUserLuidTableResource;
  318. extern PPER_USER_AUDITING_ELEMENT LsapAdtPerUserAuditingTable[PER_USER_AUDITING_POLICY_TABLE_SIZE];
  319. //
  320. // macros to get the table locks for the per user settings.
  321. //
  322. #define LsapAdtAcquirePerUserPolicyTableReadLock() RtlAcquireResourceShared(&LsapAdtPerUserPolicyTableResource, TRUE)
  323. #define LsapAdtAcquirePerUserPolicyTableWriteLock() RtlAcquireResourceExclusive(&LsapAdtPerUserPolicyTableResource, TRUE);
  324. #define LsapAdtReleasePerUserPolicyTableLock() RtlReleaseResource(&LsapAdtPerUserPolicyTableResource)
  325. #define LsapAdtAcquirePerUserLuidTableReadLock() RtlAcquireResourceShared(&LsapAdtPerUserLuidTableResource, TRUE)
  326. #define LsapAdtAcquirePerUserLuidTableWriteLock() RtlAcquireResourceExclusive(&LsapAdtPerUserLuidTableResource, TRUE);
  327. #define LsapAdtReleasePerUserLuidTableLock() RtlReleaseResource(&LsapAdtPerUserLuidTableResource)
  328. //
  329. // Special privilege values which are not normally audited,
  330. // but generate audits when assigned to a user. See
  331. // LsapAdtAuditSpecialPrivileges.
  332. //
  333. extern LUID ChangeNotifyPrivilege;
  334. extern LUID AuditPrivilege;
  335. extern LUID CreateTokenPrivilege;
  336. extern LUID AssignPrimaryTokenPrivilege;
  337. extern LUID BackupPrivilege;
  338. extern LUID RestorePrivilege;
  339. extern LUID DebugPrivilege;
  340. //
  341. // Global variable to indicate whether or not we're
  342. // supposed to crash when an audit fails.
  343. //
  344. extern BOOLEAN LsapCrashOnAuditFail;
  345. extern BOOLEAN LsapAllowAdminLogonsOnly;
  346. ////////////////////////////////////////////////////////////////////////////////
  347. // /
  348. // /
  349. ////////////////////////////////////////////////////////////////////////////////
  350. NTSTATUS
  351. LsapAdtWriteLog(
  352. IN OPTIONAL PSE_ADT_PARAMETER_ARRAY AuditRecord
  353. );
  354. NTSTATUS
  355. LsapAdtDemarshallAuditInfo(
  356. IN PSE_ADT_PARAMETER_ARRAY AuditParameters
  357. );
  358. VOID
  359. LsapAdtNormalizeAuditInfo(
  360. IN PSE_ADT_PARAMETER_ARRAY AuditParameters
  361. );
  362. NTSTATUS
  363. LsapAdtOpenLog(
  364. OUT PHANDLE AuditLogHandle
  365. );
  366. VOID
  367. LsapAdtAuditLogon(
  368. IN USHORT EventCategory,
  369. IN ULONG EventID,
  370. IN USHORT EventType,
  371. IN PUNICODE_STRING AccountName,
  372. IN PUNICODE_STRING AuthenticatingAuthority,
  373. IN PUNICODE_STRING Source,
  374. IN PUNICODE_STRING PackageName,
  375. IN SECURITY_LOGON_TYPE LogonType,
  376. IN PSID UserSid,
  377. IN LUID AuthenticationId,
  378. IN PUNICODE_STRING WorkstationName,
  379. IN NTSTATUS LogonStatus,
  380. IN NTSTATUS SubStatus,
  381. IN LPGUID LogonGuid, OPTIONAL
  382. IN PLUID CallerLogonId, OPTIONAL
  383. IN PHANDLE CallerProcessID, OPTIONAL
  384. IN PLSA_ADT_STRING_LIST TransittedServices, OPTIONAL
  385. IN SOCKADDR* pSockAddr OPTIONAL
  386. );
  387. VOID
  388. LsapAuditLogonHelper(
  389. IN NTSTATUS LogonStatus,
  390. IN NTSTATUS LogonSubStatus,
  391. IN PUNICODE_STRING AccountName,
  392. IN PUNICODE_STRING AuthenticatingAuthority,
  393. IN PUNICODE_STRING WorkstationName,
  394. IN PSID UserSid, OPTIONAL
  395. IN SECURITY_LOGON_TYPE LogonType,
  396. IN PTOKEN_SOURCE TokenSource,
  397. IN PLUID LogonId,
  398. IN LPGUID LogonGuid, OPTIONAL
  399. IN PLUID CallerLogonId, OPTIONAL
  400. IN PHANDLE CallerProcessID, OPTIONAL
  401. IN PLSA_ADT_STRING_LIST TransittedServices OPTIONAL
  402. );
  403. VOID
  404. LsapAdtSystemRestart(
  405. PLSARM_POLICY_AUDIT_EVENTS_INFO AuditEventsInfo
  406. );
  407. VOID
  408. LsapAdtAuditLogonProcessRegistration(
  409. IN PLSAP_AU_REGISTER_CONNECT_INFO_EX ConnectInfo
  410. );
  411. NTSTATUS
  412. LsapAdtInitializeLogQueue(
  413. VOID
  414. );
  415. NTSTATUS
  416. LsapAdtQueueRecord(
  417. IN PSE_ADT_PARAMETER_ARRAY AuditRecord
  418. );
  419. #define LsapAdtAcquireLogFullLock() RtlEnterCriticalSection(&LsapAdtLogFullLock)
  420. #define LsapAdtReleaseLogFullLock() RtlLeaveCriticalSection(&LsapAdtLogFullLock)
  421. NTSTATUS
  422. LsapAdtObjsInitialize(
  423. );
  424. NTSTATUS
  425. LsapAdtBuildDashString(
  426. OUT PUNICODE_STRING ResultantString,
  427. OUT PBOOLEAN FreeWhenDone
  428. );
  429. NTSTATUS
  430. LsapAdtBuildUlongString(
  431. IN ULONG Value,
  432. OUT PUNICODE_STRING ResultantString,
  433. OUT PBOOLEAN FreeWhenDone
  434. );
  435. NTSTATUS
  436. LsapAdtBuildHexUlongString(
  437. IN ULONG Value,
  438. OUT PUNICODE_STRING ResultantString,
  439. OUT PBOOLEAN FreeWhenDone
  440. );
  441. NTSTATUS
  442. LsapAdtBuildHexInt64String(
  443. IN PULONGLONG Value,
  444. OUT PUNICODE_STRING ResultantString,
  445. OUT PBOOLEAN FreeWhenDone
  446. );
  447. NTSTATUS
  448. LsapAdtBuildPtrString(
  449. IN PVOID Value,
  450. OUT PUNICODE_STRING ResultantString,
  451. OUT PBOOLEAN FreeWhenDone
  452. );
  453. NTSTATUS
  454. LsapAdtBuildLuidString(
  455. IN PLUID Value,
  456. OUT PUNICODE_STRING ResultantString,
  457. OUT PBOOLEAN FreeWhenDone
  458. );
  459. NTSTATUS
  460. LsapAdtBuildSidString(
  461. IN PSID Value,
  462. OUT PUNICODE_STRING ResultantString,
  463. OUT PBOOLEAN FreeWhenDone
  464. );
  465. NTSTATUS
  466. LsapAdtBuildObjectTypeStrings(
  467. IN PUNICODE_STRING SourceModule,
  468. IN PUNICODE_STRING ObjectTypeName,
  469. IN PSE_ADT_OBJECT_TYPE ObjectTypeList,
  470. IN ULONG ObjectTypeCount,
  471. OUT PUNICODE_STRING ResultantString,
  472. OUT PBOOLEAN FreeWhenDone,
  473. OUT PUNICODE_STRING NewObjectTypeName
  474. );
  475. NTSTATUS
  476. LsapAdtBuildAccessesString(
  477. IN PUNICODE_STRING SourceModule,
  478. IN PUNICODE_STRING ObjectTypeName,
  479. IN ACCESS_MASK Accesses,
  480. IN BOOLEAN Indent,
  481. OUT PUNICODE_STRING ResultantString,
  482. OUT PBOOLEAN FreeWhenDone
  483. );
  484. NTSTATUS
  485. LsapAdtBuildFilePathString(
  486. IN PUNICODE_STRING Value,
  487. OUT PUNICODE_STRING ResultantString,
  488. OUT PBOOLEAN FreeWhenDone
  489. );
  490. NTSTATUS
  491. LsapAdtBuildLogonIdStrings(
  492. IN PLUID LogonId,
  493. OUT PUNICODE_STRING ResultantString1,
  494. OUT PBOOLEAN FreeWhenDone1,
  495. OUT PUNICODE_STRING ResultantString2,
  496. OUT PBOOLEAN FreeWhenDone2,
  497. OUT PUNICODE_STRING ResultantString3,
  498. OUT PBOOLEAN FreeWhenDone3
  499. );
  500. NTSTATUS
  501. LsapBuildPrivilegeAuditString(
  502. IN PPRIVILEGE_SET PrivilegeSet,
  503. OUT PUNICODE_STRING ResultantString,
  504. OUT PBOOLEAN FreeWhenDone
  505. );
  506. NTSTATUS
  507. LsapAdtBuildTimeString(
  508. IN PLARGE_INTEGER Value,
  509. OUT PUNICODE_STRING ResultantString,
  510. OUT PBOOLEAN FreeWhenDone
  511. );
  512. NTSTATUS
  513. LsapAdtBuildDateString(
  514. IN PLARGE_INTEGER Value,
  515. OUT PUNICODE_STRING ResultantString,
  516. OUT PBOOLEAN FreeWhenDone
  517. );
  518. NTSTATUS
  519. LsapAdtBuildDateTimeString(
  520. IN PLARGE_INTEGER Value,
  521. OUT PUNICODE_STRING ResultantString,
  522. OUT PBOOLEAN FreeWhenDone
  523. );
  524. NTSTATUS
  525. LsapAdtBuildDurationString(
  526. IN PLARGE_INTEGER Value,
  527. OUT PUNICODE_STRING ResultantString,
  528. OUT PBOOLEAN FreeWhenDone
  529. );
  530. NTSTATUS
  531. LsapAdtBuildGuidString(
  532. IN LPGUID pGuid,
  533. OUT PUNICODE_STRING ResultantString,
  534. OUT PBOOLEAN FreeWhenDone
  535. );
  536. NTSTATUS
  537. LsapAdtBuildStringListString(
  538. IN PLSA_ADT_STRING_LIST pList,
  539. OUT PUNICODE_STRING ResultantString,
  540. OUT PBOOLEAN FreeWhenDone
  541. );
  542. NTSTATUS
  543. LsapAdtBuildSidListString(
  544. IN PLSA_ADT_SID_LIST pList,
  545. OUT PUNICODE_STRING ResultantString,
  546. OUT PBOOLEAN FreeWhenDone
  547. );
  548. NTSTATUS
  549. LsapAdtBuildUserAccountControlString(
  550. IN ULONG UserAccountControlOld,
  551. IN ULONG UserAccountControlNew,
  552. OUT PUNICODE_STRING ResultantString1,
  553. OUT PBOOLEAN FreeWhenDone1,
  554. OUT PUNICODE_STRING ResultantString2,
  555. OUT PBOOLEAN FreeWhenDone2,
  556. OUT PUNICODE_STRING ResultantString3,
  557. OUT PBOOLEAN FreeWhenDone3
  558. );
  559. NTSTATUS
  560. LsapAdtBuildMessageString(
  561. IN ULONG MessageId,
  562. OUT PUNICODE_STRING ResultantString,
  563. OUT PBOOLEAN FreeWhenDone
  564. );
  565. NTSTATUS
  566. LsapAdtBuildSockAddrString(
  567. IN PSOCKADDR pSockAddr,
  568. OUT PUNICODE_STRING ResultantString1,
  569. OUT PBOOLEAN FreeWhenDone1,
  570. OUT PUNICODE_STRING ResultantString2,
  571. OUT PBOOLEAN FreeWhenDone2
  572. );
  573. NTSTATUS
  574. LsapAdtMarshallAuditRecord(
  575. IN PSE_ADT_PARAMETER_ARRAY AuditParameters,
  576. OUT PSE_ADT_PARAMETER_ARRAY *MarshalledAuditParameters
  577. );
  578. NTSTATUS
  579. LsapAdtInitializePerUserAuditing(
  580. VOID
  581. );
  582. NTSTATUS
  583. LsapAdtInitializeDriveLetters(
  584. VOID
  585. );
  586. BOOLEAN
  587. LsapAdtLookupDriveLetter(
  588. IN PUNICODE_STRING FileName,
  589. OUT PUSHORT DeviceNameLength,
  590. OUT PWCHAR DriveLetter
  591. );
  592. VOID
  593. LsapAdtSubstituteDriveLetter(
  594. IN PUNICODE_STRING FileName
  595. );
  596. VOID
  597. LsapAdtUserRightAssigned(
  598. IN USHORT EventCategory,
  599. IN ULONG EventID,
  600. IN USHORT EventType,
  601. IN PSID UserSid,
  602. IN LUID CallerAuthenticationId,
  603. IN PSID ClientSid,
  604. IN PPRIVILEGE_SET Privileges
  605. );
  606. VOID
  607. LsapAdtTrustedDomain(
  608. IN USHORT EventCategory,
  609. IN ULONG EventID,
  610. IN USHORT EventType,
  611. IN PSID ClientSid,
  612. IN LUID CallerAuthenticationId,
  613. IN PSID TargetSid,
  614. IN PUNICODE_STRING DomainName
  615. );
  616. VOID
  617. LsapAdtAuditLogoff(
  618. PLSAP_LOGON_SESSION Session
  619. );
  620. VOID
  621. LsapAdtPolicyChange(
  622. IN USHORT EventCategory,
  623. IN ULONG EventID,
  624. IN USHORT EventType,
  625. IN PSID ClientSid,
  626. IN LUID CallerAuthenticationId,
  627. IN PLSARM_POLICY_AUDIT_EVENTS_INFO LsapAdtEventsInformation
  628. );
  629. VOID
  630. LsapAdtAuditSpecialPrivileges(
  631. PPRIVILEGE_SET Privileges,
  632. LUID LogonId,
  633. PSID UserSid
  634. );
  635. VOID
  636. LsapAuditFailed(
  637. IN NTSTATUS AuditStatus
  638. );
  639. NTSTATUS
  640. LsapAdtInitParametersArray(
  641. IN SE_ADT_PARAMETER_ARRAY* AuditParameters,
  642. IN ULONG AuditCategoryId,
  643. IN ULONG AuditId,
  644. IN USHORT AuditEventType,
  645. IN USHORT ParameterCount,
  646. ...);
  647. NTSTATUS
  648. LsapAdtInitGenericAudits(
  649. VOID
  650. );
  651. NTSTATUS
  652. LsapAdtInitializeExtensibleAuditing(
  653. );
  654. NTSTATUS
  655. LsapAdtConstructTablePerUserAuditing(
  656. VOID
  657. );
  658. VOID
  659. LsapAdtFreeTablePerUserAuditing(
  660. VOID
  661. );
  662. NTSTATUS
  663. LsapAdtOpenPerUserAuditingKey(
  664. VOID
  665. );
  666. ULONG
  667. LsapAdtHashPerUserAuditing(
  668. IN PSID pSid
  669. );
  670. NTSTATUS
  671. LsapAdtConstructPolicyPerUserAuditing(
  672. IN ULONGLONG RawPolicy,
  673. OUT PTOKEN_AUDIT_POLICY pTokenPolicy,
  674. IN OUT PULONG TokenPolicyLength
  675. );
  676. NTSTATUS
  677. LsapAdtQueryPerUserAuditing(
  678. IN PSID pInputSid,
  679. OUT PTOKEN_AUDIT_POLICY pPolicy,
  680. IN OUT PULONG pLength,
  681. OUT PBOOLEAN bFound
  682. );
  683. NTSTATUS
  684. LsapAdtFilterAdminPerUserAuditing(
  685. IN HANDLE hToken,
  686. IN OUT PTOKEN_AUDIT_POLICY pPolicy
  687. );
  688. NTSTATUS
  689. LsapAdtStorePolicyByLuidPerUserAuditing(
  690. IN PLUID pLogonId,
  691. IN PTOKEN_AUDIT_POLICY pPolicy
  692. );
  693. NTSTATUS
  694. LsapAdtQueryPolicyByLuidPerUserAuditing(
  695. IN PLUID pLogonId,
  696. OUT PTOKEN_AUDIT_POLICY pPolicy,
  697. IN OUT PULONG pLength,
  698. OUT PBOOLEAN bFound
  699. );
  700. NTSTATUS
  701. LsapAdtRemoveLuidQueryPerUserAuditing(
  702. IN PLUID pLogonId
  703. );
  704. DWORD
  705. LsapAdtKeyNotifyFirePerUserAuditing(
  706. IN LPVOID Ignore
  707. );
  708. DWORD
  709. LsapAdtKeyNotifyStubPerUserAuditing(
  710. IN LPVOID Ignore
  711. );
  712. NTSTATUS
  713. LsapAdtLogonPerUserAuditing(
  714. IN PSID pSid,
  715. IN PLUID pLogonId,
  716. IN HANDLE hToken
  717. );
  718. VOID
  719. LsapAdtLogonCountersPerUserAuditing(
  720. IN PTOKEN_AUDIT_POLICY pPolicy
  721. );
  722. NTSTATUS
  723. LsapAdtLogoffPerUserAuditing(
  724. IN PLUID pLogonId
  725. );
  726. VOID
  727. LsapAdtLogoffCountersPerUserAuditing(
  728. IN PTOKEN_AUDIT_POLICY pPolicy
  729. );
  730. VOID
  731. LsapAdtAuditPerUserTableCreation(
  732. BOOLEAN bSuccess
  733. );
  734. VOID
  735. LsapAdtLogAuditFailureEvent(
  736. NTSTATUS AuditStatus
  737. );
  738. NTSTATUS
  739. LsapFlushSecurityLog();
  740. #endif // _LSAP_ADTP_