ReactOS  0.4.13-dev-100-gc8611ae
sysvol.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: Boot Data implementation
5  * FILE: lib/rtl/bootdata.c
6  * PROGRAMMERS:
7  */
8 
9 /* INCLUDES *****************************************************************/
10 
11 #include <rtl.h>
12 #define NDEBUG
13 #include <debug.h>
14 
15 /* FUNCTIONS *****************************************************************/
16 
18 
19 static NTSTATUS
21  OUT PSID *SystemSid)
22 {
23  PSECURITY_DESCRIPTOR AbsSD = NULL;
25  PACL Dacl = NULL;
28 
29  /* create the local SYSTEM SID */
31  1,
33  0,
34  0,
35  0,
36  0,
37  0,
38  0,
39  0,
41  if (!NT_SUCCESS(Status))
42  {
43  return Status;
44  }
45 
46  /* allocate and initialize the security descriptor */
48  'dSeS');
49  if (AbsSD == NULL)
50  {
52  goto Cleanup;
53  }
54 
57  if (!NT_SUCCESS(Status))
58  {
59  goto Cleanup;
60  }
61 
62  /* allocate and create the DACL */
63  DaclSize = sizeof(ACL) + sizeof(ACE) +
66  'cAeS');
67  if (Dacl == NULL)
68  {
70  goto Cleanup;
71  }
72 
74  DaclSize,
75  ACL_REVISION);
76  if (!NT_SUCCESS(Status))
77  {
78  goto Cleanup;
79  }
80 
86  if (!NT_SUCCESS(Status))
87  {
88  goto Cleanup;
89  }
90 
91  /* set the DACL in the security descriptor */
93  TRUE,
94  Dacl,
95  FALSE);
96 
97  /* all done */
98  if (NT_SUCCESS(Status))
99  {
100  *SecurityDescriptor = AbsSD;
101  *SystemSid = LocalSystemSid;
102  }
103  else
104  {
105 Cleanup:
106  if (LocalSystemSid != NULL)
107  {
109  }
110 
111  if (Dacl != NULL)
112  {
114  'cAeS');
115  }
116 
117  if (AbsSD != NULL)
118  {
119  RtlpFreeMemory(AbsSD,
120  'dSeS');
121  }
122  }
123 
124  return Status;
125 }
126 
127 static NTSTATUS
130 {
131  PSECURITY_DESCRIPTOR RelSD = NULL;
132  PSECURITY_DESCRIPTOR NewRelSD = NULL;
133  PSECURITY_DESCRIPTOR AbsSD = NULL;
134 #ifdef _WIN64
135  BOOLEAN AbsSDAllocated = FALSE;
136 #endif
137  PSID AdminSid = NULL;
139  ULONG DescriptorSize;
140  ULONG AbsSDSize, RelSDSize = 0;
141  PACL Dacl;
143  PSID OwnerSid;
145  ULONG AceIndex;
146  PACE Ace = NULL;
148 
149  /* find out how much memory we need to allocate for the self-relative
150  descriptor we're querying */
151  Status = ZwQuerySecurityObject(DirectoryHandle,
153  NULL,
154  0,
155  &DescriptorSize);
157  {
158  /* looks like the FS doesn't support security... return success */
160  goto Cleanup;
161  }
162 
163  /* allocate enough memory for the security descriptor */
164  RelSD = RtlpAllocateMemory(DescriptorSize,
165  'dSeS');
166  if (RelSD == NULL)
167  {
169  goto Cleanup;
170  }
171 
172  /* query the self-relative security descriptor */
173  Status = ZwQuerySecurityObject(DirectoryHandle,
175  RelSD,
176  DescriptorSize,
177  &DescriptorSize);
178  if (!NT_SUCCESS(Status))
179  {
180  /* FIXME - handle the case where someone else modified the owner and/or
181  DACL while we allocated memory. But that should be *very*
182  unlikely.... */
183  goto Cleanup;
184  }
185 
186  /* query the owner and DACL from the descriptor */
188  &OwnerSid,
189  &OwnerDefaulted);
190  if (!NT_SUCCESS(Status))
191  {
192  goto Cleanup;
193  }
194 
196  &DaclPresent,
197  &Dacl,
198  &DaclDefaulted);
199  if (!NT_SUCCESS(Status))
200  {
201  goto Cleanup;
202  }
203 
204  /* create the Administrators SID */
206  2,
209  0,
210  0,
211  0,
212  0,
213  0,
214  0,
215  &AdminSid);
216  if (!NT_SUCCESS(Status))
217  {
218  goto Cleanup;
219  }
220 
221  /* create the local SYSTEM SID */
223  1,
225  0,
226  0,
227  0,
228  0,
229  0,
230  0,
231  0,
232  &LocalSystemSid);
233  if (!NT_SUCCESS(Status))
234  {
235  goto Cleanup;
236  }
237 
238  /* check if the Administrators are the owner and at least a not-NULL DACL
239  is present */
240  if (OwnerSid != NULL &&
241  RtlEqualSid(OwnerSid,
242  AdminSid) &&
243  DaclPresent && Dacl != NULL)
244  {
245  /* check the DACL for an Allowed ACE for the SYSTEM account */
246  AceIndex = 0;
247  do
248  {
250  AceIndex++,
251  (PVOID*)&Ace);
252  if (!NT_SUCCESS(Status))
253  {
254  Ace = NULL;
255  }
256  else if (Ace != NULL && Ace->Header.AceType == ACCESS_ALLOWED_ACE_TYPE)
257  {
258  /* check if the the ACE is a set of allowed permissions for the
259  local SYSTEM account */
260  if (RtlEqualSid((PSID)(Ace + 1),
262  {
263  /* check if the ACE is inherited by noncontainer and
264  container objects, if not attempt to change that */
265  if (!(Ace->Header.AceFlags & OBJECT_INHERIT_ACE) ||
266  !(Ace->Header.AceFlags & CONTAINER_INHERIT_ACE))
267  {
268  Ace->Header.AceFlags |= OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE;
269  Status = ZwSetSecurityObject(DirectoryHandle,
271  RelSD);
272  }
273  else
274  {
275  /* all done, we have access */
277  }
278 
279  goto Cleanup;
280  }
281  }
282  } while (Ace != NULL);
283  }
284 
285  AbsSDSize = DescriptorSize;
286 
287  /* because we need to change any existing data we need to convert it to
288  an absolute security descriptor first */
290  &AbsSDSize);
291 #ifdef _WIN64
293  {
294  /* this error code can only be returned on 64 bit builds because
295  the size of an absolute security descriptor is greater than the
296  size of a self-relative security descriptor */
297  ASSERT(AbsSDSize > DescriptorSize);
298 
299  AbsSD = RtlpAllocateMemory(DescriptorSize,
300  'dSeS');
301  if (AbsSD == NULL)
302  {
304  goto Cleanup;
305  }
306 
307  AbsSDAllocated = TRUE;
308 
309  /* make a raw copy of the self-relative descriptor */
310  RtlCopyMemory(AbsSD,
311  RelSD,
312  DescriptorSize);
313 
314  /* finally convert it */
316  &AbsSDSize);
317  }
318  else
319 #endif
320  {
321  AbsSD = RelSD;
322  }
323 
324  if (!NT_SUCCESS(Status))
325  {
326  goto Cleanup;
327  }
328 
329  /* set the owner SID */
331  AdminSid,
332  FALSE);
333  if (!NT_SUCCESS(Status))
334  {
335  goto Cleanup;
336  }
337 
338  /* set the DACL in the security descriptor */
340  TRUE,
341  SecurityDescriptor->Dacl,
342  FALSE);
343  if (!NT_SUCCESS(Status))
344  {
345  goto Cleanup;
346  }
347 
348  /* convert it back to a self-relative descriptor, find out how much
349  memory we need */
351  NULL,
352  &RelSDSize);
354  {
355  goto Cleanup;
356  }
357 
358  /* allocate enough memory for the new self-relative descriptor */
359  NewRelSD = RtlpAllocateMemory(RelSDSize,
360  'dSeS');
361  if (NewRelSD == NULL)
362  {
364  goto Cleanup;
365  }
366 
367  /* convert the security descriptor to self-relative format */
369  NewRelSD,
370  &RelSDSize);
372  {
373  goto Cleanup;
374  }
375 
376  /* finally attempt to change the security information */
377  Status = ZwSetSecurityObject(DirectoryHandle,
379  NewRelSD);
380 
381 Cleanup:
382  if (AdminSid != NULL)
383  {
385  }
386 
387  if (LocalSystemSid != NULL)
388  {
390  }
391 
392  if (RelSD != NULL)
393  {
394  RtlpFreeMemory(RelSD,
395  'dSeS');
396  }
397 
398  if (NewRelSD != NULL)
399  {
400  RtlpFreeMemory(NewRelSD,
401  'dSeS');
402  }
403 
404 #ifdef _WIN64
405  if (AbsSDAllocated)
406  {
407  RtlpFreeMemory(AbsSD,
408  'dSeS');
409  }
410 #endif
411 
412  return Status;
413 }
414 
415 static NTSTATUS
418 {
421  SECURITY_DESCRIPTOR AbsSD;
422  PSID AdminSid = NULL;
424  BOOLEAN TokenEnabled = FALSE;
425  HANDLE hToken = NULL;
426  HANDLE hDirectory = NULL;
429 
432  &hToken);
433  if (!NT_SUCCESS(Status))
434  {
435  goto Cleanup;
436  }
437 
438  /* attempt to enable the SE_TAKE_OWNERSHIP_PRIVILEGE privilege */
439  TokenPrivileges.PrivilegeCount = 1;
440  TokenPrivileges.Privileges[0].Luid.LowPart = SE_TAKE_OWNERSHIP_PRIVILEGE;
441  TokenPrivileges.Privileges[0].Luid.HighPart = 0;
442  TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
444  FALSE,
446  sizeof(TokenPrivileges),
448  &ReturnLength);
449  if (!NT_SUCCESS(Status))
450  {
451  goto Cleanup;
452  }
453  TokenEnabled = (TokenPrivileges.PrivilegeCount != 0);
454 
455  /* open the directory */
457  DirectoryPath,
458  0,
459  NULL,
461 
462  Status = ZwOpenFile(&hDirectory,
465  &IoStatusBlock,
468  if (!NT_SUCCESS(Status))
469  {
470  goto Cleanup;
471  }
472 
473  /* create the Administrators SID */
475  2,
478  0,
479  0,
480  0,
481  0,
482  0,
483  0,
484  &AdminSid);
485  if (!NT_SUCCESS(Status))
486  {
487  goto Cleanup;
488  }
489 
490  /* create the security descriptor */
493  if (!NT_SUCCESS(Status))
494  {
495  goto Cleanup;
496  }
497 
499  AdminSid,
500  FALSE);
501  if (!NT_SUCCESS(Status))
502  {
503  goto Cleanup;
504  }
505 
506  /* attempt to take ownership */
507  Status = ZwSetSecurityObject(hDirectory,
509  &AbsSD);
510 
511 Cleanup:
512  if (TokenEnabled)
513  {
515  FALSE,
517  0,
518  NULL,
519  NULL);
520  }
521 
522  if (AdminSid != NULL)
523  {
525  }
526 
527  if (hDirectory != NULL)
528  {
529  ZwClose(hDirectory);
530  }
531 
532  if (hToken != NULL)
533  {
534  ZwClose(hToken);
535  }
536 
537  return Status;
538 }
539 
540 /*
541 * @implemented
542 */
543 NTSTATUS
544 NTAPI
546 {
549  HANDLE hDirectory;
550  UNICODE_STRING DirectoryName, NewPath;
551  ULONG PathLen;
553  PSID SystemSid = NULL;
554  BOOLEAN AddSep = FALSE;
556 
557  PAGED_CODE_RTL();
558 
559  RtlInitUnicodeString(&DirectoryName,
560  L"System Volume Information");
561 
562  PathLen = VolumeRootPath->Length + DirectoryName.Length;
563 
564  /* make sure we don't overflow while appending the strings */
565  if (PathLen > 0xFFFC)
566  {
568  }
569 
570  if (VolumeRootPath->Buffer[(VolumeRootPath->Length / sizeof(WCHAR)) - 1] != L'\\')
571  {
572  AddSep = TRUE;
573  PathLen += sizeof(WCHAR);
574  }
575 
576  /* allocate the new string */
577  NewPath.MaximumLength = (USHORT)PathLen + sizeof(WCHAR);
579  TAG_USTR);
580  if (NewPath.Buffer == NULL)
581  {
583  }
584 
585  /* create the new path string */
586  NewPath.Length = VolumeRootPath->Length;
587  RtlCopyMemory(NewPath.Buffer,
588  VolumeRootPath->Buffer,
589  NewPath.Length);
590  if (AddSep)
591  {
592  NewPath.Buffer[NewPath.Length / sizeof(WCHAR)] = L'\\';
593  NewPath.Length += sizeof(WCHAR);
594  }
595  RtlCopyMemory(NewPath.Buffer + (NewPath.Length / sizeof(WCHAR)),
596  DirectoryName.Buffer,
597  DirectoryName.Length);
598  NewPath.Length += DirectoryName.Length;
599  NewPath.Buffer[NewPath.Length / sizeof(WCHAR)] = L'\0';
600 
601  ASSERT(NewPath.Length == PathLen);
602  ASSERT(NewPath.Length == NewPath.MaximumLength - sizeof(WCHAR));
603 
604  /* create the security descriptor for the new directory */
606  &SystemSid);
607  if (NT_SUCCESS(Status))
608  {
609  /* create or open the directory */
611  &NewPath,
612  0,
613  NULL,
615 
616  Status = ZwCreateFile(&hDirectory,
619  &IoStatusBlock,
620  NULL,
623  FILE_OPEN_IF,
625  NULL,
626  0);
627  if (!NT_SUCCESS(Status))
628  {
629  Status = RtlpSysVolTakeOwnership(&NewPath,
631 
632  if (NT_SUCCESS(Status))
633  {
634  /* successfully took ownership, attempt to open it */
635  Status = ZwCreateFile(&hDirectory,
638  &IoStatusBlock,
639  NULL,
642  FILE_OPEN_IF,
644  NULL,
645  0);
646  }
647  }
648 
649  if (NT_SUCCESS(Status))
650  {
651  /* check security now and adjust it if neccessary */
654  ZwClose(hDirectory);
655  }
656 
657  /* free allocated memory */
659  ASSERT(SecurityDescriptor->Dacl != NULL);
660 
662  'cAeS');
664  'dSeS');
665 
666  RtlFreeSid(SystemSid);
667  }
668 
670  TAG_USTR);
671  return Status;
672 }
673 
674 /* EOF */
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
Definition: dumpinfo.c:39
#define IN
Definition: typedefs.h:38
#define SECURITY_LOCAL_SYSTEM_RID
Definition: setypes.h:546
_In_opt_ PSID _In_opt_ BOOLEAN OwnerDefaulted
Definition: rtlfuncs.h:1630
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
static NTSTATUS RtlpSysVolCreateSecurityDescriptor(OUT PISECURITY_DESCRIPTOR *SecurityDescriptor, OUT PSID *SystemSid)
Definition: sysvol.c:20
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define FILE_OPEN_IF
Definition: from_kernel.h:56
_In_ BOOLEAN _In_opt_ PACL _In_opt_ BOOLEAN DaclDefaulted
Definition: rtlfuncs.h:1595
USHORT MaximumLength
Definition: env_spec_w32.h:370
static PSID AdminSid
Definition: msgina.c:39
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
Definition: wsk.h:182
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define FILE_DIRECTORY_FILE
Definition: constants.h:491
NTSYSAPI PVOID NTAPI RtlFreeSid(_In_ _Post_invalid_ PSID Sid)
LONG NTSTATUS
Definition: precomp.h:26
static HANDLE DirectoryHandle
Definition: ObType.c:48
#define SE_TAKE_OWNERSHIP_PRIVILEGE
Definition: security.c:663
#define RtlpAllocateStringMemory
Definition: rtlp.h:140
NTSYSAPI NTSTATUS NTAPI RtlGetAce(PACL Acl, ULONG AceIndex, PVOID *Ace)
NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor(_Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, _In_ ULONG Revision)
VOID NTAPI RtlpFreeMemory(_In_ PVOID Mem, _In_ ULONG Tag)
Definition: rtlcompat.c:45
#define PAGED_CODE_RTL()
Definition: rtlp.h:16
#define WRITE_OWNER
Definition: nt_native.h:60
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
NTSYSAPI NTSTATUS NTAPI RtlAllocateAndInitializeSid(IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, IN UCHAR SubAuthorityCount, IN ULONG SubAuthority0, IN ULONG SubAuthority1, IN ULONG SubAuthority2, IN ULONG SubAuthority3, IN ULONG SubAuthority4, IN ULONG SubAuthority5, IN ULONG SubAuthority6, IN ULONG SubAuthority7, OUT PSID *Sid)
Definition: sid.c:290
#define FILE_SHARE_READ
Definition: compat.h:125
_In_ BOOLEAN DaclPresent
Definition: rtlfuncs.h:1595
NTSYSAPI NTSTATUS NTAPI RtlGetDaclSecurityDescriptor(_In_ PSECURITY_DESCRIPTOR SecurityDescriptor, _Out_ PBOOLEAN DaclPresent, _Out_ PACL *Dacl, _Out_ PBOOLEAN DaclDefaulted)
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:64
NTSYSAPI NTSTATUS NTAPI RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision)
#define SECURITY_DESCRIPTOR_REVISION
Definition: setypes.h:58
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI ZwAdjustPrivilegesToken(_In_ HANDLE TokenHandle, _In_ BOOLEAN DisableAllPrivileges, _In_opt_ PTOKEN_PRIVILEGES NewState, _In_ ULONG BufferLength, _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_PRIVILEGES PreviousState, _When_(PreviousState !=NULL, _Out_) PULONG ReturnLength)
PVOID NTAPI RtlpAllocateMemory(_In_ ULONG Bytes, _In_ ULONG Tag)
Definition: rtlcompat.c:34
static NTSTATUS RtlpSysVolTakeOwnership(IN PUNICODE_STRING DirectoryPath, IN PSECURITY_DESCRIPTOR SecurityDescriptor)
Definition: sysvol.c:416
static SID_IDENTIFIER_AUTHORITY LocalSystemAuthority
Definition: sysvol.c:17
NTSYSAPI NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD(IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, IN PULONG BufferLength)
Definition: sd.c:626
NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL, DWORD, DWORD, DWORD, PSID)
Definition: card.h:12
unsigned char BOOLEAN
struct _ACL ACL
smooth NULL
Definition: ftsmooth.c:416
NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR, BOOLEAN, PACL, BOOLEAN)
NTSYSAPI ULONG NTAPI RtlLengthSid(IN PSID Sid)
Definition: sid.c:150
#define SECURITY_NT_AUTHORITY
Definition: setypes.h:526
#define NtCurrentProcess()
Definition: nt_native.h:1657
#define CONTAINER_INHERIT_ACE
Definition: setypes.h:715
#define SECURITY_BUILTIN_DOMAIN_RID
Definition: setypes.h:553
#define TOKEN_QUERY
Definition: setypes.h:874
NTSTATUS NTAPI RtlCreateSystemVolumeInformationFolder(IN PUNICODE_STRING VolumeRootPath)
Definition: sysvol.c:545
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
PSID LocalSystemSid
Definition: globals.c:16
#define ACCESS_ALLOWED_ACE_TYPE
Definition: setypes.h:685
#define WRITE_DAC
Definition: nt_native.h:59
#define SPECIFIC_RIGHTS_ALL
Definition: nt_native.h:71
#define READ_CONTROL
Definition: nt_native.h:58
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define RtlpFreeStringMemory
Definition: rtlp.h:141
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL Dacl
Definition: rtlfuncs.h:1553
static NTSTATUS RtlpSysVolCheckOwnerAndSecurity(IN HANDLE DirectoryHandle, IN PISECURITY_DESCRIPTOR SecurityDescriptor)
Definition: sysvol.c:128
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
static const WCHAR L[]
Definition: oid.c:1250
NTSYSAPI NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR, PSID, BOOLEAN)
static const WCHAR Cleanup[]
Definition: register.c:80
#define SYNCHRONIZE
Definition: nt_native.h:61
_In_ ULONG AceIndex
Definition: rtlfuncs.h:1864
#define TAG_USTR
Definition: libsupp.c:111
Status
Definition: gdiplustypes.h:24
#define STANDARD_RIGHTS_ALL
Definition: nt_native.h:69
unsigned short USHORT
Definition: pedump.c:61
NTSYSAPI NTSTATUS NTAPI ZwOpenProcessToken(_In_ HANDLE ProcessHandle, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE TokenHandle)
NTSYSAPI NTSTATUS NTAPI RtlSelfRelativeToAbsoluteSD2(_Inout_ PSECURITY_DESCRIPTOR SelfRelativeSD, _Out_ PULONG BufferSize)
#define STATUS_NO_MEMORY
Definition: ntstatus.h:246
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define OWNER_SECURITY_INFORMATION
Definition: setypes.h:123
NTSYSAPI NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor, OUT PSID *Owner, OUT PBOOLEAN OwnerDefaulted)
Definition: sd.c:257
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG DaclSize
Definition: rtlfuncs.h:1553
#define ACL_REVISION
Definition: setypes.h:39
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define OUT
Definition: typedefs.h:39
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:876
#define DOMAIN_ALIAS_RID_ADMINS
Definition: setypes.h:624
Definition: rtltypes.h:988
#define OBJECT_INHERIT_ACE
Definition: setypes.h:714
#define DACL_SECURITY_INFORMATION
Definition: setypes.h:125
NTSYSAPI BOOLEAN NTAPI RtlEqualSid(_In_ PSID Sid1, _In_ PSID Sid2)