ReactOS  0.4.12-dev-916-gffc4e30
security.c File Reference
#include "precomp.h"
#include <ntlsa.h>
#include <ntsecapi.h>
#include <ntsam.h>
#include <sddl.h>
#include <debug.h>
Include dependency graph for security.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

NTSTATUS WINAPI SetAccountsDomainSid (PSID DomainSid, LPCWSTR DomainName)
 
static NTSTATUS SetPrimaryDomain (LPCWSTR DomainName, PSID DomainSid)
 
static VOID InstallBuiltinAccounts (VOID)
 
static VOID InstallPrivileges (HINF hSecurityInf)
 
static VOID ApplyRegistryValues (HINF hSecurityInf)
 
VOID InstallSecurity (VOID)
 
NTSTATUS SetAdministratorPassword (LPCWSTR Password)
 
VOID SetAutoAdminLogon (VOID)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 18 of file security.c.

Function Documentation

◆ ApplyRegistryValues()

static VOID ApplyRegistryValues ( HINF  hSecurityInf)
static

Definition at line 392 of file security.c.

394 {
395  WCHAR szRegistryPath[MAX_PATH];
396  WCHAR szRootName[MAX_PATH];
397  WCHAR szKeyName[MAX_PATH];
398  WCHAR szValueName[MAX_PATH];
399  INFCONTEXT InfContext;
400  DWORD dwLength, dwType;
401  HKEY hRootKey, hKey;
402  PWSTR Ptr1, Ptr2;
403  DWORD dwError;
404  PVOID pBuffer;
405 
406  DPRINT("ApplyRegistryValues()\n");
407 
408  if (!SetupFindFirstLineW(hSecurityInf,
409  L"Registry Values",
410  NULL,
411  &InfContext))
412  {
413  DPRINT1("SetupFindFirstLineW failed\n");
414  return;
415  }
416 
417  do
418  {
419  /* Retrieve the privilege name */
420  if (!SetupGetStringFieldW(&InfContext,
421  0,
422  szRegistryPath,
423  ARRAYSIZE(szRegistryPath),
424  NULL))
425  {
426  DPRINT1("SetupGetStringFieldW() failed\n");
427  return;
428  }
429 
430  DPRINT("RegistryPath: %S\n", szRegistryPath);
431 
432  Ptr1 = wcschr(szRegistryPath, L'\\');
433  Ptr2 = wcsrchr(szRegistryPath, L'\\');
434  if (Ptr1 != NULL && Ptr2 != NULL && Ptr1 != Ptr2)
435  {
436  dwLength = (DWORD)(((ULONG_PTR)Ptr1 - (ULONG_PTR)szRegistryPath) / sizeof(WCHAR));
437  wcsncpy(szRootName, szRegistryPath, dwLength);
438  szRootName[dwLength] = UNICODE_NULL;
439 
440  Ptr1++;
441  dwLength = (DWORD)(((ULONG_PTR)Ptr2 - (ULONG_PTR)Ptr1) / sizeof(WCHAR));
442  wcsncpy(szKeyName, Ptr1, dwLength);
443  szKeyName[dwLength] = UNICODE_NULL;
444 
445  Ptr2++;
446  wcscpy(szValueName, Ptr2);
447 
448  DPRINT("RootName: %S\n", szRootName);
449  DPRINT("KeyName: %S\n", szKeyName);
450  DPRINT("ValueName: %S\n", szValueName);
451 
452  if (_wcsicmp(szRootName, L"Machine") == 0)
453  {
454  hRootKey = HKEY_LOCAL_MACHINE;
455  }
456  else
457  {
458  DPRINT1("Unsupported root key %S\n", szRootName);
459  break;
460  }
461 
462  if (!SetupGetIntField(&InfContext,
463  1,
464  (PINT)&dwType))
465  {
466  DPRINT1("Failed to get key type (Error %lu)\n", GetLastError());
467  break;
468  }
469 
470  if (dwType != REG_SZ && dwType != REG_EXPAND_SZ && dwType != REG_BINARY &&
471  dwType != REG_DWORD && dwType != REG_MULTI_SZ)
472  {
473  DPRINT1("Invalid value type %lu\n", dwType);
474  break;
475  }
476 
477  dwLength = 0;
478  switch (dwType)
479  {
480  case REG_SZ:
481  case REG_EXPAND_SZ:
482  SetupGetStringField(&InfContext,
483  2,
484  NULL,
485  0,
486  &dwLength);
487  dwLength *= sizeof(WCHAR);
488  break;
489 
490  case REG_BINARY:
491  SetupGetBinaryField(&InfContext,
492  2,
493  NULL,
494  0,
495  &dwLength);
496  break;
497 
498  case REG_DWORD:
499  dwLength = sizeof(INT);
500  break;
501 
502  case REG_MULTI_SZ:
503  SetupGetMultiSzField(&InfContext,
504  2,
505  NULL,
506  0,
507  &dwLength);
508  dwLength *= sizeof(WCHAR);
509  break;
510  }
511 
512  if (dwLength == 0)
513  {
514  DPRINT1("Failed to determine the required buffer size!\n");
515  break;
516  }
517 
518  dwError = RegCreateKeyExW(hRootKey,
519  szKeyName,
520  0,
521  NULL,
523  KEY_WRITE,
524  NULL,
525  &hKey,
526  NULL);
527  if (dwError != ERROR_SUCCESS)
528  {
529  DPRINT1("Failed to create the key %S (Error %lu)\n", szKeyName, dwError);
530  break;
531  }
532 
534  if (pBuffer)
535  {
536  switch (dwType)
537  {
538  case REG_SZ:
539  case REG_EXPAND_SZ:
540  SetupGetStringField(&InfContext,
541  2,
542  pBuffer,
543  dwLength / sizeof(WCHAR),
544  &dwLength);
545  dwLength *= sizeof(WCHAR);
546  break;
547 
548  case REG_BINARY:
549  SetupGetBinaryField(&InfContext,
550  2,
551  pBuffer,
552  dwLength,
553  &dwLength);
554  break;
555 
556  case REG_DWORD:
557  SetupGetIntField(&InfContext,
558  2,
559  pBuffer);
560  break;
561 
562  case REG_MULTI_SZ:
563  SetupGetMultiSzField(&InfContext,
564  2,
565  pBuffer,
566  dwLength / sizeof(WCHAR),
567  &dwLength);
568  dwLength *= sizeof(WCHAR);
569  break;
570  }
571 
572  RegSetValueEx(hKey,
573  szValueName,
574  0,
575  dwType,
576  pBuffer,
577  dwLength);
578 
580  }
581 
582  RegCloseKey(hKey);
583  }
584  }
585  while (SetupFindNextLine(&InfContext, &InfContext));
586 }
static DWORD
Definition: security.c:70
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
Definition: infsupp.c:54
#define ERROR_SUCCESS
Definition: deptool.c:10
#define REG_BINARY
Definition: nt_native.h:1496
uint16_t * PWSTR
Definition: typedefs.h:54
#define SetupGetMultiSzField
Definition: setupapi.h:2629
#define INT
Definition: polytest.cpp:20
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1094
uint32_t ULONG_PTR
Definition: typedefs.h:63
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define UNICODE_NULL
BOOL WINAPI SetupGetBinaryField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PUCHAR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
Definition: infsupp.c:126
#define REG_MULTI_SZ
Definition: nt_native.h:1501
smooth NULL
Definition: ftsmooth.c:416
PVOID pBuffer
void DPRINT(...)
Definition: polytest.cpp:61
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
int * PINT
Definition: windef.h:177
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD DWORD * dwLength
Definition: fusion.c:83
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetupGetStringField
Definition: setupapi.h:2633
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
Definition: infsupp.c:80
#define DPRINT1
Definition: precomp.h:8
BOOL WINAPI SetupGetIntField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT INT *IntegerValue)
Definition: infsupp.c:146
#define REG_DWORD
Definition: sdbapi.c:596
#define HeapFree(x, y, z)
Definition: compat.h:394
#define RegSetValueEx
Definition: winreg.h:533
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define REG_SZ
Definition: layer.c:22
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
Definition: infsupp.c:184

