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.

1388 lines
34 KiB

  1. //+-----------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (c) Microsoft Corporation 1992 - 1997
  6. //
  7. // File: lsaitf.c
  8. //
  9. // Contents: Routines for dynamically calling LSA & Sam routines
  10. //
  11. //
  12. // History: 21-February-1997 Created MikeSw
  13. //
  14. //------------------------------------------------------------------------
  15. #include <nt.h>
  16. #include <ntrtl.h>
  17. #include <nturtl.h>
  18. #include <windows.h>
  19. #include <lsarpc.h>
  20. #include <samrpc.h>
  21. #include <lsaisrv.h>
  22. #include <samisrv.h>
  23. #include <lsaitf.h>
  24. typedef NTSTATUS (*PI_SamrSetInformationUser)(
  25. IN SAMPR_HANDLE UserHandle,
  26. IN USER_INFORMATION_CLASS UserInformationClass,
  27. IN PSAMPR_USER_INFO_BUFFER Buffer
  28. );
  29. typedef NTSTATUS (*PI_SamrCloseHandle)(
  30. IN OUT SAMPR_HANDLE * SamHandle
  31. );
  32. typedef NTSTATUS (*PI_SamrOpenDomain)(
  33. IN SAMPR_HANDLE ServerHandle,
  34. IN ACCESS_MASK DesiredAccess,
  35. IN PRPC_SID DomainId,
  36. OUT SAMPR_HANDLE * DomainHandle
  37. );
  38. typedef NTSTATUS (*PI_SamrQueryInformationDomain)(
  39. IN SAMPR_HANDLE DomainHandle,
  40. IN DOMAIN_INFORMATION_CLASS DomainInformationClass,
  41. OUT PSAMPR_DOMAIN_INFO_BUFFER *Buffer
  42. );
  43. typedef NTSTATUS (*PI_SamIConnect)(
  44. IN PSAMPR_SERVER_NAME ServerName,
  45. OUT SAMPR_HANDLE *ServerHandle,
  46. IN ACCESS_MASK DesiredAccess,
  47. IN BOOLEAN TrustedClient
  48. );
  49. typedef NTSTATUS (*PI_SamIAccountRestrictions)(
  50. IN SAM_HANDLE UserHandle,
  51. IN PUNICODE_STRING LogonWorkstation,
  52. IN PUNICODE_STRING Workstations,
  53. IN PLOGON_HOURS LogonHours,
  54. OUT PLARGE_INTEGER LogoffTime,
  55. OUT PLARGE_INTEGER KickoffTime
  56. );
  57. typedef NTSTATUS (*PI_SamIGetUserLogonInformation)(
  58. IN SAMPR_HANDLE DomainHandle,
  59. IN ULONG Flags,
  60. IN PUNICODE_STRING AccountName,
  61. OUT PSAMPR_USER_INFO_BUFFER * Buffer,
  62. OUT PSID_AND_ATTRIBUTES_LIST ReverseMembership,
  63. OUT OPTIONAL SAMPR_HANDLE * UserHandle
  64. );
  65. typedef NTSTATUS (*PI_SamIGetUserLogonInformationEx)(
  66. IN SAMPR_HANDLE DomainHandle,
  67. IN ULONG Flags,
  68. IN PUNICODE_STRING AccountName,
  69. IN ULONG WhichFields,
  70. OUT PSAMPR_USER_INFO_BUFFER * Buffer,
  71. OUT PSID_AND_ATTRIBUTES_LIST ReverseMembership,
  72. OUT OPTIONAL SAMPR_HANDLE * UserHandle
  73. );
  74. typedef VOID (*PI_SamIFree_SAMPR_USER_INFO_BUFFER )(
  75. PSAMPR_USER_INFO_BUFFER Source,
  76. USER_INFORMATION_CLASS Branch
  77. );
  78. typedef VOID (*PI_SamIFree_SAMPR_ULONG_ARRAY )(
  79. PSAMPR_ULONG_ARRAY Source
  80. );
  81. typedef VOID (*PI_SamIFree_SAMPR_RETURNED_USTRING_ARRAY )(
  82. PSAMPR_RETURNED_USTRING_ARRAY Source
  83. );
  84. typedef VOID (*PI_SamIFreeSidAndAttributesList)(
  85. IN PSID_AND_ATTRIBUTES_LIST List
  86. );
  87. typedef VOID
  88. (NTAPI *PI_SamIIncrementPerformanceCounter)(
  89. IN SAM_PERF_COUNTER_TYPE CounterType
  90. );
  91. typedef VOID (*PI_SamIFreeVoid)(
  92. IN PVOID ptr
  93. );
  94. typedef NTSTATUS (*PI_SamIUPNFromUserHandle)(
  95. IN SAMPR_HANDLE UserHandle,
  96. OUT BOOLEAN *UPNDefaulted,
  97. OUT PUNICODE_STRING UPN
  98. );
  99. typedef NTSTATUS (*PI_SamIUpdateLogonStatistics)(
  100. IN SAMPR_HANDLE UserHandle,
  101. IN PSAM_LOGON_STATISTICS LogonStats
  102. );
  103. typedef NTSTATUS (*PI_LsaIOpenPolicyTrusted)(
  104. OUT PLSAPR_HANDLE PolicyHandle
  105. );
  106. typedef NTSTATUS (*PI_LsarClose)(
  107. IN OUT LSAPR_HANDLE *ObjectHandle
  108. );
  109. typedef NTSTATUS (*PI_LsaIQueryInformationPolicyTrusted)(
  110. IN POLICY_INFORMATION_CLASS InformationClass,
  111. OUT PLSAPR_POLICY_INFORMATION *Buffer
  112. );
  113. typedef NTSTATUS (*PI_LsarQueryInformationPolicy)(
  114. IN LSAPR_HANDLE PolicyHandle,
  115. IN POLICY_INFORMATION_CLASS InformationClass,
  116. OUT PLSAPR_POLICY_INFORMATION *PolicyInformation
  117. );
  118. typedef VOID (*PI_LsaIFree_LSAPR_POLICY_INFORMATION )(
  119. IN POLICY_INFORMATION_CLASS InformationClass,
  120. IN PLSAPR_POLICY_INFORMATION PolicyInformation
  121. );
  122. typedef NTSTATUS (*PI_LsarCreateSecret)(
  123. IN LSAPR_HANDLE PolicyHandle,
  124. IN PLSAPR_UNICODE_STRING SecretName,
  125. IN ACCESS_MASK DesiredAccess,
  126. OUT LSAPR_HANDLE *SecretHandle
  127. );
  128. typedef NTSTATUS (*PI_LsarOpenSecret)(
  129. IN LSAPR_HANDLE PolicyHandle,
  130. IN PLSAPR_UNICODE_STRING SecretName,
  131. IN ACCESS_MASK DesiredAccess,
  132. OUT LSAPR_HANDLE *SecretHandle
  133. );
  134. typedef NTSTATUS (*PI_LsarSetSecret)(
  135. IN LSAPR_HANDLE SecretHandle,
  136. IN PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue,
  137. IN PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
  138. );
  139. typedef NTSTATUS (*PI_LsarQuerySecret)(
  140. IN LSAPR_HANDLE SecretHandle,
  141. IN OUT OPTIONAL PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue,
  142. IN OUT OPTIONAL PLARGE_INTEGER CurrentValueSetTime,
  143. IN OUT OPTIONAL PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue,
  144. IN OUT OPTIONAL PLARGE_INTEGER OldValueSetTime
  145. );
  146. typedef NTSTATUS (*PI_LsarDelete)(
  147. IN OUT LSAPR_HANDLE ObjectHandle
  148. );
  149. typedef VOID (*PI_LsaIFree_LSAPR_CR_CIPHER_VALUE) (
  150. IN PLSAPR_CR_CIPHER_VALUE CipherValue
  151. );
  152. typedef NTSTATUS
  153. (NTAPI *PI_LsaIRegisterPolicyChangeNotificationCallback)(
  154. IN pfLsaPolicyChangeNotificationCallback Callback,
  155. IN POLICY_NOTIFICATION_INFORMATION_CLASS MonitorInfoClass
  156. );
  157. typedef NTSTATUS
  158. (NTAPI *PI_LsaIUnregisterPolicyChangeNotificationCallback)(
  159. IN pfLsaPolicyChangeNotificationCallback Callback,
  160. IN POLICY_NOTIFICATION_INFORMATION_CLASS MonitorInfoClass
  161. );
  162. typedef NTSTATUS
  163. (NTAPI *PI_LsaIAuditAccountLogonEx)(
  164. IN ULONG AuditId,
  165. IN BOOLEAN Successful,
  166. IN PUNICODE_STRING Source,
  167. IN PUNICODE_STRING ClientName,
  168. IN PUNICODE_STRING MappedName,
  169. IN NTSTATUS LogonStatus, OPTIONAL
  170. IN PSID ClientSid
  171. );
  172. typedef
  173. NTSTATUS
  174. (NTAPI *PI_LsaIGetLogonGuid)(
  175. IN PUNICODE_STRING pUserName,
  176. IN PUNICODE_STRING pUserDomain,
  177. IN PBYTE pBuffer,
  178. IN UINT BufferSize,
  179. OUT LPGUID pLogonGuid
  180. );
  181. typedef
  182. NTSTATUS
  183. (NTAPI *PI_LsaISetLogonGuidInLogonSession)(
  184. IN PLUID pLogonId,
  185. IN LPGUID pLogonGuid
  186. );
  187. typedef
  188. VOID
  189. (NTAPI *PI_LsaIAuditKerberosLogon)(
  190. IN NTSTATUS LogonStatus,
  191. IN NTSTATUS LogonSubStatus,
  192. IN PUNICODE_STRING AccountName,
  193. IN PUNICODE_STRING AuthenticatingAuthority,
  194. IN PUNICODE_STRING WorkstationName,
  195. IN PSID UserSid, OPTIONAL
  196. IN SECURITY_LOGON_TYPE LogonType,
  197. IN PTOKEN_SOURCE TokenSource,
  198. IN PLUID pLogonId,
  199. IN LPGUID pLogonGuid,
  200. IN PLSA_ADT_STRING_LIST TransittedServices
  201. );
  202. typedef
  203. NTSTATUS
  204. (NTAPI *PI_LsaIAuditLogonUsingExplicitCreds)(
  205. IN USHORT AuditEventType,
  206. IN PLUID pUser1LogonId,
  207. IN LPGUID pUser1LogonGuid,
  208. IN HANDLE User1ProcessId,
  209. IN PUNICODE_STRING pUser2Name,
  210. IN PUNICODE_STRING pUser2Domain,
  211. IN LPGUID pUser2LogonGuid,
  212. IN PUNICODE_STRING pTargetName,
  213. IN PUNICODE_STRING pTargetInfo
  214. );
  215. typedef NTSTATUS
  216. (NTAPI *PI_LsaICallPackage)(
  217. IN PUNICODE_STRING AuthenticationPackage,
  218. IN PVOID ProtocolSubmitBuffer,
  219. IN ULONG SubmitBufferLength,
  220. OUT PVOID *ProtocolReturnBuffer,
  221. OUT PULONG ReturnBufferLength,
  222. OUT PNTSTATUS ProtocolStatus
  223. );
  224. typedef NTSTATUS
  225. (NTAPI *PI_LsaIAddNameToLogonSession)(
  226. IN PLUID LogonId,
  227. IN ULONG NameFormat,
  228. IN PUNICODE_STRING Name
  229. );
  230. typedef NTSTATUS
  231. (NTAPI *PI_LsaIGetNameFromLuid)(
  232. IN PLUID LogonId,
  233. IN ULONG NameFormat,
  234. IN BOOLEAN LocalOnly,
  235. OUT PUNICODE_STRING Name
  236. );
  237. typedef NTSTATUS
  238. (NTAPI *PI_LsaISetPackageAttrInLogonSession)(
  239. IN PLUID LogonId,
  240. IN ULONG PackageAttr
  241. );
  242. typedef
  243. NTSTATUS
  244. (NTAPI *PI_LsaIAdtAuditingEnabledByCategory)(
  245. IN POLICY_AUDIT_EVENT_TYPE Category,
  246. IN USHORT AuditEventType,
  247. IN PSID pUserSid,
  248. IN PLUID pLogonId,
  249. OUT PBOOLEAN pbAudit
  250. );
  251. ///////////////////////////////////////////////////////////////////////
  252. BOOLEAN SrvDllsLoaded = FALSE;
  253. NTSTATUS DllLoadStatus = STATUS_SUCCESS;
  254. PI_SamrSetInformationUser pI_SamrSetInformationUser;
  255. PI_SamrCloseHandle pI_SamrCloseHandle;
  256. PI_SamrOpenDomain pI_SamrOpenDomain;
  257. PI_SamrQueryInformationDomain pI_SamrQueryInformationDomain;
  258. PI_SamIConnect pI_SamIConnect;
  259. PI_SamIAccountRestrictions pI_SamIAccountRestrictions;
  260. PI_SamIGetUserLogonInformation pI_SamIGetUserLogonInformation;
  261. PI_SamIGetUserLogonInformationEx pI_SamIGetUserLogonInformationEx;
  262. PI_SamIFree_SAMPR_USER_INFO_BUFFER pI_SamIFree_SAMPR_USER_INFO_BUFFER ;
  263. PI_SamIFree_SAMPR_ULONG_ARRAY pI_SamIFree_SAMPR_ULONG_ARRAY ;
  264. PI_SamIFreeSidAndAttributesList pI_SamIFreeSidAndAttributesList ;
  265. PI_SamIFree_SAMPR_RETURNED_USTRING_ARRAY pI_SamIFree_SAMPR_RETURNED_USTRING_ARRAY;
  266. PI_SamIIncrementPerformanceCounter pI_SamIIncrementPerformanceCounter;
  267. PI_SamIFreeVoid pI_SamIFreeVoid;
  268. PI_SamIUPNFromUserHandle pI_SamIUPNFromUserHandle;
  269. PI_SamIUpdateLogonStatistics pI_SamIUpdateLogonStatistics;
  270. PI_LsaIOpenPolicyTrusted pI_LsaIOpenPolicyTrusted;
  271. PI_LsarClose pI_LsarClose;
  272. PI_LsaIQueryInformationPolicyTrusted pI_LsaIQueryInformationPolicyTrusted;
  273. PI_LsarQueryInformationPolicy pI_LsarQueryInformationPolicy;
  274. PI_LsaIFree_LSAPR_POLICY_INFORMATION pI_LsaIFree_LSAPR_POLICY_INFORMATION ;
  275. PI_LsarCreateSecret pI_LsarCreateSecret;
  276. PI_LsarOpenSecret pI_LsarOpenSecret;
  277. PI_LsarSetSecret pI_LsarSetSecret;
  278. PI_LsarQuerySecret pI_LsarQuerySecret;
  279. PI_LsarDelete pI_LsarDelete;
  280. PI_LsaIFree_LSAPR_CR_CIPHER_VALUE pI_LsaIFree_LSAPR_CR_CIPHER_VALUE;
  281. PI_LsaIRegisterPolicyChangeNotificationCallback pI_LsaIRegisterPolicyChangeNotificationCallback;
  282. PI_LsaIUnregisterPolicyChangeNotificationCallback pI_LsaIUnregisterPolicyChangeNotificationCallback;
  283. PI_LsaIAuditAccountLogonEx pI_LsaIAuditAccountLogonEx;
  284. PI_LsaIGetLogonGuid pI_LsaIGetLogonGuid;
  285. PI_LsaISetLogonGuidInLogonSession pI_LsaISetLogonGuidInLogonSession;
  286. PI_LsaIAuditKerberosLogon pI_LsaIAuditKerberosLogon;
  287. PI_LsaIAuditLogonUsingExplicitCreds pI_LsaIAuditLogonUsingExplicitCreds;
  288. PI_LsaICallPackage pI_LsaICallPackage;
  289. PI_LsaIAddNameToLogonSession pI_LsaIAddNameToLogonSession;
  290. PI_LsaIGetNameFromLuid pI_LsaIGetNameFromLuid;
  291. PI_LsaISetPackageAttrInLogonSession pI_LsaISetPackageAttrInLogonSession;
  292. PI_LsaIAdtAuditingEnabledByCategory pI_LsaIAdtAuditingEnabledByCategory;
  293. ///////////////////////////////////////////////////////////////////////
  294. //
  295. // Macro to grab the address of the named procedure from a DLL
  296. //
  297. #if DBG
  298. #define GRAB_ADDRESS( _Y, _X ) \
  299. pI_##_X = (PI_##_X) GetProcAddress( _Y, #_X ); \
  300. \
  301. if ( pI_##_X == NULL ) { \
  302. DbgPrint("[security process] can't load " #_X " procedure. %ld\n", GetLastError()); \
  303. Status = STATUS_PROCEDURE_NOT_FOUND;\
  304. goto Cleanup; \
  305. }
  306. #else // DBG
  307. #define GRAB_ADDRESS( _Y, _X ) \
  308. pI_##_X = (PI_##_X) GetProcAddress( _Y, #_X ); \
  309. \
  310. if ( pI_##_X == NULL ) { \
  311. Status = STATUS_PROCEDURE_NOT_FOUND;\
  312. goto Cleanup; \
  313. }
  314. #endif // DBG
  315. //+-------------------------------------------------------------------------
  316. //
  317. // Function: EnsureSrvDllsLoaded
  318. //
  319. // Synopsis: Ensures that lsasrv.dll & samsrv.dll are loaded and
  320. // looks up function addresses in them.
  321. //
  322. // Effects:
  323. //
  324. // Arguments:
  325. //
  326. // Requires:
  327. //
  328. // Returns:
  329. //
  330. // Notes:
  331. //
  332. //
  333. //--------------------------------------------------------------------------
  334. NTSTATUS
  335. EnsureSrvDllsLoaded(
  336. VOID
  337. )
  338. {
  339. NTSTATUS Status = STATUS_SUCCESS;
  340. HMODULE SamsrvHandle = NULL;
  341. HMODULE LsasrvHandle = NULL;
  342. if (!NT_SUCCESS(DllLoadStatus))
  343. {
  344. return(DllLoadStatus);
  345. }
  346. //
  347. // Get handles to the DLLs. We don't want to load the DLLs - just
  348. // use them if they are present
  349. //
  350. SamsrvHandle = GetModuleHandleW(L"samsrv.dll");
  351. if (SamsrvHandle == NULL)
  352. {
  353. Status = STATUS_DLL_NOT_FOUND;
  354. goto Cleanup;
  355. }
  356. LsasrvHandle = GetModuleHandleW(L"lsasrv.dll");
  357. if (SamsrvHandle == NULL)
  358. {
  359. Status = STATUS_DLL_NOT_FOUND;
  360. goto Cleanup;
  361. }
  362. GRAB_ADDRESS( SamsrvHandle, SamrSetInformationUser );
  363. GRAB_ADDRESS( SamsrvHandle, SamrCloseHandle );
  364. GRAB_ADDRESS( SamsrvHandle, SamrOpenDomain );
  365. GRAB_ADDRESS( SamsrvHandle, SamrQueryInformationDomain );
  366. GRAB_ADDRESS( SamsrvHandle, SamIConnect );
  367. GRAB_ADDRESS( SamsrvHandle, SamIAccountRestrictions );
  368. GRAB_ADDRESS( SamsrvHandle, SamIGetUserLogonInformation );
  369. GRAB_ADDRESS( SamsrvHandle, SamIGetUserLogonInformationEx );
  370. GRAB_ADDRESS( SamsrvHandle, SamIFree_SAMPR_USER_INFO_BUFFER );
  371. GRAB_ADDRESS( SamsrvHandle, SamIFree_SAMPR_ULONG_ARRAY );
  372. GRAB_ADDRESS( SamsrvHandle, SamIFree_SAMPR_RETURNED_USTRING_ARRAY );
  373. GRAB_ADDRESS( SamsrvHandle, SamIFreeSidAndAttributesList );
  374. GRAB_ADDRESS( SamsrvHandle, SamIIncrementPerformanceCounter );
  375. GRAB_ADDRESS( SamsrvHandle, SamIFreeVoid );
  376. GRAB_ADDRESS( SamsrvHandle, SamIUPNFromUserHandle );
  377. GRAB_ADDRESS( SamsrvHandle, SamIUpdateLogonStatistics );
  378. GRAB_ADDRESS( LsasrvHandle, LsaIOpenPolicyTrusted );
  379. GRAB_ADDRESS( LsasrvHandle, LsaIQueryInformationPolicyTrusted );
  380. GRAB_ADDRESS( LsasrvHandle, LsarClose );
  381. GRAB_ADDRESS( LsasrvHandle, LsarQueryInformationPolicy );
  382. GRAB_ADDRESS( LsasrvHandle, LsaIFree_LSAPR_POLICY_INFORMATION );
  383. GRAB_ADDRESS( LsasrvHandle, LsarCreateSecret );
  384. GRAB_ADDRESS( LsasrvHandle, LsarOpenSecret );
  385. GRAB_ADDRESS( LsasrvHandle, LsarSetSecret );
  386. GRAB_ADDRESS( LsasrvHandle, LsarQuerySecret );
  387. GRAB_ADDRESS( LsasrvHandle, LsarDelete );
  388. GRAB_ADDRESS( LsasrvHandle, LsaIFree_LSAPR_CR_CIPHER_VALUE );
  389. GRAB_ADDRESS( LsasrvHandle, LsaIRegisterPolicyChangeNotificationCallback );
  390. GRAB_ADDRESS( LsasrvHandle, LsaIUnregisterPolicyChangeNotificationCallback );
  391. GRAB_ADDRESS( LsasrvHandle, LsaIAuditAccountLogonEx );
  392. GRAB_ADDRESS( LsasrvHandle, LsaIGetLogonGuid );
  393. GRAB_ADDRESS( LsasrvHandle, LsaISetLogonGuidInLogonSession );
  394. GRAB_ADDRESS( LsasrvHandle, LsaIAuditKerberosLogon );
  395. GRAB_ADDRESS( LsasrvHandle, LsaIAuditLogonUsingExplicitCreds );
  396. GRAB_ADDRESS( LsasrvHandle, LsaICallPackage );
  397. GRAB_ADDRESS( LsasrvHandle, LsaIAddNameToLogonSession );
  398. GRAB_ADDRESS( LsasrvHandle, LsaIGetNameFromLuid );
  399. GRAB_ADDRESS( LsasrvHandle, LsaISetPackageAttrInLogonSession );
  400. GRAB_ADDRESS( LsasrvHandle, LsaIAdtAuditingEnabledByCategory );
  401. SrvDllsLoaded = TRUE;
  402. Cleanup:
  403. if (!NT_SUCCESS(Status))
  404. {
  405. DllLoadStatus = Status;
  406. }
  407. return(Status);
  408. }
  409. ///////////////////////////////////////////////////////////////////////
  410. NTSTATUS
  411. I_SamrSetInformationUser(
  412. IN SAMPR_HANDLE UserHandle,
  413. IN USER_INFORMATION_CLASS UserInformationClass,
  414. IN PSAMPR_USER_INFO_BUFFER Buffer
  415. )
  416. {
  417. NTSTATUS Status;
  418. if (!SrvDllsLoaded)
  419. {
  420. Status = EnsureSrvDllsLoaded();
  421. if (!NT_SUCCESS(Status)) {
  422. return(Status);
  423. }
  424. }
  425. return((*pI_SamrSetInformationUser)(
  426. UserHandle,
  427. UserInformationClass,
  428. Buffer
  429. ));
  430. }
  431. NTSTATUS
  432. I_SamrCloseHandle(
  433. IN OUT SAMPR_HANDLE * SamHandle
  434. )
  435. {
  436. NTSTATUS Status;
  437. if (!SrvDllsLoaded)
  438. {
  439. Status = EnsureSrvDllsLoaded();
  440. if (!NT_SUCCESS(Status)) {
  441. return(Status);
  442. }
  443. }
  444. return((*pI_SamrCloseHandle)( SamHandle ));
  445. }
  446. NTSTATUS
  447. I_SamrOpenDomain(
  448. IN SAMPR_HANDLE ServerHandle,
  449. IN ACCESS_MASK DesiredAccess,
  450. IN PRPC_SID DomainId,
  451. OUT SAMPR_HANDLE * DomainHandle
  452. )
  453. {
  454. NTSTATUS Status;
  455. if (!SrvDllsLoaded)
  456. {
  457. Status = EnsureSrvDllsLoaded();
  458. if (!NT_SUCCESS(Status)) {
  459. return(Status);
  460. }
  461. }
  462. return((*pI_SamrOpenDomain)(
  463. ServerHandle,
  464. DesiredAccess,
  465. DomainId,
  466. DomainHandle
  467. ));
  468. }
  469. NTSTATUS
  470. I_SamrQueryInformationDomain(
  471. IN SAMPR_HANDLE DomainHandle,
  472. IN DOMAIN_INFORMATION_CLASS DomainInformationClass,
  473. OUT PSAMPR_DOMAIN_INFO_BUFFER *Buffer
  474. )
  475. {
  476. NTSTATUS Status;
  477. if (!SrvDllsLoaded)
  478. {
  479. Status = EnsureSrvDllsLoaded();
  480. if (!NT_SUCCESS(Status)) {
  481. return(Status);
  482. }
  483. }
  484. return((*pI_SamrQueryInformationDomain)(
  485. DomainHandle,
  486. DomainInformationClass,
  487. Buffer
  488. ));
  489. }
  490. NTSTATUS
  491. I_SamIConnect(
  492. IN PSAMPR_SERVER_NAME ServerName,
  493. OUT SAMPR_HANDLE *ServerHandle,
  494. IN ACCESS_MASK DesiredAccess,
  495. IN BOOLEAN TrustedClient
  496. )
  497. {
  498. NTSTATUS Status;
  499. if (!SrvDllsLoaded)
  500. {
  501. Status = EnsureSrvDllsLoaded();
  502. if (!NT_SUCCESS(Status)) {
  503. return(Status);
  504. }
  505. }
  506. return((*pI_SamIConnect)(
  507. ServerName,
  508. ServerHandle,
  509. DesiredAccess,
  510. TrustedClient
  511. ));
  512. }
  513. NTSTATUS
  514. I_SamIAccountRestrictions(
  515. IN SAM_HANDLE UserHandle,
  516. IN PUNICODE_STRING LogonWorkstation,
  517. IN PUNICODE_STRING Workstations,
  518. IN PLOGON_HOURS LogonHours,
  519. OUT PLARGE_INTEGER LogoffTime,
  520. OUT PLARGE_INTEGER KickoffTime
  521. )
  522. {
  523. NTSTATUS Status;
  524. if (!SrvDllsLoaded)
  525. {
  526. Status = EnsureSrvDllsLoaded();
  527. if (!NT_SUCCESS(Status)) {
  528. return(Status);
  529. }
  530. }
  531. return((*pI_SamIAccountRestrictions)(
  532. UserHandle,
  533. LogonWorkstation,
  534. Workstations,
  535. LogonHours,
  536. LogoffTime,
  537. KickoffTime
  538. ));
  539. }
  540. NTSTATUS
  541. I_SamIGetUserLogonInformation(
  542. IN SAMPR_HANDLE DomainHandle,
  543. IN ULONG Flags,
  544. IN PUNICODE_STRING AccountName,
  545. OUT PSAMPR_USER_INFO_BUFFER * Buffer,
  546. OUT PSID_AND_ATTRIBUTES_LIST ReverseMembership,
  547. OUT OPTIONAL SAMPR_HANDLE * UserHandle
  548. )
  549. {
  550. NTSTATUS Status;
  551. if (!SrvDllsLoaded)
  552. {
  553. Status = EnsureSrvDllsLoaded();
  554. if (!NT_SUCCESS(Status)) {
  555. return(Status);
  556. }
  557. }
  558. return((*pI_SamIGetUserLogonInformation)(
  559. DomainHandle,
  560. Flags,
  561. AccountName,
  562. Buffer,
  563. ReverseMembership,
  564. UserHandle
  565. ));
  566. }
  567. NTSTATUS
  568. I_SamIGetUserLogonInformationEx(
  569. IN SAMPR_HANDLE DomainHandle,
  570. IN ULONG Flags,
  571. IN PUNICODE_STRING AccountName,
  572. IN ULONG WhichFields,
  573. OUT PSAMPR_USER_INFO_BUFFER * Buffer,
  574. OUT PSID_AND_ATTRIBUTES_LIST ReverseMembership,
  575. OUT OPTIONAL SAMPR_HANDLE * UserHandle
  576. )
  577. {
  578. NTSTATUS Status;
  579. if (!SrvDllsLoaded)
  580. {
  581. Status = EnsureSrvDllsLoaded();
  582. if (!NT_SUCCESS(Status)) {
  583. return(Status);
  584. }
  585. }
  586. return((*pI_SamIGetUserLogonInformationEx)(
  587. DomainHandle,
  588. Flags,
  589. AccountName,
  590. WhichFields,
  591. Buffer,
  592. ReverseMembership,
  593. UserHandle
  594. ));
  595. }
  596. VOID
  597. I_SamIFree_SAMPR_USER_INFO_BUFFER (
  598. PSAMPR_USER_INFO_BUFFER Source,
  599. USER_INFORMATION_CLASS Branch
  600. )
  601. {
  602. NTSTATUS Status;
  603. if (!SrvDllsLoaded)
  604. {
  605. Status = EnsureSrvDllsLoaded();
  606. if (!NT_SUCCESS(Status)) {
  607. return;
  608. }
  609. }
  610. (*pI_SamIFree_SAMPR_USER_INFO_BUFFER)(
  611. Source,
  612. Branch
  613. );
  614. }
  615. VOID
  616. I_SamIFree_SAMPR_ULONG_ARRAY (
  617. PSAMPR_ULONG_ARRAY Source
  618. )
  619. {
  620. NTSTATUS Status;
  621. if (!SrvDllsLoaded)
  622. {
  623. Status = EnsureSrvDllsLoaded();
  624. if (!NT_SUCCESS(Status)) {
  625. return;
  626. }
  627. }
  628. (*pI_SamIFree_SAMPR_ULONG_ARRAY)( Source );
  629. }
  630. VOID
  631. I_SamIFree_SAMPR_RETURNED_USTRING_ARRAY(
  632. PSAMPR_RETURNED_USTRING_ARRAY Source
  633. )
  634. {
  635. NTSTATUS Status;
  636. if (!SrvDllsLoaded)
  637. {
  638. Status = EnsureSrvDllsLoaded();
  639. if (!NT_SUCCESS(Status)) {
  640. return;
  641. }
  642. }
  643. (*pI_SamIFree_SAMPR_RETURNED_USTRING_ARRAY)( Source );
  644. }
  645. VOID
  646. I_SamIFreeSidAndAttributesList(
  647. IN PSID_AND_ATTRIBUTES_LIST List
  648. )
  649. {
  650. NTSTATUS Status;
  651. if (!SrvDllsLoaded)
  652. {
  653. Status = EnsureSrvDllsLoaded();
  654. if (!NT_SUCCESS(Status)) {
  655. return;
  656. }
  657. }
  658. (*pI_SamIFreeSidAndAttributesList)( List );
  659. }
  660. VOID
  661. I_SamIIncrementPerformanceCounter(
  662. IN SAM_PERF_COUNTER_TYPE CounterType
  663. )
  664. {
  665. NTSTATUS Status;
  666. if (!SrvDllsLoaded)
  667. {
  668. Status = EnsureSrvDllsLoaded();
  669. if (!NT_SUCCESS(Status)) {
  670. return;
  671. }
  672. }
  673. (*pI_SamIIncrementPerformanceCounter)( CounterType );
  674. }
  675. VOID
  676. I_SamIFreeVoid(
  677. IN PVOID ptr
  678. )
  679. {
  680. NTSTATUS Status;
  681. if (!SrvDllsLoaded)
  682. {
  683. Status = EnsureSrvDllsLoaded();
  684. if (!NT_SUCCESS(Status)) {
  685. return;
  686. }
  687. }
  688. (*pI_SamIFreeVoid)( ptr );
  689. }
  690. NTSTATUS
  691. I_SamIUPNFromUserHandle(
  692. IN SAMPR_HANDLE UserHandle,
  693. OUT BOOLEAN *UPNDefaulted,
  694. OUT PUNICODE_STRING UPN
  695. )
  696. {
  697. NTSTATUS Status;
  698. if (!SrvDllsLoaded)
  699. {
  700. Status = EnsureSrvDllsLoaded();
  701. if (!NT_SUCCESS(Status)) {
  702. return Status;
  703. }
  704. }
  705. return (*pI_SamIUPNFromUserHandle)( UserHandle, UPNDefaulted, UPN );
  706. }
  707. NTSTATUS
  708. I_SamIUpdateLogonStatistics(
  709. IN SAMPR_HANDLE UserHandle,
  710. IN PSAM_LOGON_STATISTICS LogonStats
  711. )
  712. {
  713. NTSTATUS Status;
  714. if (!SrvDllsLoaded)
  715. {
  716. Status = EnsureSrvDllsLoaded();
  717. if (!NT_SUCCESS(Status)) {
  718. return Status;
  719. }
  720. }
  721. return (*pI_SamIUpdateLogonStatistics)( UserHandle, LogonStats );
  722. }
  723. NTSTATUS
  724. I_LsaIOpenPolicyTrusted(
  725. OUT PLSAPR_HANDLE PolicyHandle
  726. )
  727. {
  728. NTSTATUS Status;
  729. if (!SrvDllsLoaded)
  730. {
  731. Status = EnsureSrvDllsLoaded();
  732. if (!NT_SUCCESS(Status)) {
  733. return(Status);
  734. }
  735. }
  736. return((*pI_LsaIOpenPolicyTrusted)( PolicyHandle ));
  737. }
  738. NTSTATUS
  739. I_LsaIQueryInformationPolicyTrusted(
  740. IN POLICY_INFORMATION_CLASS InformationClass,
  741. OUT PLSAPR_POLICY_INFORMATION *Buffer
  742. )
  743. {
  744. NTSTATUS Status;
  745. if (!SrvDllsLoaded)
  746. {
  747. Status = EnsureSrvDllsLoaded();
  748. if (!NT_SUCCESS(Status)) {
  749. return(Status);
  750. }
  751. }
  752. return((*pI_LsaIQueryInformationPolicyTrusted)(
  753. InformationClass,
  754. Buffer
  755. ));
  756. }
  757. NTSTATUS
  758. I_LsarClose(
  759. IN OUT LSAPR_HANDLE * LsaHandle
  760. )
  761. {
  762. NTSTATUS Status;
  763. if (!SrvDllsLoaded)
  764. {
  765. Status = EnsureSrvDllsLoaded();
  766. if (!NT_SUCCESS(Status)) {
  767. return(Status);
  768. }
  769. }
  770. return((*pI_LsarClose)( LsaHandle ));
  771. }
  772. NTSTATUS
  773. I_LsarQueryInformationPolicy(
  774. IN LSAPR_HANDLE PolicyHandle,
  775. IN POLICY_INFORMATION_CLASS InformationClass,
  776. OUT PLSAPR_POLICY_INFORMATION *PolicyInformation
  777. )
  778. {
  779. NTSTATUS Status;
  780. if (!SrvDllsLoaded)
  781. {
  782. Status = EnsureSrvDllsLoaded();
  783. if (!NT_SUCCESS(Status)) {
  784. return(Status);
  785. }
  786. }
  787. return((*pI_LsarQueryInformationPolicy)(
  788. PolicyHandle,
  789. InformationClass,
  790. PolicyInformation
  791. ));
  792. }
  793. VOID
  794. I_LsaIFree_LSAPR_POLICY_INFORMATION (
  795. IN POLICY_INFORMATION_CLASS InformationClass,
  796. IN PLSAPR_POLICY_INFORMATION PolicyInformation
  797. )
  798. {
  799. NTSTATUS Status;
  800. if (!SrvDllsLoaded)
  801. {
  802. Status = EnsureSrvDllsLoaded();
  803. if (!NT_SUCCESS(Status)) {
  804. return;
  805. }
  806. }
  807. (*pI_LsaIFree_LSAPR_POLICY_INFORMATION)(
  808. InformationClass,
  809. PolicyInformation
  810. );
  811. }
  812. NTSTATUS
  813. I_LsarCreateSecret(
  814. IN LSAPR_HANDLE PolicyHandle,
  815. IN PLSAPR_UNICODE_STRING SecretName,
  816. IN ACCESS_MASK DesiredAccess,
  817. OUT LSAPR_HANDLE *SecretHandle
  818. )
  819. {
  820. NTSTATUS Status;
  821. if (!SrvDllsLoaded)
  822. {
  823. Status = EnsureSrvDllsLoaded();
  824. if (!NT_SUCCESS(Status)) {
  825. return(Status);
  826. }
  827. }
  828. return((*pI_LsarCreateSecret)(
  829. PolicyHandle,
  830. SecretName,
  831. DesiredAccess,
  832. SecretHandle ));
  833. }
  834. NTSTATUS
  835. I_LsarOpenSecret(
  836. IN LSAPR_HANDLE PolicyHandle,
  837. IN PLSAPR_UNICODE_STRING SecretName,
  838. IN ACCESS_MASK DesiredAccess,
  839. OUT LSAPR_HANDLE *SecretHandle
  840. )
  841. {
  842. NTSTATUS Status;
  843. if (!SrvDllsLoaded)
  844. {
  845. Status = EnsureSrvDllsLoaded();
  846. if (!NT_SUCCESS(Status)) {
  847. return(Status);
  848. }
  849. }
  850. return((*pI_LsarOpenSecret)(
  851. PolicyHandle,
  852. SecretName,
  853. DesiredAccess,
  854. SecretHandle ));
  855. }
  856. NTSTATUS
  857. I_LsarSetSecret(
  858. IN LSAPR_HANDLE SecretHandle,
  859. IN PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue,
  860. IN PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
  861. )
  862. {
  863. NTSTATUS Status;
  864. if (!SrvDllsLoaded)
  865. {
  866. Status = EnsureSrvDllsLoaded();
  867. if (!NT_SUCCESS(Status)) {
  868. return(Status);
  869. }
  870. }
  871. return((*pI_LsarSetSecret)(
  872. SecretHandle,
  873. EncryptedCurrentValue,
  874. EncryptedOldValue
  875. ));
  876. }
  877. NTSTATUS
  878. I_LsarQuerySecret(
  879. IN LSAPR_HANDLE SecretHandle,
  880. IN OUT OPTIONAL PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue,
  881. IN OUT OPTIONAL PLARGE_INTEGER CurrentValueSetTime,
  882. IN OUT OPTIONAL PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue,
  883. IN OUT OPTIONAL PLARGE_INTEGER OldValueSetTime
  884. )
  885. {
  886. NTSTATUS Status;
  887. if (!SrvDllsLoaded)
  888. {
  889. Status = EnsureSrvDllsLoaded();
  890. if (!NT_SUCCESS(Status)) {
  891. return(Status);
  892. }
  893. }
  894. return((*pI_LsarQuerySecret)(
  895. SecretHandle,
  896. EncryptedCurrentValue,
  897. CurrentValueSetTime,
  898. EncryptedOldValue,
  899. OldValueSetTime));
  900. }
  901. NTSTATUS
  902. I_LsarDelete(
  903. IN LSAPR_HANDLE ObjectHandle
  904. )
  905. {
  906. NTSTATUS Status;
  907. if (!SrvDllsLoaded)
  908. {
  909. Status = EnsureSrvDllsLoaded();
  910. if (!NT_SUCCESS(Status)) {
  911. return(Status);
  912. }
  913. }
  914. return((*pI_LsarDelete)( ObjectHandle ));
  915. }
  916. VOID
  917. I_LsaIFree_LSAPR_CR_CIPHER_VALUE (
  918. IN PLSAPR_CR_CIPHER_VALUE CipherValue
  919. )
  920. {
  921. NTSTATUS Status;
  922. if (!SrvDllsLoaded)
  923. {
  924. Status = EnsureSrvDllsLoaded();
  925. if (!NT_SUCCESS(Status)) {
  926. return;
  927. }
  928. }
  929. (*pI_LsaIFree_LSAPR_CR_CIPHER_VALUE)(
  930. CipherValue
  931. );
  932. }
  933. NTSTATUS NTAPI
  934. I_LsaIRegisterPolicyChangeNotificationCallback(
  935. IN pfLsaPolicyChangeNotificationCallback Callback,
  936. IN POLICY_NOTIFICATION_INFORMATION_CLASS MonitorInfoClass
  937. )
  938. {
  939. NTSTATUS Status;
  940. if (!SrvDllsLoaded)
  941. {
  942. Status = EnsureSrvDllsLoaded();
  943. if (!NT_SUCCESS(Status)) {
  944. return(Status);
  945. }
  946. }
  947. return((*pI_LsaIRegisterPolicyChangeNotificationCallback)(
  948. Callback,
  949. MonitorInfoClass
  950. ));
  951. }
  952. NTSTATUS NTAPI
  953. I_LsaIUnregisterPolicyChangeNotificationCallback(
  954. IN pfLsaPolicyChangeNotificationCallback Callback,
  955. IN POLICY_NOTIFICATION_INFORMATION_CLASS MonitorInfoClass
  956. )
  957. {
  958. NTSTATUS Status;
  959. if (!SrvDllsLoaded)
  960. {
  961. Status = EnsureSrvDllsLoaded();
  962. if (!NT_SUCCESS(Status)) {
  963. return(Status);
  964. }
  965. }
  966. return((*pI_LsaIUnregisterPolicyChangeNotificationCallback)(
  967. Callback,
  968. MonitorInfoClass
  969. ));
  970. }
  971. NTSTATUS
  972. I_LsaIAuditAccountLogonEx(
  973. IN ULONG AuditId,
  974. IN BOOLEAN Successful,
  975. IN PUNICODE_STRING Source,
  976. IN PUNICODE_STRING ClientName,
  977. IN PUNICODE_STRING MappedName,
  978. IN NTSTATUS LogonStatus, OPTIONAL
  979. IN PSID ClientSid
  980. )
  981. {
  982. NTSTATUS NtStatus;
  983. if (!SrvDllsLoaded)
  984. {
  985. NtStatus = EnsureSrvDllsLoaded();
  986. if (!NT_SUCCESS(NtStatus)) {
  987. return(NtStatus);
  988. }
  989. }
  990. return((*pI_LsaIAuditAccountLogonEx)(
  991. AuditId,
  992. Successful,
  993. Source,
  994. ClientName,
  995. MappedName,
  996. LogonStatus,
  997. ClientSid
  998. ));
  999. }
  1000. NTSTATUS
  1001. I_LsaIGetLogonGuid(
  1002. IN PUNICODE_STRING pUserName,
  1003. IN PUNICODE_STRING pUserDomain,
  1004. IN PBYTE pBuffer,
  1005. IN UINT BufferSize,
  1006. OUT LPGUID pLogonGuid
  1007. )
  1008. {
  1009. NTSTATUS NtStatus;
  1010. if (!SrvDllsLoaded)
  1011. {
  1012. NtStatus = EnsureSrvDllsLoaded();
  1013. if (!NT_SUCCESS(NtStatus)) {
  1014. return(NtStatus);
  1015. }
  1016. }
  1017. return (*pI_LsaIGetLogonGuid)(
  1018. pUserName,
  1019. pUserDomain,
  1020. pBuffer,
  1021. BufferSize,
  1022. pLogonGuid
  1023. );
  1024. }
  1025. NTSTATUS
  1026. I_LsaISetLogonGuidInLogonSession(
  1027. IN PLUID pLogonId,
  1028. IN LPGUID pLogonGuid
  1029. )
  1030. {
  1031. NTSTATUS NtStatus;
  1032. if (!SrvDllsLoaded)
  1033. {
  1034. NtStatus = EnsureSrvDllsLoaded();
  1035. if (!NT_SUCCESS(NtStatus)) {
  1036. return(NtStatus);
  1037. }
  1038. }
  1039. return (*pI_LsaISetLogonGuidInLogonSession)(
  1040. pLogonId,
  1041. pLogonGuid
  1042. );
  1043. }
  1044. VOID
  1045. I_LsaIAuditKerberosLogon(
  1046. IN NTSTATUS LogonStatus,
  1047. IN NTSTATUS LogonSubStatus,
  1048. IN PUNICODE_STRING AccountName,
  1049. IN PUNICODE_STRING AuthenticatingAuthority,
  1050. IN PUNICODE_STRING WorkstationName,
  1051. IN PSID UserSid, OPTIONAL
  1052. IN SECURITY_LOGON_TYPE LogonType,
  1053. IN PTOKEN_SOURCE TokenSource,
  1054. IN PLUID pLogonId,
  1055. IN LPGUID pLogonGuid,
  1056. IN PLSA_ADT_STRING_LIST TransittedServices
  1057. )
  1058. {
  1059. NTSTATUS NtStatus;
  1060. if (!SrvDllsLoaded)
  1061. {
  1062. NtStatus = EnsureSrvDllsLoaded();
  1063. if (!NT_SUCCESS(NtStatus)) {
  1064. return;
  1065. }
  1066. }
  1067. (*pI_LsaIAuditKerberosLogon)(
  1068. LogonStatus,
  1069. LogonSubStatus,
  1070. AccountName,
  1071. AuthenticatingAuthority,
  1072. WorkstationName,
  1073. UserSid,
  1074. LogonType,
  1075. TokenSource,
  1076. pLogonId,
  1077. pLogonGuid,
  1078. TransittedServices
  1079. );
  1080. }
  1081. NTSTATUS
  1082. I_LsaIAuditLogonUsingExplicitCreds(
  1083. IN USHORT AuditEventType,
  1084. IN PLUID pUser1LogonId,
  1085. IN LPGUID pUser1LogonGuid,
  1086. IN HANDLE User1ProcessId,
  1087. IN PUNICODE_STRING pUser2Name,
  1088. IN PUNICODE_STRING pUser2Domain,
  1089. IN LPGUID pUser2LogonGuid,
  1090. IN PUNICODE_STRING pTargetName,
  1091. IN PUNICODE_STRING pTargetInfo
  1092. )
  1093. {
  1094. NTSTATUS NtStatus;
  1095. if (!SrvDllsLoaded)
  1096. {
  1097. NtStatus = EnsureSrvDllsLoaded();
  1098. if (!NT_SUCCESS(NtStatus)) {
  1099. return NtStatus;
  1100. }
  1101. }
  1102. return (*pI_LsaIAuditLogonUsingExplicitCreds)(
  1103. AuditEventType,
  1104. pUser1LogonId,
  1105. pUser1LogonGuid,
  1106. User1ProcessId,
  1107. pUser2Name,
  1108. pUser2Domain,
  1109. pUser2LogonGuid,
  1110. pTargetName,
  1111. pTargetInfo
  1112. );
  1113. }
  1114. NTSTATUS
  1115. I_LsaICallPackage(
  1116. IN PUNICODE_STRING AuthenticationPackage,
  1117. IN PVOID ProtocolSubmitBuffer,
  1118. IN ULONG SubmitBufferLength,
  1119. OUT PVOID *ProtocolReturnBuffer,
  1120. OUT PULONG ReturnBufferLength,
  1121. OUT PNTSTATUS ProtocolStatus
  1122. )
  1123. {
  1124. NTSTATUS NtStatus;
  1125. if (!SrvDllsLoaded)
  1126. {
  1127. NtStatus = EnsureSrvDllsLoaded();
  1128. if (!NT_SUCCESS(NtStatus)) {
  1129. return(NtStatus);
  1130. }
  1131. }
  1132. return((*pI_LsaICallPackage)(
  1133. AuthenticationPackage,
  1134. ProtocolSubmitBuffer,
  1135. SubmitBufferLength,
  1136. ProtocolReturnBuffer,
  1137. ReturnBufferLength,
  1138. ProtocolStatus
  1139. ));
  1140. }
  1141. NTSTATUS
  1142. I_LsaIAddNameToLogonSession(
  1143. IN PLUID LogonId,
  1144. IN ULONG NameFormat,
  1145. IN PUNICODE_STRING Name
  1146. )
  1147. {
  1148. NTSTATUS NtStatus;
  1149. if (!SrvDllsLoaded)
  1150. {
  1151. NtStatus = EnsureSrvDllsLoaded();
  1152. if (!NT_SUCCESS(NtStatus)) {
  1153. return(NtStatus);
  1154. }
  1155. }
  1156. return((*pI_LsaIAddNameToLogonSession)(
  1157. LogonId,
  1158. NameFormat,
  1159. Name));
  1160. }
  1161. NTSTATUS
  1162. I_LsaIGetNameFromLuid(
  1163. IN PLUID LogonId,
  1164. IN ULONG NameFormat,
  1165. IN BOOLEAN LocalOnly,
  1166. OUT PUNICODE_STRING Name
  1167. )
  1168. {
  1169. NTSTATUS NtStatus;
  1170. if (!SrvDllsLoaded)
  1171. {
  1172. NtStatus = EnsureSrvDllsLoaded();
  1173. if (!NT_SUCCESS(NtStatus)) {
  1174. return(NtStatus);
  1175. }
  1176. }
  1177. return((*pI_LsaIGetNameFromLuid)(
  1178. LogonId,
  1179. NameFormat,
  1180. LocalOnly,
  1181. Name));
  1182. }
  1183. NTSTATUS
  1184. I_LsaISetPackageAttrInLogonSession(
  1185. IN PLUID LogonId,
  1186. IN ULONG PackageAttr
  1187. )
  1188. {
  1189. NTSTATUS NtStatus;
  1190. if (!SrvDllsLoaded)
  1191. {
  1192. NtStatus = EnsureSrvDllsLoaded();
  1193. if (!NT_SUCCESS(NtStatus)) {
  1194. return(NtStatus);
  1195. }
  1196. }
  1197. return((*pI_LsaISetPackageAttrInLogonSession)(
  1198. LogonId,
  1199. PackageAttr));
  1200. }
  1201. NTSTATUS
  1202. I_LsaIAdtAuditingEnabledByCategory(
  1203. IN POLICY_AUDIT_EVENT_TYPE Category,
  1204. IN USHORT AuditEventType,
  1205. IN PSID pUserSid,
  1206. IN PLUID pLogonId,
  1207. OUT PBOOLEAN pbAudit
  1208. )
  1209. {
  1210. NTSTATUS NtStatus;
  1211. if (!SrvDllsLoaded)
  1212. {
  1213. NtStatus = EnsureSrvDllsLoaded();
  1214. if (!NT_SUCCESS(NtStatus)) {
  1215. return(NtStatus);
  1216. }
  1217. }
  1218. return((*pI_LsaIAdtAuditingEnabledByCategory)(
  1219. Category,
  1220. AuditEventType,
  1221. pUserSid,
  1222. pLogonId,
  1223. pbAudit));
  1224. }