ReactOS 0.4.16-dev-1946-g52006dd
CmSecurity.c File Reference
#include <kmt_test.h>
#include "../ntos_se/se.h"
Include dependency graph for CmSecurity.c:

Go to the source code of this file.

Macros

#define CheckKeySecurity(name, AceCount, ...)   CheckKeySecurity_(name, AceCount, __FILE__, __LINE__, ##__VA_ARGS__)
 
#define CheckKeySecurity_(name, AceCount, file, line, ...)   CheckKeySecurity__(name, AceCount, file ":" KMT_STRINGIZE(line), ##__VA_ARGS__)
 

Functions

static VOID CheckKeySecurity__ (_In_ PCWSTR KeyName, _In_ ULONG AceCount, _In_ PCSTR FileAndLine,...)
 
static void CmSecurity_WS03 (PSID TerminalServerSid)
 
static void CmSecurity_Vista (PSID TerminalServerSid)
 
static void CmSecurity_Win8 (PSID TerminalServerSid)
 
 START_TEST (CmSecurity)
 

Macro Definition Documentation

◆ CheckKeySecurity

#define CheckKeySecurity (   name,
  AceCount,
  ... 
)    CheckKeySecurity_(name, AceCount, __FILE__, __LINE__, ##__VA_ARGS__)

Definition at line 11 of file CmSecurity.c.

◆ CheckKeySecurity_

#define CheckKeySecurity_ (   name,
  AceCount,
  file,
  line,
  ... 
)    CheckKeySecurity__(name, AceCount, file ":" KMT_STRINGIZE(line), ##__VA_ARGS__)

Definition at line 12 of file CmSecurity.c.

Function Documentation

◆ CheckKeySecurity__()

static VOID CheckKeySecurity__ ( _In_ PCWSTR  KeyName,
_In_ ULONG  AceCount,
_In_ PCSTR  FileAndLine,
  ... 
)
static

Definition at line 15 of file CmSecurity.c.

20{
22 UNICODE_STRING KeyNameString;
26 ULONG SecurityDescriptorSize;
27 PSID Owner;
28 PSID Group;
29 PACL Dacl;
30 PACL Sacl;
31 BOOLEAN Present;
32 BOOLEAN Defaulted;
33 va_list Arguments;
34
35 RtlInitUnicodeString(&KeyNameString, KeyName);
37 &KeyNameString,
39 NULL,
40 NULL);
41 Status = ZwOpenKey(&KeyHandle,
45 if (skip(NT_SUCCESS(Status), "No key (%ls)\n", KeyName))
46 {
47 return;
48 }
49
50 Status = ZwQuerySecurityObject(KeyHandle,
52 NULL,
53 0,
54 &SecurityDescriptorSize);
56 if (skip(Status == STATUS_BUFFER_TOO_SMALL, "No security size (%ls)\n", KeyName))
57 {
59 return;
60 }
61
63 SecurityDescriptorSize,
64 'dSmK');
65 ok(SecurityDescriptor != NULL, "Failed to allocate %lu bytes\n", SecurityDescriptorSize);
66 if (skip(SecurityDescriptor != NULL, "No memory for descriptor (%ls)\n", KeyName))
67 {
69 return;
70 }
71
72 Status = ZwQuerySecurityObject(KeyHandle,
75 SecurityDescriptorSize,
76 &SecurityDescriptorSize);
78 if (NT_SUCCESS(Status))
79 {
80 Owner = NULL;
82 &Owner,
83 &Defaulted);
85 ok(Defaulted == FALSE, "Owner defaulted for %ls\n", KeyName);
86
87 Group = NULL;
89 &Group,
90 &Defaulted);
92 ok(Defaulted == FALSE, "Group defaulted for %ls\n", KeyName);
93
94 Dacl = NULL;
96 &Present,
97 &Dacl,
98 &Defaulted);
100 ok(Present == TRUE, "DACL not present for %ls\n", KeyName);
101 ok(Defaulted == FALSE, "DACL defaulted for %ls\n", KeyName);
102 va_start(Arguments, FileAndLine);
103 VCheckAcl__(Dacl, AceCount, FileAndLine, Arguments);
104 va_end(Arguments);
105
106 /* Windows 8+ has SACLs for:
107 * \REGISTRY\MACHINE\SAM
108 * \REGISTRY\MACHINE\SECURITY
109 * \REGISTRY\MACHINE\SOFTWARE
110 * \REGISTRY\MACHINE\SYSTEM
111 * \REGISTRY\USER\.DEFAULT
112 * \REGISTRY\USER\S-1-5-18
113 * \REGISTRY\USER\S-1-5-20
114 *
115 * TODO: Investigate these SACLs and test accordingly.
116 */
118 {
119 Sacl = NULL;
121 &Present,
122 &Sacl,
123 &Defaulted);
125 ok(Present == FALSE, "SACL present for %ls\n", KeyName);
126 ok(Defaulted == FALSE, "SACL defaulted for %ls\n", KeyName);
127 ok(Sacl == NULL, "Sacl is %p for %ls\n", Sacl, KeyName);
128 }
129 }
132}
unsigned char BOOLEAN
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define ok_eq_hex(value, expected)
Definition: apitest.h:134
#define GetNTVersion()
Definition: apitest.h:17
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
LONG NTSTATUS
Definition: precomp.h:26
@ Group
Definition: help.c:22
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
Status
Definition: gdiplustypes.h:25
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
VOID VCheckAcl__(_In_ PACL Acl, _In_ ULONG AceCount, _In_ PCSTR FileAndLine, _In_ va_list Arguments)
Definition: SeHelpers.c:128
#define NO_SIZE
Definition: se.h:29
#define CheckSid(Sid, SidSize, ExpectedSid)
Definition: se.h:31
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4715
#define KernelMode
Definition: asm.h:38
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL Dacl
Definition: rtlfuncs.h:1625
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
Definition: rtlfuncs.h:1629
NTSYSAPI NTSTATUS NTAPI RtlGetSaclSecurityDescriptor(_In_ PSECURITY_DESCRIPTOR SecurityDescriptor, _Out_ PBOOLEAN SaclPresent, _Out_ PACL *Sacl, _Out_ PBOOLEAN SaclDefaulted)
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL Sacl
Definition: rtlfuncs.h:1627
NTSYSAPI NTSTATUS NTAPI RtlGetDaclSecurityDescriptor(_In_ PSECURITY_DESCRIPTOR SecurityDescriptor, _Out_ PBOOLEAN DaclPresent, _Out_ PACL *Dacl, _Out_ PBOOLEAN DaclDefaulted)
#define ACCESS_SYSTEM_SECURITY
Definition: nt_native.h:77
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define READ_CONTROL
Definition: nt_native.h:58
NTSYSAPI NTSTATUS NTAPI RtlGetGroupSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor, OUT PSID *Group, OUT PBOOLEAN GroupDefaulted)
Definition: sd.c:280
NTSYSAPI NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor, OUT PSID *Owner, OUT PBOOLEAN OwnerDefaulted)
Definition: sd.c:257
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3379
#define _WIN32_WINNT_WIN8
Definition: sdkddkver.h:29
PSE_EXPORTS SeExports
Definition: semgr.c:21
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
PSID SeAliasAdminsSid
Definition: setypes.h:1242
PSID SeLocalSystemSid
Definition: setypes.h:1241
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2705
_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:191
#define DACL_SECURITY_INFORMATION
Definition: setypes.h:125
#define OWNER_SECURITY_INFORMATION
Definition: setypes.h:123
#define GROUP_SECURITY_INFORMATION
Definition: setypes.h:124
#define SACL_SECURITY_INFORMATION
Definition: setypes.h:126