Referenced by InstallSecurity().

◆ InstallBuiltinAccounts()

static VOID InstallBuiltinAccounts ( VOID  )
static

Definition at line 214 of file security.c.

215 {
216  LPWSTR BuiltinAccounts[] = {
217  L"S-1-1-0", /* Everyone */
218  L"S-1-5-4", /* Interactive */
219  L"S-1-5-6", /* Service */
220  L"S-1-5-19", /* Local Service */
221  L"S-1-5-20", /* Network Service */
222  L"S-1-5-32-544", /* Administrators */
223  L"S-1-5-32-545", /* Users */
224  L"S-1-5-32-547", /* Power Users */
225  L"S-1-5-32-551", /* Backup Operators */
226  L"S-1-5-32-555"}; /* Remote Desktop Users */
229  LSA_HANDLE PolicyHandle = NULL;
230  LSA_HANDLE AccountHandle = NULL;
231  PSID AccountSid;
232  ULONG i;
233 
234  DPRINT("InstallBuiltinAccounts()\n");
235 
237 
241  &PolicyHandle);
242  if (!NT_SUCCESS(Status))
243  {
244  DPRINT1("LsaOpenPolicy failed (Status %08lx)\n", Status);
245  return;
246  }
247 
248  for (i = 0; i < ARRAYSIZE(BuiltinAccounts); i++)
249  {
250  if (!ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid))
251  {
252  DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", BuiltinAccounts[i], GetLastError());
253  continue;
254  }
255 
256  Status = LsaCreateAccount(PolicyHandle,
257  AccountSid,
258  0,
259  &AccountHandle);
260  if (NT_SUCCESS(Status))
261  {
262  LsaClose(AccountHandle);
263  }
264 
265  LocalFree(AccountSid);
266  }
267 
268  LsaClose(PolicyHandle);
269 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define ConvertStringSidToSid
Definition: sddl.h:161
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS WINAPI LsaCreateAccount(IN LSA_HANDLE PolicyHandle, IN PSID AccountSid, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE AccountHandle)
Definition: lsa.c:217
static const WCHAR L[]
Definition: oid.c:1250
Status
Definition: gdiplustypes.h:24
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define DPRINT1
Definition: precomp.h:8
unsigned int ULONG
Definition: retypes.h:1
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define POLICY_CREATE_ACCOUNT
Definition: ntsecapi.h:65
#define memset(x, y, z)
Definition: compat.h:39

