Add SEH to more functions, clean up some things, initialize profiling
stuff (not yet enabled), and fix Registry Object re/defrecenging bug
(Jim -- please retest). Thanks to Thomas for Security fixes and
Iocompletion SEH + CM fix.
Modified: branches/alex_devel_branch/reactos/include/ddk/setypes.h
Modified: branches/alex_devel_branch/reactos/include/ntos/security.h
Modified: branches/alex_devel_branch/reactos/ntoskrnl/cm/regobj.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/event.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/evtpair.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/mutant.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/profile.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/sem.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/timer.c
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ob.h
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/se.h
Modified: branches/alex_devel_branch/reactos/ntoskrnl/io/iocomp.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/kd/kdebug.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/profile.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ob/object.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ps/thread.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/se/acl.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/se/luid.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/se/sd.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/se/sid.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/se/token.c
Modified: branches/alex_devel_branch/reactos/w32api/include/ddk/ntifs.h
Modified: branches/alex_devel_branch/reactos/w32api/include/winnt.h
_____
Modified: branches/alex_devel_branch/reactos/include/ddk/setypes.h
--- branches/alex_devel_branch/reactos/include/ddk/setypes.h
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/include/ddk/setypes.h
2005-03-04 20:56:32 UTC (rev 13821)
@@ -98,37 +98,36 @@
} SEP_AUDIT_POLICY, *PSEP_AUDIT_POLICY;
typedef struct _TOKEN {
- TOKEN_SOURCE TokenSource; /* 0x00 */
- LUID TokenId; /* 0x10 */
- LUID AuthenticationId; /* 0x18 */
- LUID ParentTokenId; /* 0x20 */
- LARGE_INTEGER ExpirationTime; /* 0x28 */
- struct _ERESOURCE *TokenLock; /* 0x30 */
- ULONG Padding; /* 0x34 */
- SEP_AUDIT_POLICY AuditPolicy; /* 0x38 */
- LUID ModifiedId; /* 0x40 */
- ULONG SessionId; /* 0x48 */
- ULONG UserAndGroupCount; /*
0x4C */
- ULONG RestrictedSidCount; /* 0x50 */
- ULONG PrivilegeCount; /*
0x54 */
- ULONG VariableLength; /*
0x58 */
- ULONG DynamicCharged; /*
0x5C */
- ULONG DynamicAvailable; /*
0x60 */
- ULONG DefaultOwnerIndex; /*
0x64 */
- PSID_AND_ATTRIBUTES UserAndGroups; /* 0x68 */
- PSID_AND_ATTRIBUTES RestrictedSids; /* 0x6C */
- PSID PrimaryGroup; /* 0x70 */
- PLUID_AND_ATTRIBUTES Privileges; /* 0x74 */
- PULONG DynamicPart; /* 0x78 */
- PACL DefaultDacl; /* 0x7C */
- TOKEN_TYPE TokenType; /* 0x80 */
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x84 */
- ULONG TokenFlags; /*
0x88 */
- ULONG TokenInUse; /* 0x8C
*/
- PVOID ProxyData; /*
0x90 */
- PVOID AuditData; /*
0x94 */
- LUID OriginatingLogonSession; /* 0x98 */
- UCHAR VariablePart[1]; /*
0xA0 */
+ TOKEN_SOURCE TokenSource; /* 0x00 */
+ LUID TokenId; /* 0x10 */
+ LUID AuthenticationId; /* 0x18 */
+ LUID ParentTokenId; /* 0x20 */
+ LARGE_INTEGER ExpirationTime; /* 0x28 */
+ struct _ERESOURCE *TokenLock; /* 0x30 */
+ SEP_AUDIT_POLICY AuditPolicy; /* 0x38 */
+ LUID ModifiedId; /* 0x40 */
+ ULONG SessionId; /* 0x48 */
+ ULONG UserAndGroupCount; /* 0x4C */
+ ULONG RestrictedSidCount; /* 0x50 */
+ ULONG PrivilegeCount; /* 0x54 */
+ ULONG VariableLength; /* 0x58 */
+ ULONG DynamicCharged; /* 0x5C */
+ ULONG DynamicAvailable; /* 0x60 */
+ ULONG DefaultOwnerIndex; /* 0x64 */
+ PSID_AND_ATTRIBUTES UserAndGroups; /* 0x68 */
+ PSID_AND_ATTRIBUTES RestrictedSids; /* 0x6C */
+ PSID PrimaryGroup; /* 0x70 */
+ PLUID_AND_ATTRIBUTES Privileges; /* 0x74 */
+ PULONG DynamicPart; /* 0x78 */
+ PACL DefaultDacl; /* 0x7C */
+ TOKEN_TYPE TokenType; /* 0x80 */
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x84 */
+ ULONG TokenFlags; /* 0x88 */
+ BOOLEAN TokenInUse; /* 0x8C */
+ PVOID ProxyData; /* 0x90 */
+ PVOID AuditData; /* 0x94 */
+ LUID OriginatingLogonSession; /* 0x98 */
+ ULONG VariablePart; /* 0xA0 */
} TOKEN, *PTOKEN;
typedef PVOID PACCESS_TOKEN;
_____
Modified: branches/alex_devel_branch/reactos/include/ntos/security.h
--- branches/alex_devel_branch/reactos/include/ntos/security.h
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/include/ntos/security.h
2005-03-04 20:56:32 UTC (rev 13821)
@@ -153,8 +153,9 @@
#define TOKEN_ADJUST_PRIVILEGES (0x0020L)
#define TOKEN_ADJUST_GROUPS (0x0040L)
#define TOKEN_ADJUST_DEFAULT (0x0080L)
+#define TOKEN_ADJUST_SESSIONID (0x0100L)
-#define TOKEN_ALL_ACCESS (0xf00ffL)
+#define TOKEN_ALL_ACCESS (0xf01ffL)
#define TOKEN_READ (0x20008L)
#define TOKEN_WRITE (0x200e0L)
#define TOKEN_EXECUTE (0x20000L)
@@ -339,6 +340,20 @@
SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
} TOKEN_GROUPS, *PTOKEN_GROUPS, *LPTOKEN_GROUPS;
+typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
+{
+ ULONG SidCount;
+ ULONG SidLength;
+ PSID_AND_ATTRIBUTES Sids;
+ ULONG RestrictedSidCount;
+ ULONG RestrictedSidLength;
+ PSID_AND_ATTRIBUTES RestrictedSids;
+ ULONG PrivilegeCount;
+ ULONG PrivilegeLength;
+ PLUID_AND_ATTRIBUTES Privileges;
+ LUID AuthenticationId;
+} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
+
typedef struct _TOKEN_PRIVILEGES
{
DWORD PrivilegeCount;
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/cm/regobj.c
--- branches/alex_devel_branch/reactos/ntoskrnl/cm/regobj.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/cm/regobj.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -212,11 +212,6 @@
return(STATUS_REPARSE);
}
}
-
- ObReferenceObjectByPointer(FoundObject,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
- UserMode);
}
DPRINT("CmiObjectParse: %s\n", FoundObject->Name);
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/event.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/event.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/event.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -1,11 +1,11 @@
-/* $Id:$
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/nt/event.c
* PURPOSE: Named event support
*
- * PROGRAMMERS: Philip Susi and David Welch
+ * PROGRAMMERS: Alex Ionescu(alex(a)relsoft.net) - Fixed
bugs/commented
+ * Philip Susi and David Welch
*/
/* INCLUDES
*****************************************************************/
@@ -38,7 +38,7 @@
{
/* Create the Event Object Type */
ExEventObjectType =
ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
- RtlpCreateUnicodeString(&ExEventObjectType->TypeName, L"Event",
NonPagedPool);
+ RtlInitUnicodeString(&ExEventObjectType->TypeName, L"Event");
ExEventObjectType->Tag = TAG('E', 'V', 'T', 'T');
ExEventObjectType->PeakObjects = 0;
ExEventObjectType->PeakHandles = 0;
@@ -73,14 +73,14 @@
PAGED_CODE();
/* Reference the Object */
- Status = ObReferenceObjectByHandle(EventHandle,
- EVENT_MODIFY_STATE,
- ExEventObjectType,
- ExGetPreviousMode(),
- (PVOID*)&Event,
- NULL);
+ Status = ObReferenceObjectByHandle(EventHandle,
+ EVENT_MODIFY_STATE,
+ ExEventObjectType,
+ ExGetPreviousMode(),
+ (PVOID*)&Event,
+ NULL);
- /* Check for Success */
+ /* Check for Success */
if(NT_SUCCESS(Status)) {
/* Clear the Event and Dereference */
@@ -110,9 +110,10 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
+ DPRINT("NtCreateEvent(0x%x, 0x%x, 0x%x)\n", EventHandle,
DesiredAccess, ObjectAttributes);
/* Check Output Safety */
- if(PreviousMode == UserMode) {
+ if(PreviousMode != KernelMode) {
_SEH_TRY {
@@ -188,11 +189,11 @@
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
- PAGED_CODE();
+ PAGED_CODE();
DPRINT("NtOpenEvent(0x%x, 0x%x, 0x%x)\n", EventHandle,
DesiredAccess, ObjectAttributes);
/* Check Output Safety */
- if(PreviousMode == UserMode) {
+ if(PreviousMode != KernelMode) {
_SEH_TRY {
@@ -315,10 +316,13 @@
OUT PULONG ReturnLength OPTIONAL)
{
PKEVENT Event;
- KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
PEVENT_BASIC_INFORMATION BasicInfo =
(PEVENT_BASIC_INFORMATION)EventInformation;
+ PAGED_CODE();
+ DPRINT("NtQueryEvent(0x%x, 0x%x, 0x%x)\n", EventHandle,
EventInformationClass);
+
/* Check buffers and class validity */
DefaultQueryInfoBufferCheck(EventInformationClass,
ExEventInfoClass,
@@ -381,7 +385,6 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
DPRINT("NtResetEvent(EventHandle 0%x PreviousState 0%x)\n",
EventHandle, PreviousState);
@@ -449,10 +452,9 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
+ DPRINT("NtSetEvent(EventHandle 0%x PreviousState 0%x)\n",
+ EventHandle, PreviousState);
- DPRINT1("NtSetEvent(EventHandle 0%x PreviousState 0%x)\n",
- EventHandle, PreviousState);
-
/* Check buffer validity */
if(PreviousState != NULL && PreviousMode == UserMode) {
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/evtpair.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/evtpair.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/evtpair.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -4,7 +4,8 @@
* FILE: ntoskrnl/ex/evtpair.c
* PURPOSE: Support for event pairs
*
- * PROGRAMMERS: Alex Ionescu (Commented, reorganized, removed
Thread Pair, used KeInitializeEventPair, added SEH)
+ * PROGRAMMERS: Alex Ionescu (Commented, reorganized, removed
Thread Pair, used
+ * KeInitializeEventPair, added SEH)
* David Welch (welch(a)mcmail.com)
* Skywing (skywing(a)valhallalegends.com)
*/
@@ -34,7 +35,7 @@
{
/* Create the Event Pair Object Type */
ExEventPairObjectType =
ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
- RtlpCreateUnicodeString(&ExEventPairObjectType->TypeName,
L"EventPair", NonPagedPool);
+ RtlInitUnicodeString(&ExEventPairObjectType->TypeName,
L"EventPair");
ExEventPairObjectType->Tag = TAG('E', 'v', 'P',
'a');
ExEventPairObjectType->PeakObjects = 0;
ExEventPairObjectType->PeakHandles = 0;
@@ -67,7 +68,8 @@
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
- DPRINT1("NtCreateEventPair: %x\n", EventPairHandle);
+ PAGED_CODE();
+ DPRINT("NtCreateEventPair: %x\n", EventPairHandle);
/* Check Output Safety */
if(PreviousMode == UserMode) {
@@ -87,7 +89,7 @@
}
/* Create the Object */
- DPRINT1("Creating EventPair\n");
+ DPRINT("Creating EventPair\n");
Status = ObCreateObject(PreviousMode,
ExEventPairObjectType,
ObjectAttributes,
@@ -102,7 +104,7 @@
if(NT_SUCCESS(Status)) {
/* Initalize the Event */
- DPRINT1("Initializing EventPair\n");
+ DPRINT("Initializing EventPair\n");
KeInitializeEventPair(EventPair);
/* Insert it */
@@ -133,7 +135,6 @@
return Status;
}
-
NTSTATUS
STDCALL
NtOpenEventPair(OUT PHANDLE EventPairHandle,
@@ -143,6 +144,8 @@
HANDLE hEventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
+
+ PAGED_CODE();
/* Check Output Safety */
if(PreviousMode == UserMode) {
@@ -196,8 +199,9 @@
PKEVENT_PAIR EventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
-
- DPRINT1("NtSetHighEventPair(EventPairHandle %x)\n",
EventPairHandle);
+
+ PAGED_CODE();
+ DPRINT("NtSetHighEventPair(EventPairHandle %x)\n",
EventPairHandle);
/* Open the Object */
Status = ObReferenceObjectByHandle(EventPairHandle,
@@ -221,7 +225,6 @@
return Status;
}
-
NTSTATUS
STDCALL
NtSetHighWaitLowEventPair(IN HANDLE EventPairHandle)
@@ -229,9 +232,10 @@
PKEVENT_PAIR EventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
-
- DPRINT1("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+ PAGED_CODE();
+ DPRINT("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+
/* Open the Object */
Status = ObReferenceObjectByHandle(EventPairHandle,
SYNCHRONIZE,
@@ -266,8 +270,12 @@
NtSetLowEventPair(IN HANDLE EventPairHandle)
{
PKEVENT_PAIR EventPair;
- KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+ KPROCESSOR_MODE PreviousMode;
NTSTATUS Status;
+
+ PAGED_CODE();
+
+ PreviousMode = ExGetPreviousMode();
DPRINT1("NtSetHighEventPair(EventPairHandle %x)\n",
EventPairHandle);
@@ -300,9 +308,10 @@
PKEVENT_PAIR EventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
-
- DPRINT1("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+ PAGED_CODE();
+ DPRINT("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+
/* Open the Object */
Status = ObReferenceObjectByHandle(EventPairHandle,
SYNCHRONIZE,
@@ -340,9 +349,10 @@
PKEVENT_PAIR EventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
-
- DPRINT1("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+ PAGED_CODE();
+ DPRINT("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+
/* Open the Object */
Status = ObReferenceObjectByHandle(EventPairHandle,
SYNCHRONIZE,
@@ -376,9 +386,10 @@
PKEVENT_PAIR EventPair;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
-
- DPRINT1("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+ PAGED_CODE();
+ DPRINT("NtSetHighWaitLowEventPair(EventPairHandle %x)\n",
EventPairHandle);
+
/* Open the Object */
Status = ObReferenceObjectByHandle(EventPairHandle,
SYNCHRONIZE,
@@ -386,7 +397,7 @@
PreviousMode,
(PVOID*)&EventPair,
NULL);
-
+
/* Check for Success */
if(NT_SUCCESS(Status)) {
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -27,6 +27,9 @@
extern ULONG_PTR LastKernelAddress;
extern LOADER_MODULE KeLoaderModules[64];
extern PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages;
+extern LIST_ENTRY KiProfileListHead;
+extern LIST_ENTRY KiProfileSourceListHead;
+extern KSPIN_LOCK KiProfileLock;
/* FUNCTIONS
****************************************************************/
@@ -408,13 +411,18 @@
/* Initialize the kernel debugger */
KdInitSystem (1, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
-
+
/* Initialize the Dispatcher, Clock and Bug Check Mechanisms. */
KeInit2();
/* Bring back the IRQL to Passive */
KeLowerIrql(PASSIVE_LEVEL);
+ /* Initialize Profiling */
+ InitializeListHead(&KiProfileListHead);
+ InitializeListHead(&KiProfileSourceListHead);
+ KeInitializeSpinLock(&KiProfileLock);
+
/* Cache the Bugcheck Message Strings. Prepare the Lookup Data */
ResourceInfo.Type = 11;
ResourceInfo.Name = 1;
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/mutant.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/mutant.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/mutant.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -4,8 +4,7 @@
* FILE: ntoskrnl/ex/mutant.c
* PURPOSE: Executive Management of Mutants
*
- * PROGRAMMERS:
- * Alex Ionescu - Fix tab/space mismatching, tiny
fixes to query function and
+ * PROGRAMMERS: Alex Ionescu - Fix tab/space mismatching, tiny
fixes to query function and
* add more debug output.
* David Welch (welch(a)cwcom.net)
*/
@@ -55,7 +54,7 @@
ExMutantObjectType = ExAllocatePoolWithTag(NonPagedPool,
sizeof(OBJECT_TYPE), TAG('M', 't', 'n', 't'));
/* Create the Object Type */
- RtlpCreateUnicodeString(&ExMutantObjectType->TypeName, L"Mutant",
NonPagedPool);
+ RtlInitUnicodeString(&ExMutantObjectType->TypeName, L"Mutant");
ExMutantObjectType->Tag = TAG('M', 't', 'n',
't');
ExMutantObjectType->PeakObjects = 0;
ExMutantObjectType->PeakHandles = 0;
@@ -92,6 +91,7 @@
PKMUTANT Mutant;
NTSTATUS Status = STATUS_SUCCESS;
+ PAGED_CODE();
DPRINT("NtCreateMutant(0x%x, 0x%x, 0x%x)\n", MutantHandle,
DesiredAccess, ObjectAttributes);
/* Check Output Safety */
@@ -157,7 +157,6 @@
return Status;
}
-
/*
* @implemented
*/
@@ -171,8 +170,7 @@
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
- PAGED_CODE();
-
+ PAGED_CODE();
DPRINT("NtOpenMutant(0x%x, 0x%x, 0x%x)\n", MutantHandle,
DesiredAccess, ObjectAttributes);
/* Check Output Safety */
@@ -235,6 +233,8 @@
NTSTATUS Status = STATUS_SUCCESS;
PMUTANT_BASIC_INFORMATION BasicInfo =
(PMUTANT_BASIC_INFORMATION)MutantInformation;
+ PAGED_CODE();
+
/* Check buffers and parameters */
DefaultQueryInfoBufferCheck(MutantInformationClass,
ExMutantInfoClass,
@@ -245,11 +245,9 @@
&Status);
if(!NT_SUCCESS(Status)) {
- DPRINT1("NtQueryMutant() failed, Status: 0x%x\n", Status);
+ DPRINT("NtQueryMutant() failed, Status: 0x%x\n", Status);
return Status;
}
-
- PAGED_CODE();
/* Open the Object */
Status = ObReferenceObjectByHandle(MutantHandle,
@@ -264,7 +262,7 @@
_SEH_TRY {
/* Fill out the Basic Information Requested */
- DPRINT1("Returning Mutant Information\n");
+ DPRINT("Returning Mutant Information\n");
BasicInfo->CurrentCount = KeReadStateMutant(Mutant);
BasicInfo->OwnedByCaller = (Mutant->OwnerThread ==
KeGetCurrentThread());
BasicInfo->AbandonedState = Mutant->Abandoned;
@@ -300,7 +298,6 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
DPRINT("NtReleaseMutant(MutantHandle 0%x PreviousCount 0%x)\n",
MutantHandle,
PreviousCount);
@@ -333,9 +330,11 @@
/* Check for Success and release if such */
if(NT_SUCCESS(Status)) {
+ LONG Prev;
+
/* Save the Old State */
- DPRINT1("Releasing Mutant\n");
- LONG Prev = KeReleaseMutant(Mutant, MUTANT_INCREMENT, FALSE,
FALSE);
+ DPRINT("Releasing Mutant\n");
+ Prev = KeReleaseMutant(Mutant, MUTANT_INCREMENT, FALSE, FALSE);
ObDereferenceObject(Mutant);
/* Return it */
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/profile.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/profile.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/profile.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -80,7 +80,7 @@
/* Create the Object Type */
ExProfileObjectType =
ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
- RtlpCreateUnicodeString(&ExProfileObjectType->TypeName, L"Profile",
NonPagedPool);
+ RtlInitUnicodeString(&ExProfileObjectType->TypeName, L"Profile");
ExProfileObjectType->Tag = TAG('P', 'R', 'O',
'F');
ExProfileObjectType->PeakObjects = 0;
ExProfileObjectType->PeakHandles = 0;
@@ -121,7 +121,7 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
+
/* Easy way out */
if(BufferSize == 0) return STATUS_INVALID_PARAMETER_7;
@@ -234,9 +234,9 @@
OUT PLARGE_INTEGER PerformanceFrequency
OPTIONAL)
{
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+ LARGE_INTEGER PerfFrequency;
NTSTATUS Status = STATUS_SUCCESS;
- LARGE_INTEGER PerfFrequency;
-
+
/* Check the Parameters for validity */
if(PreviousMode != KernelMode) {
@@ -287,7 +287,7 @@
NTSTATUS Status;
PAGED_CODE();
-
+
/* Get the Object */
Status = ObReferenceObjectByHandle(ProfileHandle,
PROFILE_CONTROL,
@@ -405,9 +405,9 @@
NtQueryIntervalProfile(IN KPROFILE_SOURCE ProfileSource,
OUT PULONG Interval)
{
- KPROCESSOR_MODE PreviousMode= ExGetPreviousMode();
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+ ULONG ReturnInterval;
NTSTATUS Status = STATUS_SUCCESS;
- ULONG ReturnInterval;
PAGED_CODE();
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/sem.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/sem.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/sem.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -37,7 +37,7 @@
/* Create the Semaphore Object */
ExSemaphoreObjectType = ExAllocatePool(NonPagedPool,
sizeof(OBJECT_TYPE));
- RtlpCreateUnicodeString(&ExSemaphoreObjectType->TypeName,
L"Semaphore", NonPagedPool);
+ RtlInitUnicodeString(&ExSemaphoreObjectType->TypeName,
L"Semaphore");
ExSemaphoreObjectType->Tag = TAG('S', 'E', 'M',
'T');
ExSemaphoreObjectType->PeakObjects = 0;
ExSemaphoreObjectType->PeakHandles = 0;
@@ -78,7 +78,7 @@
PAGED_CODE();
/* Check Output Safety */
- if(PreviousMode == UserMode) {
+ if(PreviousMode != KernelMode) {
_SEH_TRY {
@@ -148,7 +148,6 @@
return Status;
}
-
/*
* @implemented
*/
@@ -221,11 +220,10 @@
{
PKSEMAPHORE Semaphore;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
- PSEMAPHORE_BASIC_INFORMATION BasicInfo =
(PSEMAPHORE_BASIC_INFORMATION)SemaphoreInformation;
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
+
/* Check buffers and class validity */
DefaultQueryInfoBufferCheck(SemaphoreInformationClass,
ExSemaphoreInfoClass,
@@ -254,7 +252,9 @@
_SEH_TRY {
- /* Return the basic information */
+ PSEMAPHORE_BASIC_INFORMATION BasicInfo =
(PSEMAPHORE_BASIC_INFORMATION)SemaphoreInformation;
+
+ /* Return the basic information */
BasicInfo->CurrentCount = KeReadStateSemaphore(Semaphore);
BasicInfo->MaximumCount = Semaphore->Limit;
@@ -284,12 +284,12 @@
IN LONG ReleaseCount,
OUT PLONG PreviousCount OPTIONAL)
{
- KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PKSEMAPHORE Semaphore;
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
+
/* Check buffer validity */
if(PreviousCount != NULL && PreviousMode == UserMode) {
_____
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/timer.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/timer.c
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/timer.c
2005-03-04 20:56:32 UTC (rev 13821)
@@ -1,5 +1,4 @@
-/* $Id: nttimer.c 12779 2005-01-04 04:45:00Z gdalsnes $
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ex/timer.c
@@ -124,9 +123,9 @@
PVOID* SystemArguemnt2)
{
PETIMER Timer;
+ KIRQL OldIrql;
PETHREAD CurrentThread = PsGetCurrentThread();
- KIRQL OldIrql;
-
+
/* We need to find out which Timer we are */
Timer = CONTAINING_RECORD(Apc, ETIMER, TimerApc);
DPRINT("ExpTimerApcKernelRoutine(Apc: %x. Timer: %x)\n", Apc,
Timer);
@@ -176,7 +175,7 @@
ExTimerType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
/* Create the Executive Timer Object */
- RtlpCreateUnicodeString(&ExTimerType->TypeName, L"Timer",
NonPagedPool);
+ RtlInitUnicodeString(&ExTimerType->TypeName, L"Timer");
ExTimerType->Tag = TAG('T', 'I', 'M', 'T');
ExTimerType->PeakObjects = 0;
ExTimerType->PeakHandles = 0;
@@ -209,7 +208,7 @@
OUT PBOOLEAN CurrentState OPTIONAL)
{
PETIMER Timer;
- KPROCESSOR_MODE PreviousMode;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
BOOLEAN State;
KIRQL OldIrql;
PETHREAD TimerThread;
@@ -217,9 +216,6 @@
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
- PreviousMode = ExGetPreviousMode();
-
DPRINT("NtCancelTimer(0x%x, 0x%x)\n", TimerHandle, CurrentState);
/* Check Parameter Validity */
@@ -301,10 +297,15 @@
/* Make sure it's safe to write to the handle */
if(CurrentState != NULL) {
+
_SEH_TRY {
+
*CurrentState = State;
+
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
}
}
@@ -323,28 +324,27 @@
{
PETIMER Timer;
HANDLE hTimer;
- KPROCESSOR_MODE PreviousMode;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
- PreviousMode = ExGetPreviousMode();
-
DPRINT("NtCreateTimer(Handle: %x, Type: %d)\n", TimerHandle,
TimerType);
/* Check Parameter Validity */
if (PreviousMode != KernelMode) {
+
_SEH_TRY {
+
ProbeForWrite(TimerHandle,
sizeof(HANDLE),
sizeof(ULONG));
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
- if(!NT_SUCCESS(Status)) {
- return Status;
- }
+ if(!NT_SUCCESS(Status)) return Status;
}
/* Create the Object */
@@ -388,9 +388,13 @@
/* Make sure it's safe to write to the handle */
_SEH_TRY {
+
*TimerHandle = hTimer;
+
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
}
@@ -406,28 +410,28 @@
IN POBJECT_ATTRIBUTES ObjectAttributes)
{
HANDLE hTimer;
- KPROCESSOR_MODE PreviousMode;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
- PreviousMode = ExGetPreviousMode();
-
DPRINT("NtOpenTimer(TimerHandle: %x)\n", TimerHandle);
/* Check Parameter Validity */
if (PreviousMode != KernelMode) {
+
_SEH_TRY {
+
ProbeForWrite(TimerHandle,
sizeof(HANDLE),
sizeof(ULONG));
+
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
- if(!NT_SUCCESS(Status)) {
- return Status;
- }
+ if(!NT_SUCCESS(Status)) return Status;
}
/* Open the Timer */
@@ -444,9 +448,13 @@
/* Make sure it's safe to write to the handle */
_SEH_TRY {
+
*TimerHandle = hTimer;
+
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
}
@@ -464,14 +472,11 @@
OUT PULONG ReturnLength OPTIONAL)
{
PETIMER Timer;
- KPROCESSOR_MODE PreviousMode;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
PTIMER_BASIC_INFORMATION BasicInfo =
(PTIMER_BASIC_INFORMATION)TimerInformation;
PAGED_CODE();
-
- PreviousMode = ExGetPreviousMode();
-
DPRINT("NtQueryTimer(TimerHandle: %x, Class: %d)\n", TimerHandle,
TimerInformationClass);
/* Check Validity */
@@ -501,7 +506,7 @@
/* Return the Basic Information */
_SEH_TRY {
-
+
/* FIXME: Interrupt correction based on Interrupt Time */
DPRINT("Returning Information for Timer: %x. Time
Remaining: %d\n", Timer, Timer->KeTimer.DueTime.QuadPart);
BasicInfo->TimeRemaining.QuadPart =
Timer->KeTimer.DueTime.QuadPart;
@@ -511,7 +516,8 @@
} _SEH_HANDLE {
- Status = _SEH_GetExceptionCode();
+ Status = _SEH_GetExceptionCode();
+
} _SEH_END;
/* Dereference Object */
@@ -535,41 +541,40 @@
PETIMER Timer;
KIRQL OldIrql;
BOOLEAN State;
- KPROCESSOR_MODE PreviousMode;
- PETHREAD CurrentThread;
+ KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+ PETHREAD CurrentThread = PsGetCurrentThread();
LARGE_INTEGER TimerDueTime;
PETHREAD TimerThread;
BOOLEAN KillTimer = FALSE;
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
-
- PreviousMode = ExGetPreviousMode();
- CurrentThread = PsGetCurrentThread();
-
DPRINT("NtSetTimer(TimerHandle: %x, DueTime: %d, Apc: %x, Period:
%d)\n", TimerHandle, DueTime->QuadPart, TimerApcRoutine, Period);
/* Check Parameter Validity */
if (PreviousMode != KernelMode) {
+
_SEH_TRY {
+
ProbeForRead(DueTime,
sizeof(LARGE_INTEGER),
sizeof(ULONG));
TimerDueTime = *DueTime;
if(PreviousState != NULL) {
+
ProbeForWrite(PreviousState,
sizeof(BOOLEAN),
sizeof(BOOLEAN));
}
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
- if(!NT_SUCCESS(Status)) {
- return Status;
- }
+ if(!NT_SUCCESS(Status)) return Status;
}
/* Get the Timer Object */
@@ -685,10 +690,15 @@
/* Make sure it's safe to write to the handle */
if(PreviousState != NULL) {
+
_SEH_TRY {
+
*PreviousState = State;
+
} _SEH_HANDLE {
+
Status = _SEH_GetExceptionCode();
+
} _SEH_END;
}
}
_____
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ob.h
--- branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ob.h
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ob.h
2005-03-04 20:56:32 UTC (rev 13821)
@@ -326,7 +326,7 @@
HANDLE RootDirectory;
ULONG Attributes;
PSECURITY_DESCRIPTOR SecurityDescriptor;
- /* PVOID SecurityQualityOfService; */
+ PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
} CAPTURED_OBJECT_ATTRIBUTES, *PCAPTURED_OBJECT_ATTRIBUTES;
NTSTATUS
_____
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/se.h
--- branches/alex_devel_branch/reactos/ntoskrnl/include/internal/se.h
2005-03-04 19:07:02 UTC (rev 13820)
+++ branches/alex_devel_branch/reactos/ntoskrnl/include/internal/se.h
2005-03-04 20:56:32 UTC (rev 13821)
@@ -148,7 +148,61 @@
ULONG PrivilegeControl,
KPROCESSOR_MODE PreviousMode);
+NTSTATUS
+SepCaptureSecurityQualityOfService(IN POBJECT_ATTRIBUTES
ObjectAttributes OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN POOL_TYPE PoolType,
+ IN BOOLEAN CaptureIfKernel,
+ OUT PSECURITY_QUALITY_OF_SERVICE
*CapturedSecurityQualityOfService,
+ OUT PBOOLEAN Present);
+VOID
+SepReleaseSecurityQualityOfService(IN PSECURITY_QUALITY_OF_SERVICE
CapturedSecurityQualityOfService OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN BOOLEAN CaptureIfKernel);
+
+NTSTATUS
+SepCaptureSid(IN PSID InputSid,
+ IN KPROCESSOR_MODE AccessMode,
+ IN POOL_TYPE PoolType,
+ IN BOOLEAN CaptureIfKernel,
+ OUT PSID *CapturedSid);
+
+VOID
+SepReleaseSid(IN PSID CapturedSid,
+ IN KPROCESSOR_MODE AccessMode,
+ IN BOOLEAN CaptureIfKernel);
+
+NTSTATUS
+SepCaptureAcl(IN PACL InputAcl,
+ IN KPROCESSOR_MODE AccessMode,
+ IN POOL_TYPE PoolType,
+ IN BOOLEAN CaptureIfKernel,
+ OUT PACL *CapturedAcl);
+
+VOID
+SepReleaseAcl(IN PACL CapturedAcl,
+ IN KPROCESSOR_MODE AccessMode,
+ IN BOOLEAN CaptureIfKernel);
+
+#define SepAcquireTokenLockExclusive(Token)
\
+ do {
\
+ KeEnterCriticalRegion();
\
+ ExAcquireResourceExclusive(((PTOKEN)Token)->TokenLock, TRUE);
\
+ while(0)
+
+#define SepAcquireTokenLockShared(Token)
\
+ do {
\
+ KeEnterCriticalRegion();
\
+ ExAcquireResourceShared(((PTOKEN)Token)->TokenLock, TRUE);
\
+ while(0)
+
+#define SepReleaseTokenLock(Token)
\
+ do {
\
+ ExReleaseResource(((PTOKEN)Token)->TokenLock);
\
+ KeLeaveCriticalRegion();
\
[truncated at 1000 lines; 2559 more skipped]