/*++ 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; }