Referenced by InstallSecurity().

◆ InstallPrivileges()

static VOID InstallPrivileges ( HINF  hSecurityInf)
static

Definition at line 274 of file security.c.

276 {
278  WCHAR szPrivilegeString[256];
279  WCHAR szSidString[256];
280  INFCONTEXT InfContext;
281  DWORD i;
282  PSID AccountSid = NULL;
284  LSA_HANDLE PolicyHandle = NULL;
285  LSA_UNICODE_STRING RightString;
286  PLSA_TRANSLATED_SID2 Sids = NULL;
287 
288  DPRINT("InstallPrivileges()\n");
289 
291 
295  &PolicyHandle);
296  if (!NT_SUCCESS(Status))
297  {
298  DPRINT1("LsaOpenPolicy failed (Status %08lx)\n", Status);
299  goto done;
300  }
301 
302  if (!SetupFindFirstLineW(hSecurityInf,
303  L"Privilege Rights",
304  NULL,
305  &InfContext))
306  {
307  DPRINT1("SetupFindFirstLineW failed\n");
308  goto done;
309  }
310 
311  do
312  {
313  /* Retrieve the privilege name */
314  if (!SetupGetStringFieldW(&InfContext,
315  0,
316  szPrivilegeString,
317  ARRAYSIZE(szPrivilegeString),
318  NULL))
319  {
320  DPRINT1("SetupGetStringFieldW() failed\n");
321  goto done;
322  }
323  DPRINT("Privilege: %S\n", szPrivilegeString);
324 
325  for (i = 0; i < SetupGetFieldCount(&InfContext); i++)
326  {
327  if (!SetupGetStringFieldW(&InfContext,
328  i + 1,
329  szSidString,
330  ARRAYSIZE(szSidString),
331  NULL))
332  {
333  DPRINT1("SetupGetStringFieldW() failed\n");
334  goto done;
335  }
336  DPRINT("SID: %S\n", szSidString);
337 
338  if (szSidString[0] == UNICODE_NULL)
339  continue;
340 
341  if (szSidString[0] == L'*')
342  {
343  DPRINT("Account Sid: %S\n", &szSidString[1]);
344 
345  if (!ConvertStringSidToSid(&szSidString[1], &AccountSid))
346  {
347  DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", szSidString, GetLastError());
348  continue;
349  }
350  }
351  else
352  {
353  DPRINT("Account name: %S\n", szSidString);
354  continue;
355 
356  }
357 
358  RtlInitUnicodeString(&RightString, szPrivilegeString);
359  Status = LsaAddAccountRights(PolicyHandle,
360  (AccountSid != NULL) ? AccountSid : Sids[0].Sid,
361  &RightString,
362  1);
363  if (!NT_SUCCESS(Status))
364  {
365  DPRINT1("LsaAddAccountRights() failed (Status %08lx)\n", Status);
366  }
367 
368  if (Sids != NULL)
369  {
370  LsaFreeMemory(Sids);
371  Sids = NULL;
372  }
373 
374  if (AccountSid != NULL)
375  {
376  LocalFree(AccountSid);
377  AccountSid = NULL;
378  }
379  }
380 
381  }
382  while (SetupFindNextLine(&InfContext, &InfContext));
383 
384 done:
385  if (PolicyHandle != NULL)
386  LsaClose(PolicyHandle);
387 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
Definition: infsupp.c:54
#define ConvertStringSidToSid
Definition: sddl.h:161
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define UNICODE_NULL
smooth NULL
Definition: ftsmooth.c:416
_In_ ULONG _In_ ACCESS_MASK _In_ PSID Sid
Definition: rtlfuncs.h:1104
void DPRINT(...)
Definition: polytest.cpp:61
NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
Definition: lsa.c:699
#define POLICY_LOOKUP_NAMES
Definition: ntsecapi.h:72
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
Definition: infsupp.c:91
static const WCHAR L[]
Definition: oid.c:1250
Status
Definition: gdiplustypes.h:24
NTSTATUS WINAPI LsaAddAccountRights(IN LSA_HANDLE PolicyHandle, IN PSID AccountSid, IN PLSA_UNICODE_STRING UserRights, IN ULONG CountOfRights)
Definition: lsa.c:103
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
Definition: infsupp.c:80
#define DPRINT1
Definition: precomp.h:8
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define POLICY_CREATE_ACCOUNT
Definition: ntsecapi.h:65
#define memset(x, y, z)
Definition: compat.h:39
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
Definition: infsupp.c:184

