|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
ctseacc.c
Abstract:
Common security accessibility test routines.
These routines are used in both the kernel and user mode RTL tests.
This test assumes the security runtime library routines are functioning correctly.
Author:
Jim Kelly (JimK) 23-Mar-1990
Environment:
Test of security.
Revision History:
v5: robertre Updated ACL_REVISION
--*/
#include "tsecomm.c" // Mode dependent macros and routines.
////////////////////////////////////////////////////////////////
// //
// Module wide variables //
// //
////////////////////////////////////////////////////////////////
NTSTATUS Status; STRING Event1Name, Process1Name; UNICODE_STRING UnicodeEvent1Name, UnicodeProcess1Name;
OBJECT_ATTRIBUTES NullObjectAttributes;
HANDLE Event1; OBJECT_ATTRIBUTES Event1ObjectAttributes; PSECURITY_DESCRIPTOR Event1SecurityDescriptor; PSID Event1Owner; PSID Event1Group; PACL Event1Dacl; PACL Event1Sacl;
PACL TDacl; BOOLEAN TDaclPresent; BOOLEAN TDaclDefaulted;
PACL TSacl; BOOLEAN TSaclPresent; BOOLEAN TSaclDefaulted;
PSID TOwner; BOOLEAN TOwnerDefaulted; PSID TGroup; BOOLEAN TGroupDefaulted;
HANDLE Process1; OBJECT_ATTRIBUTES Process1ObjectAttributes;
////////////////////////////////////////////////////////////////
// //
// Initialization Routine //
// //
////////////////////////////////////////////////////////////////
BOOLEAN TestSeInitialize() {
Event1SecurityDescriptor = (PSECURITY_DESCRIPTOR)TstAllocatePool( PagedPool, 1024 );
RtlInitString(&Event1Name, "\\SecurityTestEvent1"); Status = RtlAnsiStringToUnicodeString( &UnicodeEvent1Name, &Event1Name, TRUE ); SEASSERT_SUCCESS( NT_SUCCESS(Status) ); RtlInitString(&Process1Name, "\\SecurityTestProcess1"); Status = RtlAnsiStringToUnicodeString( &UnicodeProcess1Name, &Process1Name, TRUE ); SEASSERT_SUCCESS( NT_SUCCESS(Status) );
InitializeObjectAttributes(&NullObjectAttributes, NULL, 0, NULL, NULL);
//
// Build an ACL or two for use.
TDacl = (PACL)TstAllocatePool( PagedPool, 256 ); TSacl = (PACL)TstAllocatePool( PagedPool, 256 );
TDacl->AclRevision=TSacl->AclRevision=ACL_REVISION; TDacl->Sbz1=TSacl->Sbz1=0; TDacl->Sbz2=TSacl->Sbz2=0; TDacl->AclSize=256; TSacl->AclSize=8; TDacl->AceCount=TSacl->AceCount=0;
return TRUE; }
////////////////////////////////////////////////////////////////
// //
// Test routines //
// //
////////////////////////////////////////////////////////////////
BOOLEAN TestSeUnnamedCreate() //
// Test:
// No Security Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl Inheritence With Creator ID
// Dacl & Sacl Inheritence
//
// Empty Security Descriptor Explicitly Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Dacl Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Sacl Specified (W/Privilege)
// No Inheritence
// Dacl & Sacl Inheritence
//
// Default Dacl Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Default Sacl Specified (W/Privilege)
// No Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Sacl Specified (W/O Privilege - should be rejected)
// Default Sacl Specified (W/O Privilege - should be rejected)
//
// Valid Owner Explicitly Specified
// Invalid Owner Explicitly Specified
//
// Explicit Group Specified
//
{
BOOLEAN CompletionStatus = TRUE;
InitializeObjectAttributes(&Event1ObjectAttributes, NULL, 0, NULL, NULL); DbgPrint("Se: No Security Descriptor... Test\n"); DbgPrint("Se: No Inheritence... ");
Status = NtCreateEvent( &Event1, DELETE, &Event1ObjectAttributes, NotificationEvent, FALSE ); if (NT_SUCCESS(Status)) { DbgPrint("Succeeded.\n"); } else { DbgPrint(" **** Failed ****\n"); CompletionStatus = FALSE; } ASSERT(NT_SUCCESS(Status)); Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Dacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Sacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl Inheritence W/ Creator ID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl And Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
return CompletionStatus;
}
BOOLEAN TestSeNamedCreate() //
// Test:
// No Security Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl Inheritence With Creator ID
// Dacl & Sacl Inheritence
//
// Empty Security Descriptor Explicitly Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Dacl Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Sacl Specified (W/Privilege)
// No Inheritence
// Dacl & Sacl Inheritence
//
// Default Dacl Specified
// No Inheritence
// Dacl Inheritence
// Sacl Inheritence
// Dacl & Sacl Inheritence
//
// Default Sacl Specified (W/Privilege)
// No Inheritence
// Dacl & Sacl Inheritence
//
// Explicit Sacl Specified (W/O Privilege - should be rejected)
// Default Sacl Specified (W/O Privilege - should be rejected)
//
// Valid Owner Explicitly Specified
// Invalid Owner Explicitly Specified
//
// Explicit Group Specified
//
{
BOOLEAN CompletionStatus = TRUE;
InitializeObjectAttributes( &Event1ObjectAttributes, &UnicodeEvent1Name, 0, NULL, NULL);
DbgPrint("Se: No Security Specified... Test\n"); DbgPrint("Se: No Inheritence... "); Status = NtCreateEvent( &Event1, DELETE, &Event1ObjectAttributes, NotificationEvent, FALSE ); if (NT_SUCCESS(Status)) { DbgPrint("Succeeded.\n"); } else { DbgPrint(" **** Failed ****\n"); CompletionStatus = FALSE; } ASSERT(NT_SUCCESS(Status)); Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Dacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Sacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl Inheritence With Creator ID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Empty Security Descriptor Explicitly Specified... Test\n"); DbgPrint("Se: No Inheritence... ");
RtlCreateSecurityDescriptor( Event1SecurityDescriptor, 1 ); InitializeObjectAttributes(&Event1ObjectAttributes, &UnicodeEvent1Name, 0, NULL, Event1SecurityDescriptor); Status = NtCreateEvent( &Event1, DELETE, &Event1ObjectAttributes, NotificationEvent, FALSE ); if (NT_SUCCESS(Status)) { DbgPrint("Succeeded.\n"); } else { DbgPrint(" **** Failed ****\n"); CompletionStatus = FALSE; } ASSERT(NT_SUCCESS(Status)); Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Dacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Sacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Explicit Dacl Specified... Test\n"); DbgPrint("Se: No Inheritence... ");
RtlCreateSecurityDescriptor( Event1SecurityDescriptor, 1 ); RtlSetDaclSecurityDescriptor( Event1SecurityDescriptor, TRUE, TDacl, FALSE );
InitializeObjectAttributes(&Event1ObjectAttributes, &UnicodeEvent1Name, 0, NULL, Event1SecurityDescriptor); Status = NtCreateEvent( &Event1, DELETE, &Event1ObjectAttributes, NotificationEvent, FALSE ); if (NT_SUCCESS(Status)) { DbgPrint("Succeeded.\n"); } else { DbgPrint(" **** Failed ****\n"); CompletionStatus = FALSE; } ASSERT(NT_SUCCESS(Status)); Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Dacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Sacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Explicit Sacl Specified (W/Privilege)... Test\n"); DbgPrint("Se: No Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Default Dacl Specified... Test\n"); DbgPrint("Se: No Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Sacl Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Default Sacl (W/Privilege)... Test\n"); DbgPrint("Se: No Inheritence... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Dacl & Sacl Inheritence... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Explicit Sacl (W/O Privilege)... Test\n"); DbgPrint(" "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Default Sacl (W/O Privilege)... Test\n"); DbgPrint(" "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Valid Owner Explicitly Specified... Test\n"); DbgPrint(" "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Invalid Owner Explicitly Specified... Test\n"); DbgPrint(" "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Explicit Group Specified... Test\n"); DbgPrint(" "); DbgPrint(" Not Implemented.\n");
return CompletionStatus;
}
BOOLEAN TestSeQuerySecurity() //
// Test:
// No Security Descriptor
// Query Owner
// Query Group
// Query Dacl
// Query Sacl (Privileged)
// Query Sacl (Unprivileged - should be rejected)
//
// Empty Security Descriptor
// Query Owner
// Query Group
// Query Dacl
// Query Sacl (Privileged)
// Query Sacl (Unprivileged - should be rejected)
//
// Security Descriptor W/ Owner & Group
// Query Owner
// Query Group
// Query Dacl
// Query Sacl (Privileged)
// Query Sacl (Unprivileged - should be rejected)
//
// Full Security Descriptor
// Query Owner
// Query Group
// Query Dacl
// Query Sacl (Privileged)
// Query Sacl (Unprivileged - should be rejected)
//
{
BOOLEAN CompletionStatus = TRUE;
DbgPrint(" "); DbgPrint(" Not Implemented.\n");
#if 0
DbgPrint("Se: No Security Descriptor... \n"); DbgPrint("Se: Query Owner... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Dacl... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Unprivileged)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Empty Security Descriptor... \n"); DbgPrint("Se: Query Owner... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Dacl... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Unprivileged)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Security Descriptor W/ Owner & Group... \n"); DbgPrint("Se: Query Owner... "); DbgPrint(" Not Implemented. \n"); DbgPrint("Se: Query Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Dacl... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Unprivileged)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Full Security Descriptor...\n"); DbgPrint("Se: Query Owner... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Dacl... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Query Sacl (Unprivileged)... "); DbgPrint(" Not Implemented.\n"); #endif //0
return CompletionStatus; }
BOOLEAN TestSeSetSecurity() //
// Test:
// No Security Descriptor
// Set Valid Owner SID
// Set Invalid Owner SID
// Set Group
// Set Dacl (explicitly granted by dacl)
// Set Dacl (by virtue of ownership)
// Set Dacl (invalid attempt)
// Set Sacl (privileged)
// Set Sacl (unprivileged - should be rejected)
//
// Empty Security Descriptor
// Set Valid Owner SID
// Set Invalid Owner SID
// Set Group
// Set Dacl (explicitly granted by dacl)
// Set Dacl (by virtue of ownership)
// Set Dacl (invalid attempt)
// Set Sacl (privileged)
// Set Sacl (unprivileged - should be rejected)
//
// Security Descriptor W/ Owner & Group Only
// Set Valid Owner SID
// Set Invalid Owner SID
// Set Group
// Set Dacl (explicitly granted by dacl)
// Set Dacl (by virtue of ownership)
// Set Dacl (invalid attempt)
// Set Sacl (privileged)
// Set Sacl (unprivileged - should be rejected)
//
// Full Security Descriptor
// Set Valid Owner SID
// Set Invalid Owner SID
// Set Group
// Set Dacl (explicitly granted by dacl)
// Set Dacl (by virtue of ownership)
// Set Dacl (invalid attempt)
// Set Sacl (privileged)
// Set Sacl (unprivileged - should be rejected)
//
{
BOOLEAN CompletionStatus = TRUE;
DbgPrint(" "); DbgPrint(" Not Implemented.\n"); #if 0
DbgPrint("Se: No Security Descriptor...\n"); DbgPrint("Se: Set Valid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Invalid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (explicitly granted by dacl)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (by virtue of ownership)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (invalid attempt)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (unprivileged - should be rejected)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Empty Security Descriptor...\n"); DbgPrint("Se: Set Valid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Invalid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (explicitly granted by dacl)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (by virtue of ownership)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (invalid attempt)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (unprivileged - should be rejected)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Security Descriptor W/ Owner & Group Only...\n"); DbgPrint("Se: Set Valid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Invalid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (explicitly granted by dacl)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (by virtue of ownership)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (invalid attempt)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (unprivileged - should be rejected)... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Full Security Descriptor...\n"); DbgPrint("Se: Set Valid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Invalid Owner SID... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Group... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (explicitly granted by dacl)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (by virtue of ownership)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Dacl (invalid attempt)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (privileged)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Set Sacl (unprivileged - should be rejected)... "); DbgPrint(" Not Implemented.\n");
#endif //0
return CompletionStatus;
}
BOOLEAN TestSeAccess() //
// Test:
//
// Creation
// No Access Requested (should be rejected)
// Specific Access Requested
// - Attempted Granted
// - Attempt Ungranted
// Access System Security
//
// Open Existing
// No Access Requested (should be rejected)
// Specific Access Requested
// - Attempted Granted
// - Attempt Ungranted
// Access System Security
//
{ BOOLEAN CompletionStatus = TRUE;
DbgPrint(" "); DbgPrint(" Not Implemented.\n"); #if 0
DbgPrint("Se: Creation...\n"); DbgPrint("Se: No Access Requested (should be rejected)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Specific Access Requested... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: - Attempted Granted... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: - Attempt Ungranted... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Access System Security... "); DbgPrint(" Not Implemented.\n");
DbgPrint("Se: Open Existing...\n"); DbgPrint("Se: No Access Requested (should be rejected)... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Specific Access Requested... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: - Attempted Granted... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: - Attempt Ungranted... "); DbgPrint(" Not Implemented.\n"); DbgPrint("Se: Access System Security... "); DbgPrint(" Not Implemented.\n"); #endif //0
#if 0 //old code
// Without security descriptor
// Simple desired access mask...
//
DbgPrint("Se: Test1b... \n"); // Attempt ungranted access
Status = NtSetEvent( Event1, NULL ); ASSERT(!NT_SUCCESS(Status));
DbgPrint("Se: Test1c... \n"); // Delete object
Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
//
// Without security descriptor
// Simple desired access mask...
//
DbgPrint("Se: Test2a... \n"); // unnamed object, specific access
Status = NtCreateEvent( &Event1, (EVENT_MODIFY_STATE | STANDARD_DELETE), &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test2b... \n"); // Attempt granted specific access
Status = NtSetEvent( Event1, NULL ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test2c... \n"); // Delete object
//
// Without security descriptor
// Generic desired access mask...
//
DbgPrint("Se: Test3a... \n"); // Unnamed object, generic mask
Status = NtCreateEvent( &Event1, GENERIC_EXECUTE, &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test3b... \n"); // Attempt implied granted access
Status = NtSetEvent( Event1, NULL ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test3c... \n"); // Delete object
Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
//
// Without security descriptor
// Empty desired access mask...
//
DbgPrint("Se: Test4a... \n"); // Empty desired access
Status = NtCreateEvent( &Event1, 0, &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(!NT_SUCCESS(Status));
RtlCreateSecurityDescriptor( Event1SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION); InitializeObjectAttributes(&Event1ObjectAttributes, NULL, 0, NULL, Event1SecurityDescriptor); DbgPrint("Se: Empty Security Descriptor... \n");
//
// Without security descriptor
// Simple desired access mask...
//
DbgPrint("Se: Test1a... \n"); // Create unnamed object
Status = NtCreateEvent( &Event1, STANDARD_DELETE, &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test1b... \n"); // Attempt ungranted access
Status = NtSetEvent( Event1, NULL ); ASSERT(!NT_SUCCESS(Status));
DbgPrint("Se: Test1c... \n"); // Delete object
Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
//
// Without security descriptor
// Simple desired access mask...
//
DbgPrint("Se: Test2a... \n"); // unnamed object, specific access
Status = NtCreateEvent( &Event1, (EVENT_MODIFY_STATE | STANDARD_DELETE), &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test2b... \n"); // Attempt granted specific access
Status = NtSetEvent( Event1, NULL ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test2c... \n"); // Delete object
Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
//
// Without security descriptor
// Generic desired access mask...
//
DbgPrint("Se: Test3a... \n"); // Unnamed object, generic mask
Status = NtCreateEvent( &Event1, GENERIC_EXECUTE, &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test3b... \n"); // Attempt implied granted access
Status = NtSetEvent( Event1, NULL ); ASSERT(NT_SUCCESS(Status));
DbgPrint("Se: Test3c... \n"); // Delete object
Status = NtClose(Event1); ASSERT(NT_SUCCESS(Status));
//
// Without security descriptor
// Empty desired access mask...
//
DbgPrint("Se: Test4a... \n"); // Empty desired access
Status = NtCreateEvent( &Event1, 0, &Event1ObjectAttributes, NotificationEvent, FALSE ); ASSERT(!NT_SUCCESS(Status)); #endif // old code
return CompletionStatus; }
BOOLEAN TSeAcc() { BOOLEAN Result = TRUE;
DbgPrint("Se: Initialization... "); TestSeInitialize(); DbgPrint("Succeeded.\n");
DbgPrint("Se: Unnamed Object Creation Test... Suite\n"); if (!TestSeUnnamedCreate()) { Result = FALSE; } DbgPrint("Se: Named Object Creation Test... Suite\n"); if (!TestSeNamedCreate()) { Result = FALSE; } DbgPrint("Se: Query Object Security Descriptor Test... Suite\n"); if (!TestSeQuerySecurity()) { Result = FALSE; } DbgPrint("Se: Set Object Security Descriptor Test... Suite\n"); if (!TestSeSetSecurity()) { Result = FALSE; } DbgPrint("Se: Access Test... Suite\n"); if (!TestSeAccess()) { Result = FALSE; }
DbgPrint("\n"); DbgPrint("\n"); DbgPrint(" ********************\n"); DbgPrint(" ** **\n");
if (Result = TRUE) { DbgPrint(" ** Test Succeeded **\n"); } else { DbgPrint(" ** Test Failed **\n"); }
DbgPrint(" ** **\n"); DbgPrint(" ********************\n"); DbgPrint("\n"); DbgPrint("\n");
return Result; }
|