◆ CmSecurity_Vista()

static void CmSecurity_Vista ( PSID  TerminalServerSid)
static

Definition at line 260 of file CmSecurity.c.

261{
262 CheckKeySecurity(L"\\REGISTRY",
267
268 CheckKeySecurity(L"\\REGISTRY\\MACHINE",
273
274 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\HARDWARE",
279
280 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SAM",
293
294 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SECURITY",
297
298 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SOFTWARE",
311
312 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SYSTEM",
325
326 CheckKeySecurity(L"\\REGISTRY\\USER",
331
332 CheckKeySecurity(L"\\REGISTRY\\USER\\.DEFAULT",
345
346 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-18",
359
360 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-20",
369}
#define CheckKeySecurity(name, AceCount,...)
Definition: CmSecurity.c:11
#define GENERIC_READ
Definition: compat.h:135
#define L(x)
Definition: resources.c:13
#define WRITE_DAC
Definition: nt_native.h:59
#define KEY_ALL_ACCESS
Definition: nt_native.h:1044
#define KEY_READ
Definition: nt_native.h:1026
#define GENERIC_ALL
Definition: nt_native.h:92
PSID SeAliasUsersSid
Definition: setypes.h:1243
PSID SeCreatorOwnerSid
Definition: setypes.h:1234
PSID SeRestrictedSid
Definition: setypes.h:1251
PSID SeNetworkServiceSid
Definition: setypes.h:1257
PSID SeWorldSid
Definition: setypes.h:1232
#define CONTAINER_INHERIT_ACE
Definition: setypes.h:747
#define INHERIT_ONLY_ACE
Definition: setypes.h:749
#define ACCESS_ALLOWED_ACE_TYPE
Definition: setypes.h:717
#define OBJECT_INHERIT_ACE
Definition: setypes.h:746

Referenced by START_TEST().

◆ CmSecurity_Win8()

static void CmSecurity_Win8 ( PSID  TerminalServerSid)
static

Definition at line 371 of file CmSecurity.c.

372{
373 CheckKeySecurity(L"\\REGISTRY",
379
380 CheckKeySecurity(L"\\REGISTRY\\MACHINE",
386
387 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\HARDWARE",
393
394 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SAM",
400
401 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SECURITY",
404
405 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SOFTWARE",
411
412 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SYSTEM",
418
419 CheckKeySecurity(L"\\REGISTRY\\USER",
425
426 CheckKeySecurity(L"\\REGISTRY\\USER\\.DEFAULT",
432
433 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-18",
439
440 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-20",
450}
PSID SeAllAppPackagesSid
Definition: setypes.h:1274

Referenced by START_TEST().

◆ CmSecurity_WS03()

static void CmSecurity_WS03 ( PSID  TerminalServerSid)
static

Definition at line 134 of file CmSecurity.c.

135{
136 CheckKeySecurity(L"\\REGISTRY",
141
142 CheckKeySecurity(L"\\REGISTRY\\MACHINE",
147
148 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\HARDWARE",
153
154 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SAM",
159
160 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SECURITY",
163
164 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SOFTWARE",
180 ACCESS_ALLOWED_ACE_TYPE, 0, TerminalServerSid, KEY_READ | KEY_WRITE | DELETE,
183
184 CheckKeySecurity(L"\\REGISTRY\\MACHINE\\SYSTEM",
200
201 CheckKeySecurity(L"\\REGISTRY\\USER",
206
207 CheckKeySecurity(L"\\REGISTRY\\USER\\.DEFAULT",
223
224 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-18",
240
241 CheckKeySecurity(L"\\REGISTRY\\USER\\S-1-5-20",
258}
#define DELETE
Definition: nt_native.h:57
#define KEY_WRITE
Definition: nt_native.h:1034
#define GENERIC_WRITE
Definition: nt_native.h:90
PSID SeAliasPowerUsersSid
Definition: setypes.h:1245

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( CmSecurity  )

Definition at line 452 of file CmSecurity.c.

453{
455 PSID TerminalServerSid;
456
457 TerminalServerSid = ExAllocatePoolWithTag(PagedPool,
459 'iSmK');
460 if (TerminalServerSid != NULL)
461 {
462 RtlInitializeSid(TerminalServerSid, &NtSidAuthority, 1);
463 *RtlSubAuthoritySid(TerminalServerSid, 0) = SECURITY_TERMINAL_SERVER_RID;
464 }
465
466 switch (GetNTVersion())
467 {
469 CmSecurity_WS03(TerminalServerSid);
470 break;
473 CmSecurity_Vista(TerminalServerSid);
474 break;
478 CmSecurity_Win8(TerminalServerSid);
479 break;
480 default:
482 {
483 trace("Unknown NT version (0x%X < 0x%X), running WS03 tests...\n", GetNTVersion(), _WIN32_WINNT_WS03);
484 CmSecurity_WS03(TerminalServerSid);
485 }
486 else
487 {
488 trace("Unknown NT version (0x%X > 0x%X), running latest tests...\n", GetNTVersion(), _WIN32_WINNT_WIN10);
489 CmSecurity_Win8(TerminalServerSid);
490 }
491 break;
492 }
493
494 if (TerminalServerSid != NULL)
495 {
496 ExFreePoolWithTag(TerminalServerSid, 'iSmK');
497 }
498}
static void CmSecurity_WS03(PSID TerminalServerSid)
Definition: CmSecurity.c:134
static void CmSecurity_Vista(PSID TerminalServerSid)
Definition: CmSecurity.c:260
static void CmSecurity_Win8(PSID TerminalServerSid)
Definition: CmSecurity.c:371
#define trace
Definition: atltest.h:70
NTSYSAPI PULONG NTAPI RtlSubAuthoritySid(_In_ PSID Sid, _In_ ULONG SubAuthority)
NTSYSAPI ULONG NTAPI RtlLengthRequiredSid(IN ULONG SubAuthorityCount)
Definition: sid.c:54
NTSYSAPI NTSTATUS NTAPI RtlInitializeSid(IN OUT PSID Sid, IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, IN UCHAR SubAuthorityCount)
static SID_IDENTIFIER_AUTHORITY NtSidAuthority
Definition: samrpc.c:14
#define _WIN32_WINNT_WIN10
Definition: sdkddkver.h:32
#define _WIN32_WINNT_WS03
Definition: sdkddkver.h:23
#define _WIN32_WINNT_WINBLUE
Definition: sdkddkver.h:30
#define _WIN32_WINNT_WIN7
Definition: sdkddkver.h:28
#define _WIN32_WINNT_VISTA
Definition: sdkddkver.h:25
#define SECURITY_NT_AUTHORITY
Definition: setypes.h:554
#define SECURITY_TERMINAL_SERVER_RID
Definition: setypes.h:570