Referenced by InstallSecurity().

◆ InstallSecurity()

VOID InstallSecurity ( VOID  )

Definition at line 590 of file security.c.

591 {
592  HINF hSecurityInf;
593  PWSTR pszSecurityInf;
594 
595 // if (IsServer())
596 // pszSecurityInf = L"defltsv.inf";
597 // else
598  pszSecurityInf = L"defltws.inf";
599 
601 
602  hSecurityInf = SetupOpenInfFileW(pszSecurityInf,
603  NULL,
605  NULL);
606  if (hSecurityInf != INVALID_HANDLE_VALUE)
607  {
608  InstallPrivileges(hSecurityInf);
609  ApplyRegistryValues(hSecurityInf);
610 
611  SetupCloseInfFile(hSecurityInf);
612  }
613 
614  /* Hack */
615  SetPrimaryDomain(L"WORKGROUP", NULL);
616 }
static VOID InstallPrivileges(HINF hSecurityInf)
Definition: security.c:274
#define INF_STYLE_WIN4
Definition: infsupp.h:41
uint16_t * PWSTR
Definition: typedefs.h:54
static VOID InstallBuiltinAccounts(VOID)
Definition: security.c:214
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
Definition: parser.c:1229
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
Definition: infsupp.c:43
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR L[]
Definition: oid.c:1250
static VOID ApplyRegistryValues(HINF hSecurityInf)
Definition: security.c:392
static NTSTATUS SetPrimaryDomain(LPCWSTR DomainName, PSID DomainSid)
Definition: security.c:140

Referenced by InstallReactOS().

◆ SetAccountsDomainSid()

NTSTATUS WINAPI SetAccountsDomainSid ( PSID  DomainSid,
LPCWSTR  DomainName 
)

Definition at line 25 of file security.c.

