ReactOS  0.4.14-dev-614-gbfd8a84
security.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS system libraries
4  * PURPOSE: System setup
5  * FILE: dll/win32/syssetup/security.c
6  * PROGRAMER: Eric Kohl
7  */
8 
9 /* INCLUDES *****************************************************************/
10 
11 #include "precomp.h"
12 
13 #include <ntlsa.h>
14 #include <ntsecapi.h>
15 #include <ntsam.h>
16 #include <sddl.h>
17 
18 #define NDEBUG
19 #include <debug.h>
20 
21 /* FUNCTIONS ****************************************************************/
22 
24 WINAPI
26  PSID DomainSid,
27  LPCWSTR DomainName)
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 }
135 
136 
137 /* Hack */
138 static
139 NTSTATUS
141  PSID DomainSid)
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 }
210 
211 
212 static
213 VOID
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 }
270 
271 
272 static
273 VOID
275  HINF hSecurityInf)
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 }
388 
389 
390 static
391 VOID
393  HINF hSecurityInf)
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 }
587 
588 
589 VOID
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 }
617 
618 
619 NTSTATUS
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 }
756 
757 
758 VOID
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 }
813 
814 
815 /* EOF */
816 
static DWORD
Definition: security.c:70
NTSTATUS NTAPI SamCloseHandle(IN SAM_HANDLE SamHandle)
Definition: samlib.c:476
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 SAM_SERVER_CONNECT
Definition: ntsam.h:99
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
static VOID InstallPrivileges(HINF hSecurityInf)
Definition: security.c:274
VOID SetAutoAdminLogon(VOID)
Definition: security.c:759
#define INF_STYLE_WIN4
Definition: infsupp.h:41
#define ERROR_SUCCESS
Definition: deptool.c:10
NTSTATUS WINAPI LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer)
Definition: lsa.c:1471
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define REG_BINARY
Definition: nt_native.h:1496
#define KEY_READ
Definition: nt_native.h:1023
#define POLICY_VIEW_LOCAL_INFORMATION
Definition: ntsecapi.h:61
uint16_t * PWSTR
Definition: typedefs.h:54
#define ConvertStringSidToSid
Definition: sddl.h:161
static VOID InstallBuiltinAccounts(VOID)
Definition: security.c:214
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
#define SetupGetMultiSzField
Definition: setupapi.h:2630
LONG NTSTATUS
Definition: precomp.h:26
#define INT
Definition: polytest.cpp:20
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
Definition: parser.c:1229
NTSTATUS WINAPI LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, IN PVOID Buffer)
Definition: lsa.c:1946
LPWSTR Name
Definition: globals.h:23
struct TraceInfo Info
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
Definition: infsupp.c:43
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:1091
uint32_t ULONG_PTR
Definition: typedefs.h:63
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
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
#define USER_READ_GENERAL
Definition: ntsam.h:126
#define UNICODE_NULL
long LONG
Definition: pedump.c:60
BOOL WINAPI SetupGetBinaryField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PUCHAR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
Definition: infsupp.c:126
#define DOMAIN_USER_RID_ADMIN
Definition: setypes.h:603
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define USER_FORCE_PASSWORD_CHANGE
Definition: ntsam.h:133
NTSTATUS SetAdministratorPassword(LPCWSTR Password)
Definition: security.c:620
UNICODE_STRING Password
Definition: ntsam.h:636
smooth NULL
Definition: ftsmooth.c:416
PVOID pBuffer
#define SAM_SERVER_LOOKUP_DOMAIN
Definition: ntsam.h:104
_In_ ULONG _In_ ACCESS_MASK _In_ PSID Sid
Definition: rtlfuncs.h:1104
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)
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
UNICODE_STRING DomainName
Definition: ntsam.h:381
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:588
#define POLICY_LOOKUP_NAMES
Definition: ntsecapi.h:72
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#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:4895
int * PINT
Definition: windef.h:177
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
NTSTATUS NTAPI SamSetInformationDomain(IN SAM_HANDLE DomainHandle, IN DOMAIN_INFORMATION_CLASS DomainInformationClass, IN PVOID Buffer)
Definition: samlib.c:1910
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD DWORD * dwLength
Definition: fusion.c:85
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define POLICY_TRUST_ADMIN
Definition: ntsecapi.h:64
NTSTATUS WINAPI LsaCreateAccount(IN LSA_HANDLE PolicyHandle, IN PSID AccountSid, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE AccountHandle)
Definition: lsa.c:217
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:6
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DOMAIN_WRITE_OTHER_PARAMETERS
Definition: ntsam.h:36
#define SetupGetStringField
Definition: setupapi.h:2634
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
Definition: infsupp.c:91
_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
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
NTSTATUS WINAPI LsaAddAccountRights(IN LSA_HANDLE PolicyHandle, IN PSID AccountSid, IN PLSA_UNICODE_STRING UserRights, IN ULONG CountOfRights)
Definition: lsa.c:103
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
static VOID ApplyRegistryValues(HINF hSecurityInf)
Definition: security.c:392
VOID InstallSecurity(VOID)
Definition: security.c:590
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
Definition: infsupp.c:80
static NTSTATUS SetPrimaryDomain(LPCWSTR DomainName, PSID DomainSid)
Definition: security.c:140
#define DPRINT1
Definition: precomp.h:8
LPWSTR Domain
Definition: globals.h:24
BOOL WINAPI SetupGetIntField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT INT *IntegerValue)
Definition: infsupp.c:146
unsigned int ULONG
Definition: retypes.h:1
#define DOMAIN_LOOKUP
Definition: ntsam.h:42
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
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:2938
#define POLICY_CREATE_ACCOUNT
Definition: ntsecapi.h:65
#define memset(x, y, z)
Definition: compat.h:39
#define REG_DWORD
Definition: sdbapi.c:596
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
NTSTATUS WINAPI SetAccountsDomainSid(PSID DomainSid, LPCWSTR DomainName)
Definition: security.c:25
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:402
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#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
NTSTATUS NTAPI SamOpenUser(IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN ULONG UserId, OUT PSAM_HANDLE UserHandle)
Definition: samlib.c:1499
#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