ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
January 2006
----- 2025 -----
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
23 participants
586 discussions
Start a n
N
ew thread
[royce] 20583: fix msvc6 warnings
by royce@svn.reactos.org
fix msvc6 warnings Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp _____ Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp --- trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp 2006-01-05 16:30:20 UTC (rev 20582) +++ trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp 2006-01-05 16:32:49 UTC (rev 20583) @@ -243,8 +243,8 @@ { std::string& cfg = cfgs[icfg]; - bool debug = strstr ( cfg.c_str(), "Debug" ); - bool speed = strstr ( cfg.c_str(), "Speed" ); + bool debug = strstr ( cfg.c_str(), "Debug" ) != NULL; + bool speed = strstr ( cfg.c_str(), "Speed" ) != NULL; bool release = (!debug && !speed ); //bool msvc_headers = ( 0 != strstr ( cfg.c_str(), "MSVC Headers" ) );
19 years
1
0
0
0
[ion] 20582: - Tabs not spaces.
by ion@svn.reactos.org
- Tabs not spaces. Modified: trunk/reactos/ReactOS.xml _____ Modified: trunk/reactos/ReactOS.xml --- trunk/reactos/ReactOS.xml 2006-01-05 16:25:44 UTC (rev 20581) +++ trunk/reactos/ReactOS.xml 2006-01-05 16:30:20 UTC (rev 20582) @@ -24,11 +24,11 @@ <define name="KDBG" value="1" /> <property name="DBG_OR_KDBG" value="true" /> </if> - <compilerflag>-Os</compilerflag> - <compilerflag>-Wno-strict-aliasing</compilerflag> - <compilerflag>-ftracer</compilerflag> - <compilerflag>-momit-leaf-frame-pointer</compilerflag> - <compilerflag>-mpreferred-stack-boundary=2</compilerflag> + <compilerflag>-Os</compilerflag> + <compilerflag>-Wno-strict-aliasing</compilerflag> + <compilerflag>-ftracer</compilerflag> + <compilerflag>-momit-leaf-frame-pointer</compilerflag> + <compilerflag>-mpreferred-stack-boundary=2</compilerflag> <compilerflag>-Wpointer-arith</compilerflag> <include>.</include>
19 years
1
0
0
0
[ion] 20581: - Uncondtionally build with optimizations (can still be disabled by commenting out the block locally; is this easy enough Ge?)
by ion@svn.reactos.org
- Uncondtionally build with optimizations (can still be disabled by commenting out the block locally; is this easy enough Ge?) Modified: trunk/reactos/ReactOS.xml _____ Modified: trunk/reactos/ReactOS.xml --- trunk/reactos/ReactOS.xml 2006-01-05 16:24:32 UTC (rev 20580) +++ trunk/reactos/ReactOS.xml 2006-01-05 16:25:44 UTC (rev 20581) @@ -20,17 +20,15 @@ <define name="DBG" value="1" /> <property name="DBG_OR_KDBG" value="true" /> </if> - <if property="DBG" value="0"> - <compilerflag>-Os</compilerflag> - <compilerflag>-Wno-strict-aliasing</compilerflag> - <compilerflag>-ftracer</compilerflag> - <compilerflag>-momit-leaf-frame-pointer</compilerflag> - <compilerflag>-mpreferred-stack-boundary=2</compilerflag> - </if> <if property="KDBG" value="1"> <define name="KDBG" value="1" /> <property name="DBG_OR_KDBG" value="true" /> </if> + <compilerflag>-Os</compilerflag> + <compilerflag>-Wno-strict-aliasing</compilerflag> + <compilerflag>-ftracer</compilerflag> + <compilerflag>-momit-leaf-frame-pointer</compilerflag> + <compilerflag>-mpreferred-stack-boundary=2</compilerflag> <compilerflag>-Wpointer-arith</compilerflag> <include>.</include>
19 years
1
0
0
0
[ion] 20580: - New ERESOURCE implementation: fixes the return value of some functions (VOID vs NTSTATUS, USHORT vs ULONG), as well as optimized the code loops and general structure of the code. Additionnaly, functions do not simply call other functions with similar names; the exact implementation of each function has now been properly separated (see the DDK for more information on this) to have the most optimized scenarios.
by ion@svn.reactos.org
- New ERESOURCE implementation: fixes the return value of some functions (VOID vs NTSTATUS, USHORT vs ULONG), as well as optimized the code loops and general structure of the code. Additionnaly, functions do not simply call other functions with similar names; the exact implementation of each function has now been properly separated (see the DDK for more information on this) to have the most optimized scenarios. - Also, the spinlock is not actually acquired on non-SMP builds; instead, interrupts are blocked and unblocked for acquire/release, this optimizes locking. - Added many asserts and bugcheck scenarios. - Added thread priority boosting. - Added some debugging helpers and deadlock detection. - Added RESOURCE_NOT_OWNED bugcehck message. * Thanks again to Waxdragon (Andrew) for testing this build. Modified: trunk/reactos/include/ndk/extypes.h Modified: trunk/reactos/ntoskrnl/ex/init.c Modified: trunk/reactos/ntoskrnl/ex/resource.c Modified: trunk/reactos/ntoskrnl/include/internal/ex.h Modified: trunk/reactos/ntoskrnl/include/internal/tag.h Modified: trunk/reactos/ntoskrnl/ntoskrnl.mc Modified: trunk/reactos/w32api/include/ddk/winddk.h _____ Modified: trunk/reactos/include/ndk/extypes.h --- trunk/reactos/include/ndk/extypes.h 2006-01-05 15:32:08 UTC (rev 20579) +++ trunk/reactos/include/ndk/extypes.h 2006-01-05 16:24:32 UTC (rev 20580) @@ -118,6 +118,11 @@ #define EX_PUSH_LOCK_FLAGS_WAIT 2 // +// Resource (ERESOURCE) Flags +// +#define ResourceHasDisabledPriorityBoost 0x08 + +// // Shutdown types for NtShutdownSystem // typedef enum _SHUTDOWN_ACTION _____ Modified: trunk/reactos/ntoskrnl/ex/init.c --- trunk/reactos/ntoskrnl/ex/init.c 2006-01-05 15:32:08 UTC (rev 20579) +++ trunk/reactos/ntoskrnl/ex/init.c 2006-01-05 16:24:32 UTC (rev 20580) @@ -489,7 +489,7 @@ DPRINT("Process created successfully\n"); return STATUS_SUCCESS; } - + VOID INIT_FUNCTION STDCALL @@ -543,6 +543,9 @@ InitializeListHead(&KiProfileSourceListHead); KeInitializeSpinLock(&KiProfileLock); + /* Initialize resources */ + ExpResourceInitialization(); + /* Load basic Security for other Managers */ if (!SeInit1()) KEBUGCHECK(SECURITY_INITIALIZATION_FAILED); _____ Modified: trunk/reactos/ntoskrnl/ex/resource.c --- trunk/reactos/ntoskrnl/ex/resource.c 2006-01-05 15:32:08 UTC (rev 20579) +++ trunk/reactos/ntoskrnl/ex/resource.c 2006-01-05 16:24:32 UTC (rev 20580) @@ -1,955 +1,2315 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel + * PROJECT: ReactOS Kernel * FILE: ntoskrnl/ex/resource.c - * PURPOSE: Resource synchronization construct - * - * PROGRAMMERS: No programmer listed. + * PURPOSE: ERESOURCE Implementation + * PROGRAMMERS: Alex Ionescu (alex(a)relsoft.net) */ - -/* - * Usage of ERESOURCE members is not documented. - * From names of members and functionnalities, we can assume : - * - * OwnerTable = list of threads who have shared access(if more than one) - * ActiveCount = number of threads who have access to the resource - * Flag = bits : ResourceOwnedExclusive=0x80 - * ResourceNeverExclusive=0x10 - * ResourceReleaseByOtherThread=0x20 - * ResourceDisableBoost=0x08 - * SharedWaiters = semaphore, used to manage wait list of shared waiters. - * ExclusiveWaiters = event, used to manage wait list of exclusive waiters. - * OwnerThreads[0]= thread who have exclusive access - * OwnerThreads[1]= if only one thread own the resource - * thread who have shared access - * else - * OwnerThread=0 - * and TableSize = number of entries in the owner table - * NumberOfExclusiveWaiters = number of threads waiting for exclusive access. - * NumberOfSharedWaiters = number of threads waiting for exclusive access. - * +/* WARNING: + * This implementation is the Windows NT 5.x one. + * NT 6.0 beta has optimized the OwnerThread entry array + * and the internals of ExpFindEntryForThread and ExpFindFreeEntry + * need to be modified accordingly in order to support the WDK. + * These changes will not be made here until NT 6.0 reaches RTM status since + * there is a possibility that they will be removed; as such, do NOT + * update ERESOURCE/relevant code to the WDK definition. */ -#define ResourceDisableBoost 0x08 - /* INCLUDES *****************************************************************/ #include <ntoskrnl.h> #define NDEBUG #include <internal/debug.h> -/* FUNCTIONS *****************************************************************/ +#if defined (ALLOC_PRAGMA) +#pragma alloc_text(INIT, ExpResourceInitialization) +#endif +/* Macros for reading resource flags */ +#define IsExclusiveWaiting(r) (r->NumberOfExclusiveWaiters) +#define IsSharedWaiting(r) (r->NumberOfSharedWaiters) +#define IsOwnedExclusive(r) (r->Flag & ResourceOwnedExclusive) -BOOLEAN -STDCALL -ExTryToAcquireResourceExclusiveLite ( - PERESOURCE Resource - ) -/* - * FUNCTION: Attempts to require the resource for exclusive access - * ARGUMENTS: - * Resource = Points to the resource of be acquired - * RETURNS: TRUE if the resource was acquired for the caller - * NOTES: Must be acquired at IRQL < DISPATCH_LEVEL - */ +/* DATA******************************************************************** ***/ + +LARGE_INTEGER ExpTimeout; +ULONG ExpResourceTimeoutCount = 90 * 3600 / 2; +KSPIN_LOCK ExpResourceSpinLock; +LIST_ENTRY ExpSystemResourcesList; +BOOLEAN ExResourceStrict = FALSE; /* FIXME */ + +/* PRIVATE FUNCTIONS *********************************************************/ + +#if DBG +/*++ + * @name ExpVerifyResource + * + * The ExpVerifyResource routine verifies the correctness of an ERESOURCE + * + * @param Resource + * Pointer to the resource being verified. + * + * @return None. + * + * @remarks Only present on DBG builds. + * + *--*/ +VOID +NTAPI +ExpVerifyResource(IN PERESOURCE Resource) { - return(ExAcquireResourceExclusiveLite(Resource,FALSE)); + /* Verify the resource data */ + ASSERT((((ULONG_PTR)Resource) & (sizeof(ULONG_PTR) - 1)) == 0); + ASSERT(!Resource->SharedWaiters || + Resource->SharedWaiters->Header.Type == SemaphoreObject); + ASSERT(!Resource->SharedWaiters || + Resource->SharedWaiters->Header.Size == (sizeof(KSEMAPHORE) / sizeof(ULONG))); + ASSERT(!Resource->ExclusiveWaiters || + Resource->ExclusiveWaiters->Header.Type == SynchronizationEvent); + ASSERT(!Resource->ExclusiveWaiters || + Resource->ExclusiveWaiters->Header.Size == (sizeof(KEVENT) / sizeof(ULONG))); } -#ifdef ExAcquireResourceExclusive -#undef ExAcquireResourceExclusive +/*++ + * @name ExpCheckForApcsDisabled + * + * The ExpCheckForApcsDisabled routine checks if Kernel APCs are still + * enabled when they should be disabled, and optionally breakpoints. + * + * @param BreakIfTrue + * Specifies if we should break if an invalid APC State is detected. + * + * @param Resource + * Pointer to the resource being checked. + * + * @param Thread + * Pointer to the thread being checked. + * + * @return None. + * + * @remarks Only present on DBG builds. Depends on ExResourceStrict value. + * + *--*/ +VOID +NTAPI +ExpCheckForApcsDisabled(IN BOOLEAN BreakIfTrue, + IN PERESOURCE Resource, + IN PETHREAD Thread) +{ + /* Check if we should care and check if we should break */ + if ((ExResourceStrict) && + (BreakIfTrue) && + !(Thread->SystemThread) && + !(Thread->Tcb.CombinedApcDisable)) + { + /* Bad! */ + DPRINT1("EX: resource: APCs still enabled before resource %p acquire " + "!!!\n", Resource); + DbgBreakPoint(); + } +} #endif -/* - * @implemented - */ -BOOLEAN -STDCALL -ExAcquireResourceExclusive ( - PERESOURCE Resource, - BOOLEAN Wait - ) +/*++ + * @name ExpResourceInitialization + * + * The ExpResourceInitialization routine initializes resources for use. + * + * @param None. + * + * @return None. + * + * @remarks This routine should only be called once, during system startup. + * + *--*/ +VOID +NTAPI +INIT_FUNCTION +ExpResourceInitialization(VOID) { - return(ExAcquireResourceExclusiveLite(Resource,Wait)); + /* Setup the timeout */ + ExpTimeout.QuadPart = Int32x32To64(4, -10000000); + InitializeListHead(&ExpSystemResourcesList); + KeInitializeSpinLock(&ExpResourceSpinLock); } - -/* - * @implemented - */ -BOOLEAN -STDCALL -ExAcquireResourceExclusiveLite ( - PERESOURCE Resource, - BOOLEAN Wait - ) -/* - * FUNCTION: Acquires a resource exclusively for the calling thread - * ARGUMENTS: - * Resource = Points to the resource to acquire - * Wait = Is set to TRUE if the caller should wait to acquire the - * resource if it can't be acquired immediately - * RETURNS: TRUE if the resource was acquired, - * FALSE otherwise - * NOTES: Must be called at IRQL < DISPATCH_LEVEL - */ +/*++ + * @name ExpAllocateExclusiveWaiterEvent + * + * The ExpAllocateExclusiveWaiterEvent routine creates the event that will + * be used by exclusive waiters on the resource. + * + * @param Resource + * Pointer to the resource. + * + * @param OldIrql + * Pointer to current IRQL. TBC: Pointer to in-stack queued spinlock. + * + * @return None. + * + * @remarks The pointer to the event must be atomically set. + * + *--*/ +VOID +NTAPI +ExpAllocateExclusiveWaiterEvent(IN PERESOURCE Resource, + IN PKIRQL OldIrql) { - KIRQL oldIrql; + PKEVENT Event; - DPRINT("ExAcquireResourceExclusiveLite(Resource 0x%p, Wait %d)\n", - Resource, Wait); + /* Release the lock */ + ExReleaseResourceLock(&Resource->SpinLock, *OldIrql); - ASSERT_IRQL_LESS(DISPATCH_LEVEL); + /* Allocate the event */ + Event = ExAllocatePoolWithTag(NonPagedPool, + sizeof(KEVENT), + TAG_RESOURCE_EVENT); -/* undefed for now, since cdfs must be fixed first */ -#if 0 - /* At least regular kmode APC's must be disabled - * Note that this requirement is missing in old DDK's */ - ASSERT(KeGetCurrentThread() == NULL || /* <-Early in the boot process the current thread is obseved to be NULL */ - KeGetCurrentThread()->KernelApcDisable || - KeGetCurrentIrql() == APC_LEVEL); -#endif + /* Initialize it */ + KeInitializeEvent(Event, SynchronizationEvent, FALSE); - KeAcquireSpinLock(&Resource->SpinLock, &oldIrql); + /* Set it */ + if (InterlockedCompareExchangePointer(&Resource->ExclusiveWaiters, + Event, + NULL)) + { + /* Someone already set it, free our event */ + DPRINT1("WARNING: Handling race condition\n"); + ExFreePool(Event); + } - /* resource already locked */ - if((Resource->Flag & ResourceOwnedExclusive) - && Resource->OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread()) - { - /* it's ok : same lock for same thread */ - Resource->OwnerThreads[0].OwnerCount++; - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n"); - return(TRUE); - } - - if (Resource->ActiveCount && !Wait) - { - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceExclusiveLite() = FALSE\n"); - return(FALSE); - } - - /* - * This is slightly better than it looks because other exclusive - * threads who are waiting won't be woken up but there is a race - * with new threads trying to grab the resource so we must have - * the spinlock, still normally this loop will only be executed - * once - * NOTE: We might want to set a timeout to detect deadlock - * (10 minutes?) - */ - while (Resource->ActiveCount) - { - Resource->NumberOfExclusiveWaiters++; - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - KeWaitForSingleObject(Resource->ExclusiveWaiters, - Executive, - KernelMode, - FALSE, - NULL); - KeAcquireSpinLock(&Resource->SpinLock, &oldIrql); - Resource->NumberOfExclusiveWaiters--; - } - Resource->Flag |= ResourceOwnedExclusive; - Resource->ActiveCount = 1; - Resource->OwnerThreads[0].OwnerThread = ExGetCurrentResourceThread(); - Resource->OwnerThreads[0].OwnerCount = 1; - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n"); - return(TRUE); + /* Re-acquire the lock */ + ExAcquireResourceLock(&Resource->SpinLock, OldIrql); } -static BOOLEAN EiRemoveSharedOwner(PERESOURCE Resource, - ERESOURCE_THREAD ResourceThreadId) -/* - * FUNCTION: Removes the current thread from the shared owners of the resource - * ARGUMENTS: - * Resource = Pointer to the resource for which the thread is to be - * added - * NOTE: Must be called with the resource spinlock held - */ +/*++ + * @name ExpAllocateSharedWaiterSemaphore + * + * The ExpAllocateSharedWaiterSemaphore routine creates the semaphore that + * will be used by shared waiters on the resource. + * + * @param Resource + * Pointer to the resource. + * + * @param OldIrql + * Pointer to current IRQL. TBC: Pointer to in-stack queued spinlock. + * + * @return None. + * + * @remarks The pointer to the semaphore must be atomically set. + * + *--*/ +VOID +NTAPI +ExpAllocateSharedWaiterSemaphore(IN PERESOURCE Resource, + IN PKIRQL OldIrql) { - ULONG i; + PKSEMAPHORE Semaphore; - if (Resource->OwnerThreads[1].OwnerThread == ResourceThreadId) - { - Resource->OwnerThreads[1].OwnerCount--; - if (Resource->OwnerThreads[1].OwnerCount == 0) - { - Resource->ActiveCount--; - Resource->OwnerThreads[1].OwnerThread = 0; - } - return(TRUE); - } + /* Release the lock */ + ExReleaseResourceLock(&Resource->SpinLock, *OldIrql); - if (Resource->OwnerThreads[1].OwnerThread) - { - /* Oh dear, the caller didn't own the resource after all */ - return(FALSE); - } + /* Allocate the semaphore */ + Semaphore = ExAllocatePoolWithTag(NonPagedPool, + sizeof(KSEMAPHORE), + TAG_RESOURCE_SEMAPHORE); - for (i=0; i<Resource->OwnerThreads[1].TableSize; i++) - { - if (Resource->OwnerTable[i].OwnerThread == ResourceThreadId) - { - Resource->OwnerTable[i].OwnerCount--; - if (Resource->OwnerTable[i].OwnerCount == 0) - { - Resource->ActiveCount--; - Resource->OwnerTable[i].OwnerThread = 0; - } - return TRUE; - } - } - return(FALSE); + /* Initialize it */ + KeInitializeSemaphore(Semaphore, 0, MAXLONG); + + /* Set it */ + if (InterlockedCompareExchangePointer(&Resource->SharedWaiters, + Semaphore, + NULL)) + { + /* Someone already set it, free our semaphore */ + DPRINT1("WARNING: Handling race condition\n"); + ExFreePool(Semaphore); + } + + /* Re-acquire the lock */ + ExAcquireResourceLock(&Resource->SpinLock, OldIrql); } -static BOOLEAN EiAddSharedOwner(PERESOURCE Resource) -/* - * FUNCTION: Adds the current thread to the shared owners of the resource - * ARGUMENTS: - * Resource = Pointer to the resource for which the thread is to be - * added - * NOTE: Must be called with the resource spinlock held - */ +/*++ + * @name ExpExpandResourceOwnerTable + * + * The ExpExpandResourceOwnerTable routine expands the owner table of the + * specified resource. + * + * @param Resource + * Pointer to the resource. + * + * @param OldIrql + * Pointer to current IRQL. TBC: Pointer to in-stack queued spinlock. + * + * @return None. + * + * @remarks None. + * + *--*/ +VOID +NTAPI +ExpExpandResourceOwnerTable(IN PERESOURCE Resource, + IN PKIRQL OldIrql) { - ERESOURCE_THREAD CurrentThread = ExGetCurrentResourceThread(); - POWNER_ENTRY freeEntry; - ULONG i = 0; + POWNER_ENTRY Owner, Table; + ULONG NewSize, OldSize; + DPRINT("ExpExpandResourceOwnerTable: %p\n", Resource); - DPRINT("EiAddSharedOwner(Resource 0x%p)\n", Resource); + /* Get the owner table */ + Owner = Resource->OwnerTable; + if (!Owner) + { + /* Start with the default size of 3 */ + OldSize = 0; + NewSize = 3; + } + else + { + /* Add 4 more entries */ + OldSize = Owner->TableSize; + NewSize = OldSize + 4; + } - if (Resource->ActiveCount == 0) - { - /* no owner, it's easy */ - Resource->OwnerThreads[1].OwnerThread = ExGetCurrentResourceThread(); - Resource->OwnerThreads[1].OwnerCount = 1; - if (Resource->OwnerTable != NULL) - { - ExFreePool(Resource->OwnerTable); - } - Resource->OwnerTable = NULL; - Resource->ActiveCount = 1; - DPRINT("EiAddSharedOwner() = TRUE\n"); - return(TRUE); - } + /* Release the lock */ + ExReleaseResourceLock(&Resource->SpinLock, *OldIrql); - /* - * now, we must search if this thread has already acquired this resource - * then increase ownercount if found, else create new entry or reuse free - * entry - */ - if (Resource->OwnerTable == NULL) - { - DPRINT("Creating owner table\n"); + /* Allocate memory for the table */ + Table = ExAllocatePoolWithTag(NonPagedPool, + NewSize * sizeof(OWNER_ENTRY), + TAG_RESOURCE_TABLE); - /* allocate ownertable,memset to 0, initialize first entry */ - Resource->OwnerTable = - ExAllocatePoolWithTag(NonPagedPool, sizeof(OWNER_ENTRY)*3, - TAG_OWNER_TABLE); - if (Resource->OwnerTable == NULL) - { - KEBUGCHECK(0); - return(FALSE); - } - memset(Resource->OwnerTable,0,sizeof(OWNER_ENTRY)*3); - memcpy(&Resource->OwnerTable[0], &Resource->OwnerThreads[1], - sizeof(OWNER_ENTRY)); + /* Zero the table */ + RtlZeroMemory((PVOID)(Table + OldSize), + (NewSize - OldSize) * sizeof(OWNER_ENTRY)); - Resource->OwnerThreads[1].OwnerThread = 0; - Resource->OwnerThreads[1].TableSize = 3; + /* Lock the resource */ + ExAcquireResourceLock(&Resource->SpinLock, OldIrql); - Resource->OwnerTable[1].OwnerThread = CurrentThread; - Resource->OwnerTable[1].OwnerCount = 1; - Resource->ActiveCount++; + /* Make sure nothing has changed */ + if ((Owner != Resource->OwnerTable) || + ((Owner) && (OldSize != Resource->OwnerTable->TableSize))) + { + /* Resource changed while we weren't holding the lock; bail out */ + ExReleaseResourceLock(&Resource->SpinLock, *OldIrql); + ExFreePool(Table); + } + else + { + /* Copy the table */ + RtlCopyMemory((PVOID)Table, + Owner, + OldSize * sizeof(OWNER_ENTRY)); - return(TRUE); - } + /* Acquire dispatcher lock to prevent thread boosting */ + //KeAcquireDispatcherDatabaseLockAtDpcLevel(); - DPRINT("Search free entries\n"); + /* Set the new table data */ + Table->TableSize = NewSize; + Resource->OwnerTable = Table; - DPRINT("Number of entries %d\n", - Resource->OwnerThreads[1].TableSize); + /* Sanity check */ + ExpVerifyResource(Resource); - freeEntry = NULL; - for (i=0; i<Resource->OwnerThreads[1].TableSize; i++) - { - if (Resource->OwnerTable[i].OwnerThread == CurrentThread) - { - DPRINT("Thread already owns resource\n"); - Resource->OwnerTable[i].OwnerCount++; - return(TRUE); - } - if (Resource->OwnerTable[i].OwnerThread == 0) - { - freeEntry = &Resource->OwnerTable[i]; - break; - } - } + /* Release locks */ + //KeReleaseDispatcherDatabaseLockFromDpcLevel(); + ExReleaseResourceLock(&Resource->SpinLock, *OldIrql); - DPRINT("Found free entry 0x%p\n", freeEntry); + /* Free the old table */ + if (Owner) ExFreePool(Owner); - if (!freeEntry) - { - DPRINT("Allocating new entry\n"); + /* Set the resource index */ + if (!OldSize) OldSize = 1; + } - /* reallocate ownertable with one more entry */ - freeEntry = - ExAllocatePoolWithTag(NonPagedPool, - sizeof(OWNER_ENTRY)* - (Resource->OwnerThreads[1].TableSize+1), - TAG_OWNER_TABLE); - if (freeEntry == NULL) - { - KEBUGCHECK(0); - return(FALSE); - } - memcpy(freeEntry,Resource->OwnerTable, - sizeof(OWNER_ENTRY)*(Resource->OwnerThreads[1].TableSize)); - ExFreePool(Resource->OwnerTable); - Resource->OwnerTable=freeEntry; - freeEntry=&Resource->OwnerTable[Resource->OwnerThreads[1].TableSize]; - Resource->OwnerThreads[1].TableSize++; - } - DPRINT("Creating entry\n"); - freeEntry->OwnerThread=ExGetCurrentResourceThread(); - freeEntry->OwnerCount=1; - Resource->ActiveCount++; - return(TRUE); + /* Set the resource index */ + KeGetCurrentThread()->ResourceIndex = (UCHAR)OldSize; + + /* Lock the resource again */ + ExAcquireResourceLock(&Resource->SpinLock, OldIrql); } -/* - * @implemented - */ -BOOLEAN -STDCALL -ExAcquireResourceSharedLite ( - PERESOURCE Resource, - BOOLEAN Wait - ) -/* - * FUNCTION: Acquires the given resource for shared access by the calling - * thread - * ARGUMENTS: - * Resource = Points to the resource to acquire - * Wait = Is set to TRUE if the caller should be put into wait state - * until the resource can be acquired if it cannot be acquired - * immediately - * RETURNS: TRUE, if the resource is acquire - * FALSE otherwise - */ +/*++ + * @name ExpFindFreeEntry + * + * The ExpFindFreeEntry routine locates an empty owner entry in the + * specified resource. If none was found, then the owner table is + * expanded. + * + * @param Resource + * Pointer to the resource. + * + * @param OldIrql + * Pointer to current IRQL. TBC: Pointer to in-stack queued spinlock. + * + * @return Pointer to an empty OWNER_ENTRY structure. + * + * @remarks None. + * + *--*/ +POWNER_ENTRY +FASTCALL +ExpFindFreeEntry(IN PERESOURCE Resource, + IN PKIRQL OldIrql) { - KIRQL oldIrql; + POWNER_ENTRY Owner, Limit; + ULONG Size; + POWNER_ENTRY FreeEntry = NULL; + DPRINT("ExpFindFreeEntry: %p\n", Resource); - DPRINT("ExAcquireResourceSharedLite(Resource 0x%p, Wait %d)\n", - Resource, Wait); + /* Sanity check */ + ASSERT(OldIrql != 0); + ASSERT(Resource->OwnerThreads[0].OwnerThread != 0); - ASSERT_IRQL_LESS(DISPATCH_LEVEL); + /* Check if the next built-in entry is free */ + if (!Resource->OwnerThreads[1].OwnerThread) + { + /* Return it */ + FreeEntry = &Resource->OwnerThreads[1]; + } + else + { + /* Get the current table pointer */ + Owner = Resource->OwnerTable; + if (Owner) + { + /* Loop every entry */ + Size = Owner->TableSize; + Limit = &Owner[Size]; -/* undefed for now, since cdfs must be fixed first */ -#if 0 - /* At least regular kmode APC's must be disabled - * Note that this requirement is missing in old DDK's - */ - ASSERT(KeGetCurrentThread() == NULL || /* <-Early in the boot process the current thread is obseved to be NULL */ - KeGetCurrentThread()->KernelApcDisable || - KeGetCurrentIrql() == APC_LEVEL); -#endif + /* Go to the next entry and loop */ + Owner++; + do + { + /* Check for a free entry */ + if (!Owner->OwnerThread) + { + /* Found one, return it!*/ + FreeEntry = Owner; + break; + } - KeAcquireSpinLock(&Resource->SpinLock, &oldIrql); + /* Move on */ + Owner++; + } while (Owner != Limit); - /* first, resolve trivial cases */ - if (Resource->ActiveCount == 0) - { - EiAddSharedOwner(Resource); - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceSharedLite() = TRUE\n"); - return(TRUE); - } + /* If we found a free entry by now, return it */ + if (FreeEntry) + { + /* Set the resource index */ + KeGetCurrentThread()->ResourceIndex = + (UCHAR)(Owner - Resource->OwnerTable); + return FreeEntry; + } + } - if ((Resource->Flag & ResourceOwnedExclusive) - && Resource->OwnerThreads[0].OwnerThread==ExGetCurrentResourceThread()) - { - /* exclusive, but by same thread : it's ok */ - /* - * NOTE: Is this correct? Seems the same as ExConvertExclusiveToShared - */ - Resource->OwnerThreads[0].OwnerCount++; - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceSharedLite() = TRUE\n"); - return(TRUE); - } + /* No free entry, expand the table */ + ExpExpandResourceOwnerTable(Resource, OldIrql); + FreeEntry = NULL; + } - if ((Resource->Flag & ResourceOwnedExclusive) - || Resource->NumberOfExclusiveWaiters) - { - /* exclusive by another thread , or thread waiting for exclusive */ - if (!Wait) - { - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceSharedLite() = FALSE\n"); - return(FALSE); - } - else - { - Resource->NumberOfSharedWaiters++; - do - { - /* wait for the semaphore */ - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - KeWaitForSingleObject(Resource->SharedWaiters,0, KernelMode, FALSE, NULL); - KeAcquireSpinLock(&Resource->SpinLock, &oldIrql); - /* the spin lock was released we must check again */ - } - while ((Resource->Flag & ResourceOwnedExclusive) - || Resource->NumberOfExclusiveWaiters); - Resource->NumberOfSharedWaiters--; - } - } + /* Return the entry found */ + return FreeEntry; +} - EiAddSharedOwner(Resource); - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - DPRINT("ExAcquireResourceSharedLite() = TRUE\n"); - return(TRUE); +/*++ + * @name ExpFindEntryForThread + * + * The ExpFindEntryForThread routine locates the owner entry associated with + * the specified thread in the given resource. If none was found, then the + * owner table is expanded. + * + * @param Resource + * Pointer to the resource. + * + * @param Thread + * Pointer to the thread to find. + * + * @param OldIrql + * Pointer to current IRQL. TBC: Pointer to in-stack queued spinlock. + * + * @return Pointer to an empty OWNER_ENTRY structure. + * + * @remarks None. + * + *--*/ +POWNER_ENTRY +FASTCALL +ExpFindEntryForThread(IN PERESOURCE Resource, + IN ERESOURCE_THREAD Thread, + IN PKIRQL OldIrql) +{ + POWNER_ENTRY FreeEntry, Owner, Limit; + ULONG Size; + DPRINT("ExpFindEntryForThread: %p\n", Resource); + + /* Start by looking in the static array */ + if (Resource->OwnerThreads[0].OwnerThread == Thread) + { + /* Found it, return it! */ + return &Resource->OwnerThreads[0]; + } + else if (Resource->OwnerThreads[1].OwnerThread == Thread) + { + /* Return it */ + return &Resource->OwnerThreads[1]; + } + else + { + /* Check if the first array is empty for our use */ + FreeEntry = NULL; + if (!Resource->OwnerThreads[1].OwnerThread) + { + /* Use this as the first free entry */ + FreeEntry = &Resource->OwnerThreads[1]; + } + + /* Get the current table pointer */ + Owner = Resource->OwnerTable; + if (!Owner) + { + /* The current table is empty, so no size */ + Size = 0; + } + else + { + /* We have a table, get it's size and limit */ + Size = Owner->TableSize; + Limit = &Owner[Size]; + + /* Go to the next entry and loop */ + Owner++; + do + { + /* Check for a match */ + if (Owner->OwnerThread == Thread) + { + /* Match found! Set the resource index */ + KeGetCurrentThread()->ResourceIndex = + (UCHAR)(Owner - Resource->OwnerTable); + return Owner; + } + + /* If we don't have a free entry yet, make this one free */ + if (!(FreeEntry) && !(Owner->OwnerThread)) FreeEntry = Owner; + + /* Move on */ + Owner++; + } while (Owner != Limit); + } + } + + /* Check if it's OK to do an expansion */ + if (!OldIrql) return NULL; + + /* If we found a free entry by now, return it */ + if (FreeEntry) + { + /* Set the resource index */ + KeGetCurrentThread()->ResourceIndex = (UCHAR) + (Owner - Resource->OwnerTable); + return FreeEntry; + } + + /* No free entry, expand the table */ + ExpExpandResourceOwnerTable(Resource, OldIrql); + return NULL; } -/* - * @implemented - */ +/*++ + * @name ExpBoostOwnerThread + * + * The ExpBoostOwnerThread routine increases the priority of a waiting + * thread in an attempt to fight a possible deadlock. + * + * @param Thread + * Pointer to the current thread. + * + * @param OwnerThread + * Pointer to thread that owns the resource. + * + * @return None. + * + * @remarks None. + * + *--*/ VOID -STDCALL -ExConvertExclusiveToSharedLite ( - PERESOURCE Resource - ) -/* - * FUNCTION: Converts a given resource from acquired for exclusive access - * to acquire for shared access - * ARGUMENTS: - * Resource = Points to the resource for which the access should be - * converted - * NOTES: Caller must be running at IRQL < DISPATCH_LEVEL - */ +FASTCALL +ExpBoostOwnerThread(IN PKTHREAD Thread, + IN PKTHREAD OwnerThread) { - ULONG oldWaiters; - KIRQL oldIrql; + BOOLEAN Released = FALSE; + DPRINT("ExpBoostOwnerThread: %p\n", Thread); - DPRINT("ExConvertExclusiveToSharedLite(Resource 0x%p)\n", Resource); + /* Make sure the owner thread is a pointer, not an ID */ + if (!((ULONG_PTR)OwnerThread & 0x3)) + { + /* Check if we can actually boost it */ + if ((OwnerThread->Priority < Thread->Priority) && + (OwnerThread->Priority < 14)) + { + /* Make sure we're at dispatch */ + ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL); - KeAcquireSpinLock(&Resource->SpinLock, &oldIrql); + /* Set the new priority */ + OwnerThread->PriorityDecrement += 14 - OwnerThread->Priority; - oldWaiters = Resource->NumberOfSharedWaiters; + /* Update quantum */ + OwnerThread->Quantum = OwnerThread->QuantumReset; - if (!(Resource->Flag & ResourceOwnedExclusive)) - { - /* Might not be what the caller expects, better bug check */ - KEBUGCHECK(0); - KeReleaseSpinLock(&Resource->SpinLock, oldIrql); - return; - } + /* Update the kernel state */ + KiSetPriorityThread(OwnerThread, 14, &Released); - //transfer infos from entry 0 to entry 1 and erase entry 0 - Resource->OwnerThreads[1].OwnerThread=Resource->OwnerThreads[0].OwnerThr ead; - Resource->OwnerThreads[1].OwnerCount=Resource->OwnerThreads[0].OwnerCoun t; - Resource->OwnerThreads[0].OwnerThread=0; - Resource->OwnerThreads[0].OwnerCount=0; - /* erase exclusive flag */ - Resource->Flag &= (~ResourceOwnedExclusive); - /* if no shared waiters, that's all */ - if (!oldWaiters) [truncated at 1000 lines; 2257 more skipped]
19 years
1
0
0
0
[ion] 20579: - Change dispatcher lock release to be more like documented in Windows Internals II and to allow an easier move to Queued Spinlock.
by ion@svn.reactos.org
- Change dispatcher lock release to be more like documented in Windows Internals II and to allow an easier move to Queued Spinlock. Modified: trunk/reactos/ntoskrnl/include/internal/ke.h Modified: trunk/reactos/ntoskrnl/ke/wait.c _____ Modified: trunk/reactos/ntoskrnl/include/internal/ke.h --- trunk/reactos/ntoskrnl/include/internal/ke.h 2006-01-05 15:29:08 UTC (rev 20578) +++ trunk/reactos/ntoskrnl/include/internal/ke.h 2006-01-05 15:32:08 UTC (rev 20579) @@ -51,6 +51,7 @@ #ifndef CONFIG_SMP #define KeInitializeDispatcher() #define KeAcquireDispatcherDatabaseLock() KeRaiseIrqlToDpcLevel(); +#define KeReleaseDispatcherDatabaseLock(OldIrql) KiExitDispatcher(OldIrql); #define KeAcquireDispatcherDatabaseLockAtDpcLevel() #define KeReleaseDispatcherDatabaseLockFromDpcLevel() #else @@ -60,6 +61,9 @@ KeAcquireSpinLockAtDpcLevel (&DispatcherDatabaseLock); #define KeReleaseDispatcherDatabaseLockFromDpcLevel() \ KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); +#define KeReleaseDispatcherDatabaseLock(OldIrql) \ + KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); \ + KiExitDispatcher(OldIrql); #endif /* The following macro initializes a dispatcher object's header */ @@ -259,6 +263,10 @@ STDCALL KiAdjustQuantumThread(IN PKTHREAD Thread); +VOID +FASTCALL +KiExitDispatcher(KIRQL OldIrql); + /* gmutex.c ********************************************************************/ VOID @@ -387,10 +395,6 @@ ); VOID -FASTCALL -KeReleaseDispatcherDatabaseLock(KIRQL Irql); - -VOID STDCALL KeInitializeThread( struct _KPROCESS* Process, _____ Modified: trunk/reactos/ntoskrnl/ke/wait.c --- trunk/reactos/ntoskrnl/ke/wait.c 2006-01-05 15:29:08 UTC (rev 20578) +++ trunk/reactos/ntoskrnl/ke/wait.c 2006-01-05 15:32:08 UTC (rev 20579) @@ -798,7 +798,7 @@ VOID FASTCALL -KeReleaseDispatcherDatabaseLock(KIRQL OldIrql) +KiExitDispatcher(KIRQL OldIrql) { /* If it's the idle thread, dispatch */ if (!(KeIsExecutingDpc()) && @@ -807,17 +807,10 @@ (KeGetCurrentThread() == KeGetCurrentPrcb()->IdleThread)) { KiDispatchThreadNoLock(Ready); - KeLowerIrql(OldIrql); } - else - { - /* Just release the spin lock */ -#ifdef CONFIG_SMP - KeReleaseSpinLock(&DispatcherDatabaseLock, OldIrql); -#else - KeLowerIrql(OldIrql); -#endif - } + + /* Lower irql back */ + KeLowerIrql(OldIrql); } /* EOF */
19 years
1
0
0
0
[chorns] 20578: Identify TechBot to allow private messages
by chorns@svn.reactos.org
Identify TechBot to allow private messages Modified: trunk/irc/TechBot/TechBot/App.config Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs Modified: trunk/irc/TechBot/TechBot.Console/App.config Modified: trunk/irc/TechBot/TechBot.Console/Main.cs Modified: trunk/irc/TechBot/TechBot.IRCLibrary/IRC.cs Modified: trunk/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs _____ Modified: trunk/irc/TechBot/TechBot/App.config --- trunk/irc/TechBot/TechBot/App.config 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot/App.config 2006-01-05 15:29:08 UTC (rev 20578) @@ -5,6 +5,7 @@ <add key="IRCServerHostPort" value="6667" /> <add key="IRCChannelNames" value="channel1;channel2" /> <add key="IRCBotName" value="MyBot" /> + <add key="IRCBotPassword" value="MyPassword" /> <add key="ChmPath" value="C:\IRC\TechBot\CHM" /> <add key="MainChm" value="kmarch.chm" /> <add key="NtstatusXml" value="C:\IRC\TechBot\ntstatus.xml" /> _____ Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs --- trunk/irc/TechBot/TechBot/ServiceThread.cs 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot/ServiceThread.cs 2006-01-05 15:29:08 UTC (rev 20578) @@ -11,6 +11,7 @@ private int IRCServerHostPort; private string IRCChannelNames; private string IRCBotName; + private string IRCBotPassword; private string ChmPath; private string MainChm; private string NtstatusXml; @@ -32,6 +33,7 @@ IRCServerHostPort = Int32.Parse(ConfigurationSettings.AppSettings["IRCServerHostPort"]); IRCChannelNames = ConfigurationSettings.AppSettings["IRCChannelNames"]; IRCBotName = ConfigurationSettings.AppSettings["IRCBotName"]; + IRCBotPassword = ConfigurationSettings.AppSettings["IRCBotPassword"]; ChmPath = ConfigurationSettings.AppSettings["ChmPath"]; MainChm = ConfigurationSettings.AppSettings["MainChm"]; NtstatusXml = ConfigurationSettings.AppSettings["NtstatusXml"]; @@ -51,6 +53,7 @@ IRCServerHostPort, IRCChannelNames, IRCBotName, + IRCBotPassword, ChmPath, MainChm, NtstatusXml, _____ Modified: trunk/irc/TechBot/TechBot.Console/App.config --- trunk/irc/TechBot/TechBot.Console/App.config 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot.Console/App.config 2006-01-05 15:29:08 UTC (rev 20578) @@ -5,6 +5,7 @@ <add key="IRCServerHostPort" value="6667" /> <add key="IRCChannelNames" value="channel1;channel2" /> <add key="IRCBotName" value="MyBot" /> + <add key="IRCBotPassword" value="MyPassword" /> <add key="ChmPath" value="C:\IRC\TechBot\CHM" /> <add key="MainChm" value="kmarch.chm" /> <add key="NtstatusXml" value="C:\IRC\TechBot\ntstatus.xml" /> _____ Modified: trunk/irc/TechBot/TechBot.Console/Main.cs --- trunk/irc/TechBot/TechBot.Console/Main.cs 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot.Console/Main.cs 2006-01-05 15:29:08 UTC (rev 20578) @@ -74,6 +74,18 @@ } } + private static string IRCBotPassword + { + get + { + string optionName = "IRCBotPassword"; + string s = ConfigurationSettings.AppSettings[optionName]; + VerifyRequiredOption(optionName, + s); + return s; + } + } + private static string ChmPath { get @@ -176,6 +188,7 @@ IRCServerHostPort, IRCChannelNames, IRCBotName, + IRCBotPassword, ChmPath, MainChm, NtstatusXml, _____ Modified: trunk/irc/TechBot/TechBot.IRCLibrary/IRC.cs --- trunk/irc/TechBot/TechBot.IRCLibrary/IRC.cs 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot.IRCLibrary/IRC.cs 2006-01-05 15:29:08 UTC (rev 20578) @@ -16,6 +16,7 @@ public const string PONG = "PONG"; public const string PRIVMSG = "PRIVMSG"; public const string USER = "USER"; + public const string PASS = "PASS"; public const string RPL_NAMREPLY = "353"; public const string RPL_ENDOFNAMES = "366"; _____ Modified: trunk/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs --- trunk/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs 2006-01-05 15:29:08 UTC (rev 20578) @@ -556,26 +556,40 @@ public void ChangeNick(string nickname) { if (nickname == null) - { throw new ArgumentNullException("nickname", "Nickname cannot be null."); - } /* NICK <nickname> [ <hopcount> ] */ SendMessage(new IrcMessage(IRC.NICK, nickname)); } /// <summary> + /// Submit password to identify user. + /// </summary> + /// <param name="password">Password of registered nick.</param> + private void SubmitPassword(string password) + { + if (password == null) + throw new ArgumentNullException("password", "Password cannot be null."); + + /* PASS <password> */ + SendMessage(new IrcMessage(IRC.PASS, password)); + } + + /// <summary> /// Register. /// </summary> /// <param name="nickname">New nickname.</param> + /// <param name="password">Password. Can be null.</param> /// <param name="realname">Real name. Can be null.</param> - public void Register(string nickname, string realname) + public void Register(string nickname, + string password, + string realname) { if (nickname == null) - { throw new ArgumentNullException("nickname", "Nickname cannot be null."); - } firstPingReceived = false; + if (password != null) + SubmitPassword(password); ChangeNick(nickname); /* OLD: USER <username> <hostname> <servername> <realname> */ /* NEW: USER <user> <mode> <unused> <realname> */ _____ Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs --- trunk/irc/TechBot/TechBot.Library/IrcService.cs 2006-01-05 15:17:54 UTC (rev 20577) +++ trunk/irc/TechBot/TechBot.Library/IrcService.cs 2006-01-05 15:29:08 UTC (rev 20578) @@ -11,6 +11,7 @@ private int port; private string channelnames; private string botname; + private string password; private string chmPath; private string mainChm; private string ntstatusXml; @@ -28,6 +29,7 @@ int port, string channelnames, string botname, + string password, string chmPath, string mainChm, string ntstatusXml, @@ -41,6 +43,10 @@ this.port = port; this.channelnames = channelnames; this.botname = botname; + if (password == null || password.Trim() == "") + this.password = null; + else + this.password = password; this.chmPath = chmPath; this.mainChm = mainChm; this.ntstatusXml = ntstatusXml; @@ -72,7 +78,7 @@ hostname, port)); client.Connect(hostname, port); System.Console.WriteLine("Connected..."); - client.Register(botname, null); + client.Register(botname, password, null); System.Console.WriteLine(String.Format("Registered as {0}...", botname)); JoinChannels();
19 years
1
0
0
0
[ion] 20577: - Fix build.
by ion@svn.reactos.org
- Fix build. Modified: trunk/reactos/hal/halx86/generic/generic.xml Added: trunk/reactos/hal/halx86/generic/spinlock.c Modified: trunk/reactos/hal/halx86/up/halup.xml Deleted: trunk/reactos/hal/halx86/up/spinlock.c _____ Modified: trunk/reactos/hal/halx86/generic/generic.xml --- trunk/reactos/hal/halx86/generic/generic.xml 2006-01-05 13:59:11 UTC (rev 20576) +++ trunk/reactos/hal/halx86/generic/generic.xml 2006-01-05 15:17:54 UTC (rev 20577) @@ -34,6 +34,7 @@ <file>irql.c</file> <file>processor.c</file> <file>resource.c</file> + <file>spinlock.c</file> </module> <module name="hal_generic_pc" type="objectlibrary"> <include base="hal_generic_pc">../include</include> _____ Copied: trunk/reactos/hal/halx86/generic/spinlock.c (from rev 20576, trunk/reactos/hal/halx86/up/spinlock.c) _____ Modified: trunk/reactos/hal/halx86/up/halup.xml --- trunk/reactos/hal/halx86/up/halup.xml 2006-01-05 13:59:11 UTC (rev 20576) +++ trunk/reactos/hal/halx86/up/halup.xml 2006-01-05 15:17:54 UTC (rev 20577) @@ -11,6 +11,5 @@ <library>hal_generic_pc</library> <library>ntoskrnl</library> <file>halinit_up.c</file> - <file>spinlock.c</file> <file>halup.rc</file> </module> _____ Deleted: trunk/reactos/hal/halx86/up/spinlock.c --- trunk/reactos/hal/halx86/up/spinlock.c 2006-01-05 13:59:11 UTC (rev 20576) +++ trunk/reactos/hal/halx86/up/spinlock.c 2006-01-05 15:17:54 UTC (rev 20577) @@ -1,166 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/hal/halx86/up/spinlock.c - * PURPOSE: Implements spinlocks - * PROGRAMMER: Alex Ionescu (alex(a)relsoft.net) - */ - -/* INCLUDES ****************************************************************/ - -#include <hal.h> -#define NDEBUG -#include <debug.h> - -#undef KeAcquireSpinLock -#undef KeReleaseSpinLock - -/* FUNCTIONS ***************************************************************/ - -/* - * @implemented - */ -VOID -NTAPI -KeAcquireSpinLock(PKSPIN_LOCK SpinLock, - PKIRQL OldIrql) -{ - /* Call the fastcall function */ - *OldIrql = KfAcquireSpinLock(SpinLock); -} - -/* - * @implemented - */ -KIRQL -FASTCALL -KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) -{ - /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -/* - * @implemented - */ -VOID -NTAPI -KeReleaseSpinLock(PKSPIN_LOCK SpinLock, - KIRQL NewIrql) -{ - /* Call the fastcall function */ - KfReleaseSpinLock(SpinLock, NewIrql); -} - -/* - * @implemented - */ -KIRQL -FASTCALL -KfAcquireSpinLock(PKSPIN_LOCK SpinLock) -{ - /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -/* - * @implemented - */ -VOID -FASTCALL -KfReleaseSpinLock(PKSPIN_LOCK SpinLock, - KIRQL OldIrql) -{ - /* Simply lower IRQL back */ - KfLowerIrql(OldIrql); -} - -/* - * @implemented - */ -KIRQL -FASTCALL -KeAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -/* - * @implemented - */ -KIRQL -FASTCALL -KeAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -/* - * @implemented - */ -VOID -FASTCALL -KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock, - IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - /* Simply raise to dispatch */ - LockHandle->OldIrql = KfRaiseIrql(DISPATCH_LEVEL); -} - -/* - * @implemented - */ -VOID -FASTCALL -KeReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, - IN KIRQL OldIrql) -{ - /* Simply lower IRQL back */ - KfLowerIrql(OldIrql); -} - -/* - * @implemented - */ -VOID -FASTCALL -KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - /* Simply lower IRQL back */ - KfLowerIrql(LockHandle->OldIrql); -} - -/* - * @implemented - */ -BOOLEAN -FASTCALL -KeTryToAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle, - IN PKIRQL OldIrql) -{ - /* Simply raise to dispatch */ - *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); - - /* Always return true on UP Machines */ - return TRUE; -} - -/* - * @implemented - */ -BOOLEAN -FASTCALL -KeTryToAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, - IN PKIRQL OldIrql) -{ - /* Simply raise to dispatch */ - *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); - - /* Always return true on UP Machines */ - return TRUE; -} - - -/* EOF */
19 years
1
0
0
0
[ion] 20576: - Disable commented out define-check which i had only commented to check building.
by ion@svn.reactos.org
- Disable commented out define-check which i had only commented to check building. Modified: trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S _____ Modified: trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S --- trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S 2006-01-05 13:51:06 UTC (rev 20575) +++ trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S 2006-01-05 13:59:11 UTC (rev 20576) @@ -246,10 +246,10 @@ pop [ebx+KPCR_EXCEPTION_LIST] /* Return */ -//#ifdef CONFIG_SMP +#ifdef CONFIG_SMP mov ecx, offset _DispatcherDatabaseLock call @KefReleaseSpinLockFromDpcLevel@4 -//#endif +#endif ret /*++
19 years
1
0
0
0
[ion] 20575: - Separate UP and MP spinlock functions.
by ion@svn.reactos.org
- Separate UP and MP spinlock functions. - Optimize UP spinlock functions so they don't call ntoskrnl anymore and only raise/lower irql. - Implemented Queued Spinlocks and In-Stack Queued Spinlocks for UP machines. * Implemented KeAcquireInStackQueuedSpinLock, KeReleaseInStackQueuedSpinLock, KeAcquireQueuedSpinLock, KeReleaseQueuedSpinLock, KeTryToAcquireQueuedSpinLock, KeTryToAcquireQueuedSpinLockRaiseToSynch, KeAcquireQueuedSpinLockRaisetoSynch. Modified: trunk/reactos/hal/halx86/generic/generic.xml Deleted: trunk/reactos/hal/halx86/generic/spinlock.c Modified: trunk/reactos/hal/halx86/mp/halmp.xml Added: trunk/reactos/hal/halx86/mp/spinlock.c Modified: trunk/reactos/hal/halx86/up/halup.xml Added: trunk/reactos/hal/halx86/up/spinlock.c _____ Modified: trunk/reactos/hal/halx86/generic/generic.xml --- trunk/reactos/hal/halx86/generic/generic.xml 2006-01-05 13:40:05 UTC (rev 20574) +++ trunk/reactos/hal/halx86/generic/generic.xml 2006-01-05 13:51:06 UTC (rev 20575) @@ -18,7 +18,6 @@ <file>pci.c</file> <file>portio.c</file> <file>reboot.c</file> - <file>spinlock.c</file> <file>sysbus.c</file> <file>sysinfo.c</file> <file>time.c</file> _____ Deleted: trunk/reactos/hal/halx86/generic/spinlock.c --- trunk/reactos/hal/halx86/generic/spinlock.c 2006-01-05 13:40:05 UTC (rev 20574) +++ trunk/reactos/hal/halx86/generic/spinlock.c 2006-01-05 13:51:06 UTC (rev 20575) @@ -1,133 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/hal/x86/spinlock.c - * PURPOSE: Implements spinlocks - * PROGRAMMER: David Welch (welch(a)cwcom.net) - * Eric Kohl (ekohl(a)rz-online.de) - * UPDATE HISTORY: - * 09/06/2000 Created - */ - -/* - * NOTE: On a uniprocessor machine spinlocks are implemented by raising - * the irq level - */ - -/* INCLUDES ****************************************************************/ - -#include <hal.h> -#define NDEBUG -#include <debug.h> - -/* Hmm, needed for KDBG := 1. Why? */ -#undef KeGetCurrentIrql - -/* FUNCTIONS ***************************************************************/ - -#undef KeAcquireSpinLock -VOID STDCALL -KeAcquireSpinLock ( - PKSPIN_LOCK SpinLock, - PKIRQL OldIrql - ) -/* - * FUNCTION: Acquires a spinlock - * ARGUMENTS: - * SpinLock = Spinlock to acquire - * OldIrql (OUT) = Caller supplied storage for the previous irql - */ -{ - *OldIrql = KfAcquireSpinLock(SpinLock); -} - -KIRQL FASTCALL -KeAcquireSpinLockRaiseToSynch ( - PKSPIN_LOCK SpinLock - ) -{ - KIRQL OldIrql; - - OldIrql = KfRaiseIrql(SYNCH_LEVEL); - KiAcquireSpinLock(SpinLock); - - return OldIrql; -} - -#undef KeReleaseSpinLock -VOID STDCALL -KeReleaseSpinLock ( - PKSPIN_LOCK SpinLock, - KIRQL NewIrql - ) -/* - * FUNCTION: Releases a spinlock - * ARGUMENTS: - * SpinLock = Spinlock to release - * NewIrql = Irql level before acquiring the spinlock - */ -{ - KfReleaseSpinLock(SpinLock, NewIrql); -} - -KIRQL FASTCALL -KfAcquireSpinLock ( - PKSPIN_LOCK SpinLock - ) -{ - KIRQL OldIrql; - - ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); - - OldIrql = KfRaiseIrql(DISPATCH_LEVEL); - KiAcquireSpinLock(SpinLock); - - return OldIrql; -} - -VOID FASTCALL -KfReleaseSpinLock ( - PKSPIN_LOCK SpinLock, - KIRQL NewIrql - ) -/* - * FUNCTION: Releases a spinlock - * ARGUMENTS: - * SpinLock = Spinlock to release - * NewIrql = Irql level before acquiring the spinlock - */ -{ - ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL || KeGetCurrentIrql() == SYNCH_LEVEL); - KiReleaseSpinLock(SpinLock); - KfLowerIrql(NewIrql); -} - - -/* - * @unimplemented - */ -VOID -FASTCALL -KeAcquireInStackQueuedSpinLock( - IN PKSPIN_LOCK SpinLock, - IN PKLOCK_QUEUE_HANDLE LockHandle - ) -{ - UNIMPLEMENTED; -} - - -/* - * @unimplemented - */ -VOID -FASTCALL -KeReleaseInStackQueuedSpinLock( - IN PKLOCK_QUEUE_HANDLE LockHandle - ) -{ - UNIMPLEMENTED; -} - -/* EOF */ _____ Modified: trunk/reactos/hal/halx86/mp/halmp.xml --- trunk/reactos/hal/halx86/mp/halmp.xml 2006-01-05 13:40:05 UTC (rev 20574) +++ trunk/reactos/hal/halx86/mp/halmp.xml 2006-01-05 13:51:06 UTC (rev 20575) @@ -20,5 +20,6 @@ <file>mpsirql.c</file> <file>processor_mp.c</file> <file>resource_mp.c</file> + <file>spinlock.c</file> <file>halmp.rc</file> </module> _____ Copied: trunk/reactos/hal/halx86/mp/spinlock.c (from rev 20568, trunk/reactos/hal/halx86/generic/spinlock.c) _____ Modified: trunk/reactos/hal/halx86/up/halup.xml --- trunk/reactos/hal/halx86/up/halup.xml 2006-01-05 13:40:05 UTC (rev 20574) +++ trunk/reactos/hal/halx86/up/halup.xml 2006-01-05 13:51:06 UTC (rev 20575) @@ -11,5 +11,6 @@ <library>hal_generic_pc</library> <library>ntoskrnl</library> <file>halinit_up.c</file> + <file>spinlock.c</file> <file>halup.rc</file> </module> _____ Copied: trunk/reactos/hal/halx86/up/spinlock.c (from rev 20568, trunk/reactos/hal/halx86/generic/spinlock.c) --- trunk/reactos/hal/halx86/generic/spinlock.c 2006-01-05 04:26:55 UTC (rev 20568) +++ trunk/reactos/hal/halx86/up/spinlock.c 2006-01-05 13:51:06 UTC (rev 20575) @@ -0,0 +1,166 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/hal/halx86/up/spinlock.c + * PURPOSE: Implements spinlocks + * PROGRAMMER: Alex Ionescu (alex(a)relsoft.net) + */ + +/* INCLUDES ****************************************************************/ + +#include <hal.h> +#define NDEBUG +#include <debug.h> + +#undef KeAcquireSpinLock +#undef KeReleaseSpinLock + +/* FUNCTIONS ***************************************************************/ + +/* + * @implemented + */ +VOID +NTAPI +KeAcquireSpinLock(PKSPIN_LOCK SpinLock, + PKIRQL OldIrql) +{ + /* Call the fastcall function */ + *OldIrql = KfAcquireSpinLock(SpinLock); +} + +/* + * @implemented + */ +KIRQL +FASTCALL +KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) +{ + /* Simply raise to dispatch */ + return KfRaiseIrql(DISPATCH_LEVEL); +} + +/* + * @implemented + */ +VOID +NTAPI +KeReleaseSpinLock(PKSPIN_LOCK SpinLock, + KIRQL NewIrql) +{ + /* Call the fastcall function */ + KfReleaseSpinLock(SpinLock, NewIrql); +} + +/* + * @implemented + */ +KIRQL +FASTCALL +KfAcquireSpinLock(PKSPIN_LOCK SpinLock) +{ + /* Simply raise to dispatch */ + return KfRaiseIrql(DISPATCH_LEVEL); +} + +/* + * @implemented + */ +VOID +FASTCALL +KfReleaseSpinLock(PKSPIN_LOCK SpinLock, + KIRQL OldIrql) +{ + /* Simply lower IRQL back */ + KfLowerIrql(OldIrql); +} + +/* + * @implemented + */ +KIRQL +FASTCALL +KeAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + /* Simply raise to dispatch */ + return KfRaiseIrql(DISPATCH_LEVEL); +} + +/* + * @implemented + */ +KIRQL +FASTCALL +KeAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + /* Simply raise to dispatch */ + return KfRaiseIrql(DISPATCH_LEVEL); +} + +/* + * @implemented + */ +VOID +FASTCALL +KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock, + IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + /* Simply raise to dispatch */ + LockHandle->OldIrql = KfRaiseIrql(DISPATCH_LEVEL); +} + +/* + * @implemented + */ +VOID +FASTCALL +KeReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, + IN KIRQL OldIrql) +{ + /* Simply lower IRQL back */ + KfLowerIrql(OldIrql); +} + +/* + * @implemented + */ +VOID +FASTCALL +KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + /* Simply lower IRQL back */ + KfLowerIrql(LockHandle->OldIrql); +} + +/* + * @implemented + */ +BOOLEAN +FASTCALL +KeTryToAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle, + IN PKIRQL OldIrql) +{ + /* Simply raise to dispatch */ + *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); + + /* Always return true on UP Machines */ + return TRUE; +} + +/* + * @implemented + */ +BOOLEAN +FASTCALL +KeTryToAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, + IN PKIRQL OldIrql) +{ + /* Simply raise to dispatch */ + *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); + + /* Always return true on UP Machines */ + return TRUE; +} + + +/* EOF */
19 years
1
0
0
0
[hpoussin] 20574: Add some exports to ntdll
by hpoussin@svn.reactos.org
Add some exports to ntdll Modified: trunk/reactos/lib/ntdll/def/ntdll.def Modified: trunk/reactos/lib/rtl/exception.c Modified: trunk/reactos/ntoskrnl/se/token.c Modified: trunk/reactos/tools/nci/sysfuncs.lst _____ Modified: trunk/reactos/lib/ntdll/def/ntdll.def --- trunk/reactos/lib/ntdll/def/ntdll.def 2006-01-05 13:12:48 UTC (rev 20573) +++ trunk/reactos/lib/ntdll/def/ntdll.def 2006-01-05 13:40:05 UTC (rev 20574) @@ -121,6 +121,7 @@ NtGetContextThread@8 NtGetPlugPlayEvent@16 NtGetTickCount@0 +NtImpersonateAnonymousToken@4 NtImpersonateClientOfPort@8 NtImpersonateThread@12 NtInitializeRegistry@4 @@ -209,6 +210,7 @@ NtReplyPort@8 NtReplyWaitReplyPort@8 NtReplyWaitReceivePort@16 +NtReplyWaitReceivePortEx@20 NtRequestPort@8 NtRequestWaitReplyPort@12 NtResetEvent@8 @@ -318,7 +320,7 @@ RtlAreBitsClear@12 RtlAreBitsSet@12 RtlAssert@16 -;RtlCaptureStackBackTrace +RtlCaptureStackBackTrace@16 RtlCharToInteger@12 RtlCheckRegistryKey@8 RtlClearAllBits@4 @@ -474,6 +476,7 @@ RtlGetProcessHeaps@8 RtlGetSaclSecurityDescriptor@16 RtlGetSecurityDescriptorRMControl@8 +RtlGetSetBootStatusData@24 ;RtlGetUserInfoHeap RtlGetVersion@4 RtlHashUnicodeString@16 @@ -546,6 +549,7 @@ RtlLengthSecurityDescriptor@4 RtlLengthSid@4 RtlLocalTimeToSystemTime@8 +RtlLockBootStatusData@4 RtlLockHeap@4 RtlLookupAtomInAtomTable@12 RtlLookupElementGenericTable@8 @@ -647,6 +651,7 @@ RtlTryEnterCriticalSection@4 @RtlUlongByteSwap@4 @RtlUlonglongByteSwap@8 +RtlUnhandledExceptionFilter@4 RtlUnicodeStringToAnsiSize@4=RtlxUnicodeStringToAnsiSize@4 RtlUnicodeStringToAnsiString@12 RtlUnicodeStringToCountedOemString@12 @@ -658,6 +663,7 @@ RtlUnicodeToMultiByteSize@12 RtlUnicodeToOemN@20 RtlUniform@4 +RtlUnlockBootStatusData@4 RtlUnlockHeap@4 RtlUnwind@16 RtlUpcaseUnicodeChar@4 @@ -674,6 +680,7 @@ ;RtlUsageHeap @RtlUshortByteSwap@4 RtlValidAcl@4 +RtlValidRelativeSecurityDescriptor@12 RtlValidSecurityDescriptor@4 RtlValidSid@4 RtlValidateHeap@12 @@ -764,6 +771,7 @@ ZwGetContextThread@8 ZwGetPlugPlayEvent@16 ZwGetTickCount@0 +ZwImpersonateAnonymousToken@4 ZwImpersonateClientOfPort@8 ZwImpersonateThread@12 ZwInitializeRegistry@4 @@ -847,6 +855,7 @@ ZwReplaceKey@12 ZwReplyPort@8 ZwReplyWaitReceivePort@16 +ZwReplyWaitReceivePortEx@20 ZwReplyWaitReplyPort@8 ZwRequestPort@8 ZwRequestWaitReplyPort@12 _____ Modified: trunk/reactos/lib/rtl/exception.c --- trunk/reactos/lib/rtl/exception.c 2006-01-05 13:12:48 UTC (rev 20573) +++ trunk/reactos/lib/rtl/exception.c 2006-01-05 13:40:05 UTC (rev 20574) @@ -136,4 +136,15 @@ return 0; } +/* + * @unimplemented + */ +LONG +NTAPI +RtlUnhandledExceptionFilter(IN struct _EXCEPTION_POINTERS* ExceptionInfo) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + /* EOF */ _____ Modified: trunk/reactos/ntoskrnl/se/token.c --- trunk/reactos/ntoskrnl/se/token.c 2006-01-05 13:12:48 UTC (rev 20573) +++ trunk/reactos/ntoskrnl/se/token.c 2006-01-05 13:40:05 UTC (rev 20574) @@ -2363,6 +2363,20 @@ /* + * @unimplemented + */ +NTSTATUS +STDCALL +NtImpersonateAnonymousToken( + IN HANDLE Thread + ) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* * @implemented */ NTSTATUS _____ Modified: trunk/reactos/tools/nci/sysfuncs.lst --- trunk/reactos/tools/nci/sysfuncs.lst 2006-01-05 13:12:48 UTC (rev 20573) +++ trunk/reactos/tools/nci/sysfuncs.lst 2006-01-05 13:40:05 UTC (rev 20574) @@ -69,6 +69,7 @@ NtGetContextThread 2 NtGetPlugPlayEvent 4 NtGetTickCount 0 +NtImpersonateAnonymousToken 1 NtImpersonateClientOfPort 2 NtImpersonateThread 3 NtInitializeRegistry 1 @@ -164,6 +165,7 @@ NtReplaceKey 3 NtReplyPort 2 NtReplyWaitReceivePort 4 +NtReplyWaitReceivePortEx 5 NtReplyWaitReplyPort 2 NtRequestPort 2 NtRequestWaitReplyPort 3
19 years
1
0
0
0
← Newer
1
...
48
49
50
51
52
53
54
...
59
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Results per page:
10
25
50
100
200