28 {
32  LSA_HANDLE PolicyHandle;
33 
34  SAM_HANDLE ServerHandle = NULL;
35  SAM_HANDLE DomainHandle = NULL;
36  DOMAIN_NAME_INFORMATION DomainNameInfo;
37 
39 
40  DPRINT("SYSSETUP: SetAccountsDomainSid\n");
41 
44 
48  &PolicyHandle);
49  if (Status != STATUS_SUCCESS)
50  {
51  DPRINT("LsaOpenPolicy failed (Status: 0x%08lx)\n", Status);
52  return Status;
53  }
54 
55  Status = LsaQueryInformationPolicy(PolicyHandle,
57  (PVOID *)&OrigInfo);
58  if (Status == STATUS_SUCCESS && OrigInfo != NULL)
59  {
60  if (DomainName == NULL)
61  {
62  Info.DomainName.Buffer = OrigInfo->DomainName.Buffer;
63  Info.DomainName.Length = OrigInfo->DomainName.Length;
64  Info.DomainName.MaximumLength = OrigInfo->DomainName.MaximumLength;
65  }
66  else
67  {
68  Info.DomainName.Buffer = (LPWSTR)DomainName;
69  Info.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
70  Info.DomainName.MaximumLength = Info.DomainName.Length + sizeof(WCHAR);
71  }
72 
73  if (DomainSid == NULL)
74  Info.DomainSid = OrigInfo->DomainSid;
75  else
76  Info.DomainSid = DomainSid;
77  }
78  else
79  {
80  Info.DomainName.Buffer = (LPWSTR)DomainName;
81  Info.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
82  Info.DomainName.MaximumLength = Info.DomainName.Length + sizeof(WCHAR);
83  Info.DomainSid = DomainSid;
84  }
85 
86  Status = LsaSetInformationPolicy(PolicyHandle,
88  (PVOID)&Info);
89  if (Status != STATUS_SUCCESS)
90  {
91  DPRINT("LsaSetInformationPolicy failed (Status: 0x%08lx)\n", Status);
92  }
93 
94  if (OrigInfo != NULL)
95  LsaFreeMemory(OrigInfo);
96 
97  LsaClose(PolicyHandle);
98 
99  DomainNameInfo.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
100  DomainNameInfo.DomainName.MaximumLength = (wcslen(DomainName) + 1) * sizeof(WCHAR);
101  DomainNameInfo.DomainName.Buffer = (LPWSTR)DomainName;
102 
104  &ServerHandle,
106  NULL);
107  if (NT_SUCCESS(Status))
108  {
109  Status = SamOpenDomain(ServerHandle,
111  Info.DomainSid,
112  &DomainHandle);
113  if (NT_SUCCESS(Status))
114  {
115  Status = SamSetInformationDomain(DomainHandle,
117  (PVOID)&DomainNameInfo);
118  if (!NT_SUCCESS(Status))
119  {
120  DPRINT1("SamSetInformationDomain failed (Status: 0x%08lx)\n", Status);
121  }
122 
123  SamCloseHandle(DomainHandle);
124  }
125  else
126  {
127  DPRINT1("SamOpenDomain failed (Status: 0x%08lx)\n", Status);
128  }
129 
130  SamCloseHandle(ServerHandle);
131  }
132 
133  return Status;
134 }
NTSTATUS NTAPI SamCloseHandle(IN SAM_HANDLE SamHandle)
Definition: samlib.c:476
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define SAM_SERVER_CONNECT
Definition: ntsam.h:99
NTSTATUS WINAPI LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer)
Definition: lsa.c:1471
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define POLICY_VIEW_LOCAL_INFORMATION
Definition: ntsecapi.h:61
NTSTATUS NTAPI SamOpenDomain(IN SAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN PSID DomainId, OUT PSAM_HANDLE DomainHandle)
Definition: samlib.c:1441
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
NTSTATUS WINAPI LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, IN PVOID Buffer)
Definition: lsa.c:1946
struct TraceInfo Info
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
smooth NULL
Definition: ftsmooth.c:416
#define SAM_SERVER_LOOKUP_DOMAIN
Definition: ntsam.h:104
void DPRINT(...)
Definition: polytest.cpp:61
NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
Definition: lsa.c:699
UNICODE_STRING DomainName
Definition: ntsam.h:381
NTSTATUS NTAPI SamSetInformationDomain(IN SAM_HANDLE DomainHandle, IN DOMAIN_INFORMATION_CLASS DomainInformationClass, IN PVOID Buffer)
Definition: samlib.c:1910
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define POLICY_TRUST_ADMIN
Definition: ntsecapi.h:64
#define DOMAIN_WRITE_OTHER_PARAMETERS
Definition: ntsam.h:36
struct _LSA_OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
Status
Definition: gdiplustypes.h:24
USHORT MaximumLength
Definition: ntsecapi.h:164
LSA_UNICODE_STRING DomainName
Definition: ntsecapi.h:563
#define DPRINT1
Definition: precomp.h:8
WCHAR * LPWSTR
Definition: xmlstorage.h:184
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define memset(x, y, z)
Definition: compat.h:39
NTSTATUS NTAPI SamConnect(IN OUT PUNICODE_STRING ServerName OPTIONAL, OUT PSAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: samlib.c:498
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

Referenced by WriteComputerSettings().

◆ SetAdministratorPassword()

NTSTATUS SetAdministratorPassword ( LPCWSTR  Password)

Definition at line 620 of file security.c.

621 {
623  PUSER_ACCOUNT_NAME_INFORMATION AccountNameInfo = NULL;
624  USER_SET_PASSWORD_INFORMATION PasswordInfo;
626  LSA_HANDLE PolicyHandle = NULL;
627  SAM_HANDLE ServerHandle = NULL;
628  SAM_HANDLE DomainHandle = NULL;
629  SAM_HANDLE UserHandle = NULL;
631 
632  DPRINT("SYSSETUP: SetAdministratorPassword(%p)\n", Password);
633 
636 
640  &PolicyHandle);
641  if (Status != STATUS_SUCCESS)
642  {
643  DPRINT1("LsaOpenPolicy() failed (Status: 0x%08lx)\n", Status);
644  return Status;
645  }
646 
647  Status = LsaQueryInformationPolicy(PolicyHandle,
649  (PVOID *)&OrigInfo);
650  if (!NT_SUCCESS(Status))
651  {
652  DPRINT1("LsaQueryInformationPolicy() failed (Status: 0x%08lx)\n", Status);
653  goto done;
654  }
655 
657  &ServerHandle,
659  NULL);
660  if (!NT_SUCCESS(Status))
661  {
662  DPRINT1("SamConnect() failed (Status: 0x%08lx)\n", Status);
663  goto done;
664  }
665 
666  Status = SamOpenDomain(ServerHandle,
668  OrigInfo->DomainSid,
669  &DomainHandle);
670  if (!NT_SUCCESS(Status))
671  {
672  DPRINT1("SamOpenDomain() failed (Status: 0x%08lx)\n", Status);
673  goto done;
674  }
675 
676  Status = SamOpenUser(DomainHandle,
679  &UserHandle);
680  if (!NT_SUCCESS(Status))
681  {
682  DPRINT1("SamOpenUser() failed (Status %08lx)\n", Status);
683  goto done;
684  }
685 
686  RtlInitUnicodeString(&PasswordInfo.Password, Password);
687  PasswordInfo.PasswordExpired = FALSE;
688 
689  Status = SamSetInformationUser(UserHandle,
691  (PVOID)&PasswordInfo);
692  if (!NT_SUCCESS(Status))
693  {
694  DPRINT1("SamSetInformationUser() failed (Status %08lx)\n", Status);
695  goto done;
696  }
697 
698  Status = SamQueryInformationUser(UserHandle,
700  (PVOID*)&AccountNameInfo);
701  if (!NT_SUCCESS(Status))
702  {
703  DPRINT1("SamSetInformationUser() failed (Status %08lx)\n", Status);
704  goto done;
705  }
706 
707  AdminInfo.Name = RtlAllocateHeap(RtlGetProcessHeap(),
709  AccountNameInfo->UserName.Length + sizeof(WCHAR));
710  if (AdminInfo.Name != NULL)
712  AccountNameInfo->UserName.Buffer,
713  AccountNameInfo->UserName.Length);
714 
715  AdminInfo.Domain = RtlAllocateHeap(RtlGetProcessHeap(),
717  OrigInfo->DomainName.Length + sizeof(WCHAR));
718  if (AdminInfo.Domain != NULL)
720  OrigInfo->DomainName.Buffer,
721  OrigInfo->DomainName.Length);
722 
723  AdminInfo.Password = RtlAllocateHeap(RtlGetProcessHeap(),
724  0,
725  (wcslen(Password) + 1) * sizeof(WCHAR));
726  if (AdminInfo.Password != NULL)
728 
729  DPRINT("Administrator Name: %S\n", AdminInfo.Name);
730  DPRINT("Administrator Domain: %S\n", AdminInfo.Domain);
731  DPRINT("Administrator Password: %S\n", AdminInfo.Password);
732 
733 done:
734  if (AccountNameInfo != NULL)
735  SamFreeMemory(AccountNameInfo);
736 
737  if (OrigInfo != NULL)
738  LsaFreeMemory(OrigInfo);
739 
740  if (PolicyHandle != NULL)
741  LsaClose(PolicyHandle);
742 
743  if (UserHandle != NULL)
744  SamCloseHandle(UserHandle);
745 
746  if (DomainHandle != NULL)
747  SamCloseHandle(DomainHandle);
748 
749  if (ServerHandle != NULL)
750  SamCloseHandle(ServerHandle);
751 
752  DPRINT1("SYSSETUP: SetAdministratorPassword() done (Status %08lx)\n", Status);
753 
754  return Status;
755 }
NTSTATUS NTAPI SamCloseHandle(IN SAM_HANDLE SamHandle)
Definition: samlib.c:476
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define SAM_SERVER_CONNECT
Definition: ntsam.h:99
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
NTSTATUS WINAPI LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer)
Definition: lsa.c:1471
#define POLICY_VIEW_LOCAL_INFORMATION
Definition: ntsecapi.h:61
ADMIN_INFO AdminInfo
Definition: install.c:38
NTSTATUS NTAPI SamOpenDomain(IN SAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN PSID DomainId, OUT PSAM_HANDLE DomainHandle)
Definition: samlib.c:1441
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
LPWSTR Name
Definition: globals.h:23
UNICODE_STRING UserName
Definition: ntsam.h:595
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
#define USER_READ_GENERAL
Definition: ntsam.h:126
#define DOMAIN_USER_RID_ADMIN
Definition: setypes.h:603
#define USER_FORCE_PASSWORD_CHANGE
Definition: ntsam.h:133
UNICODE_STRING Password
Definition: ntsam.h:636
smooth NULL
Definition: ftsmooth.c:416
#define SAM_SERVER_LOOKUP_DOMAIN
Definition: ntsam.h:104
void DPRINT(...)
Definition: polytest.cpp:61
NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
Definition: lsa.c:699
NTSTATUS NTAPI SamSetInformationUser(IN SAM_HANDLE UserHandle, IN USER_INFORMATION_CLASS UserInformationClass, IN PVOID Buffer)
Definition: samlib.c:1964
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:585
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define POLICY_TRUST_ADMIN
Definition: ntsecapi.h:64
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSTATUS NTAPI SamFreeMemory(IN PVOID Buffer)
Definition: samlib.c:947
LPWSTR Password
Definition: globals.h:25
struct _LSA_OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
Status
Definition: gdiplustypes.h:24
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
LSA_UNICODE_STRING DomainName
Definition: ntsecapi.h:563
#define DPRINT1
Definition: precomp.h:8
LPWSTR Domain
Definition: globals.h:24
#define DOMAIN_LOOKUP
Definition: ntsam.h:42
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI SamQueryInformationUser(IN SAM_HANDLE UserHandle, IN USER_INFORMATION_CLASS UserInformationClass, OUT PVOID *Buffer)
Definition: samlib.c:1695
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define memset(x, y, z)
Definition: compat.h:39
NTSTATUS NTAPI SamConnect(IN OUT PUNICODE_STRING ServerName OPTIONAL, OUT PSAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: samlib.c:498
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSTATUS NTAPI SamOpenUser(IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN ULONG UserId, OUT PSAM_HANDLE UserHandle)
Definition: samlib.c:1499

Referenced by ComputerPageDlgProc().

◆ SetAutoAdminLogon()

VOID SetAutoAdminLogon ( VOID  )

Definition at line 759 of file security.c.

760 {
761  WCHAR szAutoAdminLogon[2];
762  HKEY hKey = NULL;
763  DWORD dwType;
764  DWORD dwSize;
765  LONG lError;
766 
768  L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
769  0,
771  &hKey);
772  if (lError != ERROR_SUCCESS)
773  return;
774 
775  dwSize = 2 * sizeof(WCHAR);
776  lError = RegQueryValueExW(hKey,
777  L"AutoAdminLogon",
778  NULL,
779  &dwType,
780  (LPBYTE)szAutoAdminLogon,
781  &dwSize);
782  if (lError != ERROR_SUCCESS)
783  goto done;
784 
785  if (wcscmp(szAutoAdminLogon, L"1") == 0)
786  {
787  RegSetValueExW(hKey,
788  L"DefaultDomainName",
789  0,
790  REG_SZ,
792  (wcslen(AdminInfo.Domain) + 1) * sizeof(WCHAR));
793 
794  RegSetValueExW(hKey,
795  L"DefaultUserName",
796  0,
797  REG_SZ,
799  (wcslen(AdminInfo.Name) + 1) * sizeof(WCHAR));
800 
801  RegSetValueExW(hKey,
802  L"DefaultPassword",
803  0,
804  REG_SZ,
806  (wcslen(AdminInfo.Password) + 1) * sizeof(WCHAR));
807  }
808 
809 done:
810  if (hKey != NULL)
811  RegCloseKey(hKey);
812 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
ADMIN_INFO AdminInfo
Definition: install.c:38
LPWSTR Name
Definition: globals.h:23
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
#define KEY_WRITE
Definition: nt_native.h:1031
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4917
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4134
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
LPWSTR Password
Definition: globals.h:25
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LPWSTR Domain
Definition: globals.h:24
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3381
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define REG_SZ
Definition: layer.c:22

Referenced by InstallReactOS().

◆ SetPrimaryDomain()

static NTSTATUS SetPrimaryDomain ( LPCWSTR  DomainName,
PSID  DomainSid 
)
static

Definition at line 140 of file security.c.

142 {
146  LSA_HANDLE PolicyHandle;
148 
149  DPRINT1("SYSSETUP: SetPrimaryDomain()\n");
150 
153 
157  &PolicyHandle);
158  if (Status != STATUS_SUCCESS)
159  {
160  DPRINT("LsaOpenPolicy failed (Status: 0x%08lx)\n", Status);
161  return Status;
162  }
163 
164  Status = LsaQueryInformationPolicy(PolicyHandle,
166  (PVOID *)&OrigInfo);
167  if (Status == STATUS_SUCCESS && OrigInfo != NULL)
168  {
169  if (DomainName == NULL)
170  {
171  Info.Name.Buffer = OrigInfo->Name.Buffer;
172  Info.Name.Length = OrigInfo->Name.Length;
173  Info.Name.MaximumLength = OrigInfo->Name.MaximumLength;
174  }
175  else
176  {
177  Info.Name.Buffer = (LPWSTR)DomainName;
178  Info.Name.Length = wcslen(DomainName) * sizeof(WCHAR);
179  Info.Name.MaximumLength = Info.Name.Length + sizeof(WCHAR);
180  }
181 
182  if (DomainSid == NULL)
183  Info.Sid = OrigInfo->Sid;
184  else
185  Info.Sid = DomainSid;
186  }
187  else
188  {
189  Info.Name.Buffer = (LPWSTR)DomainName;
190  Info.Name.Length = wcslen(DomainName) * sizeof(WCHAR);
191  Info.Name.MaximumLength = Info.Name.Length + sizeof(WCHAR);
192  Info.Sid = DomainSid;
193  }
194 
195  Status = LsaSetInformationPolicy(PolicyHandle,
197  (PVOID)&Info);
198  if (Status != STATUS_SUCCESS)
199  {
200  DPRINT("LsaSetInformationPolicy failed (Status: 0x%08lx)\n", Status);
201  }
202 
203  if (OrigInfo != NULL)
204  LsaFreeMemory(OrigInfo);
205 
206  LsaClose(PolicyHandle);
207 
208  return Status;
209 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
NTSTATUS WINAPI LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer)
Definition: lsa.c:1471
#define POLICY_VIEW_LOCAL_INFORMATION
Definition: ntsecapi.h:61
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
NTSTATUS WINAPI LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, IN PVOID Buffer)
Definition: lsa.c:1946
struct TraceInfo Info
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
LSA_UNICODE_STRING Name
Definition: ntsecapi.h:567
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
Definition: lsa.c:699
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define POLICY_TRUST_ADMIN
Definition: ntsecapi.h:64
struct _LSA_OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
Status
Definition: gdiplustypes.h:24
USHORT MaximumLength
Definition: ntsecapi.h:164
#define DPRINT1
Definition: precomp.h:8
WCHAR * LPWSTR
Definition: xmlstorage.h:184
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define memset(x, y, z)
Definition: compat.h:39
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

Referenced by InstallSecurity().