mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
My first CVS commit. Hope I get this right. I did put a few files in the CVS dir manually... Innocent mistake... I'll clean it up after I'm done with this. Sorry!
Some of NTOSKRNL now compiles with __USE_W32API enabled. Note that this commit is purely so I know what to do, and also to allow other people to continue working on this if they wish to do so. I will continue hacking away at it. It's not complete yet, but I've ensured that the changes I have made aren't incompatible with ReactOS as it stands at the moment. It compiles without __USE_W32API fine. * Modified the tools/depend.mk file to force the use of forward slash (SEH variable?) otherwise it tries to run "toolsdepend.exe" without a slash. * Moved a couple of routines from include/ddk/halfuncs.h to hal/halx86/include/hal.h * Fixed conflicting types in ntoskrnl/ex/interlck.c * Replaced .a with .u, #undef'd "lite" functions and defined NONAMELESSUNION in ntoskrnl/ex/resource.c so that it compiles with Win 32 API * Added some more conditional defines to include/shared_data.h, ntoskrnl/include/internal/mm.h (and i386/mm.h), ntoskrnl/include/internal/ps.h * Replaced .a with .u for OWNER_ENTRY and ERESOURCE in include/ddk/extypes.h (so they are compatible with Win 32 API headers) * Various other small adjustments Hope this works! svn path=/trunk/; revision=5130
This commit is contained in:
parent
5522330a11
commit
acd21b1447
14 changed files with 145 additions and 56 deletions
|
@ -50,4 +50,12 @@ HalpQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
|
||||||
OUT PULONG ReturnedLength);
|
OUT PULONG ReturnedLength);
|
||||||
|
|
||||||
|
|
||||||
|
/* Non-standard functions */
|
||||||
|
VOID STDCALL
|
||||||
|
HalReleaseDisplayOwnership();
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
HalQueryDisplayOwnership();
|
||||||
|
|
||||||
|
|
||||||
#endif /* __INTERNAL_HAL_HAL_H */
|
#endif /* __INTERNAL_HAL_HAL_H */
|
||||||
|
|
|
@ -441,7 +441,8 @@ ExIsResourceAcquiredExclusiveLite (
|
||||||
PERESOURCE Resource
|
PERESOURCE Resource
|
||||||
);
|
);
|
||||||
|
|
||||||
ULONG
|
// was ULONG
|
||||||
|
USHORT
|
||||||
STDCALL
|
STDCALL
|
||||||
ExIsResourceAcquiredSharedLite (
|
ExIsResourceAcquiredSharedLite (
|
||||||
PERESOURCE Resource
|
PERESOURCE Resource
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: extypes.h,v 1.16 2003/07/12 10:24:45 chorns Exp $ */
|
/* $Id: extypes.h,v 1.17 2003/07/15 16:26:18 silverblade Exp $ */
|
||||||
|
|
||||||
#ifndef __INCLUDE_DDK_EXTYPES_H
|
#ifndef __INCLUDE_DDK_EXTYPES_H
|
||||||
#define __INCLUDE_DDK_EXTYPES_H
|
#define __INCLUDE_DDK_EXTYPES_H
|
||||||
|
@ -27,7 +27,7 @@ typedef struct _OWNER_ENTRY
|
||||||
{
|
{
|
||||||
LONG OwnerCount;
|
LONG OwnerCount;
|
||||||
ULONG TableSize;
|
ULONG TableSize;
|
||||||
} a;
|
} u;
|
||||||
} OWNER_ENTRY, *POWNER_ENTRY;
|
} OWNER_ENTRY, *POWNER_ENTRY;
|
||||||
|
|
||||||
typedef struct _ERESOURCE
|
typedef struct _ERESOURCE
|
||||||
|
@ -46,7 +46,7 @@ typedef struct _ERESOURCE
|
||||||
{
|
{
|
||||||
PVOID Address;
|
PVOID Address;
|
||||||
ULONG CreatorBackTraceIndex;
|
ULONG CreatorBackTraceIndex;
|
||||||
} a;
|
} u;
|
||||||
KSPIN_LOCK SpinLock;
|
KSPIN_LOCK SpinLock;
|
||||||
} ERESOURCE, *PERESOURCE;
|
} ERESOURCE, *PERESOURCE;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef __INCLUDE_DDK_HALFUNCS_H
|
#ifndef __INCLUDE_DDK_HALFUNCS_H
|
||||||
#define __INCLUDE_DDK_HALFUNCS_H
|
#define __INCLUDE_DDK_HALFUNCS_H
|
||||||
/* $Id: halfuncs.h,v 1.8 2003/07/12 10:24:45 chorns Exp $ */
|
/* $Id: halfuncs.h,v 1.9 2003/07/15 16:26:18 silverblade Exp $ */
|
||||||
|
|
||||||
#include <ntos/haltypes.h>
|
#include <ntos/haltypes.h>
|
||||||
|
|
||||||
|
@ -98,8 +98,13 @@ HalGetBusDataByOffset(BUS_DATA_TYPE BusDataType,
|
||||||
ULONG Length);
|
ULONG Length);
|
||||||
|
|
||||||
/* Is this function really exported ?? */
|
/* Is this function really exported ?? */
|
||||||
ULONG
|
//ULONG
|
||||||
HalGetDmaAlignmentRequirement(VOID);
|
//HalGetDmaAlignmentRequirement(VOID);
|
||||||
|
// NTOSAPI
|
||||||
|
// DDKAPI
|
||||||
|
ULONG STDCALL
|
||||||
|
HalGetDmaAlignmentRequirement(
|
||||||
|
VOID);
|
||||||
|
|
||||||
BOOLEAN STDCALL
|
BOOLEAN STDCALL
|
||||||
HalGetEnvironmentVariable(IN PCH Name,
|
HalGetEnvironmentVariable(IN PCH Name,
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
|
|
||||||
/* KERNEL FUNCTIONS ********************************************************/
|
/* KERNEL FUNCTIONS ********************************************************/
|
||||||
|
|
||||||
|
#ifndef KeFlushIoBuffers
|
||||||
#define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation)
|
#define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation)
|
||||||
|
#endif
|
||||||
|
|
||||||
VOID STDCALL KeAttachProcess (struct _EPROCESS* Process);
|
VOID STDCALL KeAttachProcess (struct _EPROCESS* Process);
|
||||||
|
|
||||||
|
@ -21,8 +23,24 @@ struct _KPROCESS* KeGetCurrentProcess(VOID);
|
||||||
VOID STDCALL KeAcquireSpinLock (PKSPIN_LOCK SpinLock,
|
VOID STDCALL KeAcquireSpinLock (PKSPIN_LOCK SpinLock,
|
||||||
PKIRQL OldIrql);
|
PKIRQL OldIrql);
|
||||||
|
|
||||||
VOID STDCALL KeAcquireSpinLockAtDpcLevel (PKSPIN_LOCK SpinLock);
|
//VOID STDCALL KeAcquireSpinLockAtDpcLevel (PKSPIN_LOCK SpinLock);
|
||||||
|
|
||||||
|
//NTOSAPI
|
||||||
|
//DDKFASTAPI
|
||||||
|
STDCALL
|
||||||
|
VOID
|
||||||
|
KeAcquireSpinLockAtDpcLevel(
|
||||||
|
IN PKSPIN_LOCK SpinLock);
|
||||||
|
|
||||||
|
#define KefAcquireSpinLockAtDpcLevel KeAcquireSpinLockAtDpcLevel
|
||||||
|
|
||||||
|
//NTOSAPI
|
||||||
|
//DDKFASTAPI
|
||||||
|
STDCALL
|
||||||
|
VOID
|
||||||
|
KeReleaseSpinLockFromDpcLevel(
|
||||||
|
IN PKSPIN_LOCK SpinLock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Brings the system down in a controlled manner when an
|
* FUNCTION: Brings the system down in a controlled manner when an
|
||||||
* inconsistency that might otherwise cause corruption has been detected
|
* inconsistency that might otherwise cause corruption has been detected
|
||||||
|
@ -77,14 +95,14 @@ VOID STDCALL KeFlushWriteBuffer (VOID);
|
||||||
|
|
||||||
KIRQL STDCALL KeGetCurrentIrql (VOID);
|
KIRQL STDCALL KeGetCurrentIrql (VOID);
|
||||||
|
|
||||||
|
#ifndef __USE_W32API
|
||||||
ULONG KeGetCurrentProcessorNumber(VOID);
|
ULONG KeGetCurrentProcessorNumber(VOID);
|
||||||
|
ULONG KeGetDcacheFillSize(VOID);
|
||||||
|
ULONG STDCALL KeGetPreviousMode (VOID);
|
||||||
|
#endif
|
||||||
|
|
||||||
struct _KTHREAD* STDCALL KeGetCurrentThread (VOID);
|
struct _KTHREAD* STDCALL KeGetCurrentThread (VOID);
|
||||||
|
|
||||||
ULONG KeGetDcacheFillSize(VOID);
|
|
||||||
|
|
||||||
ULONG STDCALL KeGetPreviousMode (VOID);
|
|
||||||
|
|
||||||
VOID STDCALL KeInitializeApc (IN PKAPC Apc,
|
VOID STDCALL KeInitializeApc (IN PKAPC Apc,
|
||||||
IN PKTHREAD Thread,
|
IN PKTHREAD Thread,
|
||||||
IN UCHAR StateIndex,
|
IN UCHAR StateIndex,
|
||||||
|
@ -101,8 +119,10 @@ VOID STDCALL KeInitializeApc (IN PKAPC Apc,
|
||||||
* PKBUGCHECK_CALLBACK_RECORD CallbackRecord
|
* PKBUGCHECK_CALLBACK_RECORD CallbackRecord
|
||||||
* );
|
* );
|
||||||
*/
|
*/
|
||||||
|
#ifndef KeInitializeCallbackRecord
|
||||||
#define KeInitializeCallbackRecord(CallbackRecord) \
|
#define KeInitializeCallbackRecord(CallbackRecord) \
|
||||||
(CallbackRecord)->State = BufferEmpty
|
(CallbackRecord)->State = BufferEmpty
|
||||||
|
#endif
|
||||||
|
|
||||||
VOID STDCALL KeInitializeDeviceQueue (PKDEVICE_QUEUE DeviceQueue);
|
VOID STDCALL KeInitializeDeviceQueue (PKDEVICE_QUEUE DeviceQueue);
|
||||||
|
|
||||||
|
@ -298,11 +318,13 @@ KeReleaseSpinLock (
|
||||||
KIRQL NewIrql
|
KIRQL NewIrql
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#ifndef __USE_W32API
|
||||||
VOID
|
VOID
|
||||||
STDCALL
|
STDCALL
|
||||||
KeReleaseSpinLockFromDpcLevel (
|
KeReleaseSpinLockFromDpcLevel (
|
||||||
PKSPIN_LOCK Spinlock
|
PKSPIN_LOCK Spinlock
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
PKDEVICE_QUEUE_ENTRY
|
PKDEVICE_QUEUE_ENTRY
|
||||||
STDCALL
|
STDCALL
|
||||||
|
|
|
@ -58,7 +58,9 @@ typedef struct _KUSER_SHARED_DATA
|
||||||
#define USER_SHARED_DATA (0x7FFE0000)
|
#define USER_SHARED_DATA (0x7FFE0000)
|
||||||
|
|
||||||
#if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__)
|
#if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__)
|
||||||
#define KI_USER_SHARED_DATA (0xFFDF0000)
|
#ifndef __USE_W32API
|
||||||
|
#define KI_USER_SHARED_DATA (0xFFDF0000)
|
||||||
|
#endif
|
||||||
#ifdef SharedUserData
|
#ifdef SharedUserData
|
||||||
#undef SharedUserData
|
#undef SharedUserData
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -113,7 +113,7 @@ typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD;
|
||||||
#ifdef __NTOSKRNL__
|
#ifdef __NTOSKRNL__
|
||||||
#define EXCEPTION_EXECUTE_HANDLER 1
|
#define EXCEPTION_EXECUTE_HANDLER 1
|
||||||
#define EXCEPTION_CONTINUE_SEARCH 0
|
#define EXCEPTION_CONTINUE_SEARCH 0
|
||||||
#define EXCEPTION_CONTINUE_EXECUTION -1
|
// #define EXCEPTION_CONTINUE_EXECUTION -1
|
||||||
#endif /* __NTOSKRNL__ */
|
#endif /* __NTOSKRNL__ */
|
||||||
#endif /* _GNU_H_WINDOWS32_DEFINES */
|
#endif /* _GNU_H_WINDOWS32_DEFINES */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.100 2003/07/11 20:55:43 gvg Exp $
|
# $Id: Makefile,v 1.101 2003/07/15 16:26:18 silverblade Exp $
|
||||||
#
|
#
|
||||||
# ReactOS Operating System
|
# ReactOS Operating System
|
||||||
#
|
#
|
||||||
|
@ -40,6 +40,9 @@ ASFLAGS += -I./include -I$(SDK_PATH_INC)
|
||||||
CFLAGS += -I./include -I$(SDK_PATH_INC) -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
|
CFLAGS += -I./include -I$(SDK_PATH_INC) -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# ASFLAGS += -D__USE_W32API -D_NTOSKRNL_
|
||||||
|
# CFLAGS += -D__USE_W32API -D_NTOSKRNL_
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build configuration
|
# Build configuration
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: resource.c,v 1.23 2003/07/11 01:23:14 royce Exp $
|
/* $Id: resource.c,v 1.24 2003/07/15 16:26:18 silverblade Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -36,6 +36,11 @@
|
||||||
#define ResourceOwnedExclusive 0x80
|
#define ResourceOwnedExclusive 0x80
|
||||||
#define ResourceDisableBoost 0x08
|
#define ResourceDisableBoost 0x08
|
||||||
|
|
||||||
|
#ifdef __USE_W32API
|
||||||
|
#define NONAMELESSUNION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* INCLUDES *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
#include <ddk/ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
|
@ -70,6 +75,10 @@ ExTryToAcquireResourceExclusiveLite (
|
||||||
return(ExAcquireResourceExclusiveLite(Resource,FALSE));
|
return(ExAcquireResourceExclusiveLite(Resource,FALSE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ExAcquireResourceExclusive
|
||||||
|
#undef ExAcquireResourceExclusive
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -83,6 +92,7 @@ ExAcquireResourceExclusive (
|
||||||
return(ExAcquireResourceExclusiveLite(Resource,Wait));
|
return(ExAcquireResourceExclusiveLite(Resource,Wait));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -115,7 +125,7 @@ ExAcquireResourceExclusiveLite (
|
||||||
&& Resource->OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread())
|
&& Resource->OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread())
|
||||||
{
|
{
|
||||||
/* it's ok : same lock for same thread */
|
/* it's ok : same lock for same thread */
|
||||||
Resource->OwnerThreads[0].a.OwnerCount++;
|
Resource->OwnerThreads[0].u.OwnerCount++;
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n");
|
DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n");
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
@ -152,7 +162,7 @@ ExAcquireResourceExclusiveLite (
|
||||||
Resource->Flag |= ResourceOwnedExclusive;
|
Resource->Flag |= ResourceOwnedExclusive;
|
||||||
Resource->ActiveCount = 1;
|
Resource->ActiveCount = 1;
|
||||||
Resource->OwnerThreads[0].OwnerThread = ExGetCurrentResourceThread();
|
Resource->OwnerThreads[0].OwnerThread = ExGetCurrentResourceThread();
|
||||||
Resource->OwnerThreads[0].a.OwnerCount = 1;
|
Resource->OwnerThreads[0].u.OwnerCount = 1;
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n");
|
DPRINT("ExAcquireResourceExclusiveLite() = TRUE\n");
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
@ -172,8 +182,8 @@ static BOOLEAN EiRemoveSharedOwner(PERESOURCE Resource,
|
||||||
|
|
||||||
if (Resource->OwnerThreads[1].OwnerThread == ResourceThreadId)
|
if (Resource->OwnerThreads[1].OwnerThread == ResourceThreadId)
|
||||||
{
|
{
|
||||||
Resource->OwnerThreads[1].a.OwnerCount--;
|
Resource->OwnerThreads[1].u.OwnerCount--;
|
||||||
if (Resource->OwnerThreads[1].a.OwnerCount == 0)
|
if (Resource->OwnerThreads[1].u.OwnerCount == 0)
|
||||||
{
|
{
|
||||||
Resource->ActiveCount--;
|
Resource->ActiveCount--;
|
||||||
Resource->OwnerThreads[1].OwnerThread = 0;
|
Resource->OwnerThreads[1].OwnerThread = 0;
|
||||||
|
@ -187,12 +197,12 @@ static BOOLEAN EiRemoveSharedOwner(PERESOURCE Resource,
|
||||||
return(FALSE);;
|
return(FALSE);;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<Resource->OwnerThreads[1].a.TableSize; i++)
|
for (i=0; i<Resource->OwnerThreads[1].u.TableSize; i++)
|
||||||
{
|
{
|
||||||
if (Resource->OwnerTable[i].OwnerThread == ResourceThreadId)
|
if (Resource->OwnerTable[i].OwnerThread == ResourceThreadId)
|
||||||
{
|
{
|
||||||
Resource->OwnerTable[i].a.OwnerCount--;
|
Resource->OwnerTable[i].u.OwnerCount--;
|
||||||
if (Resource->OwnerTable[i].a.OwnerCount == 0)
|
if (Resource->OwnerTable[i].u.OwnerCount == 0)
|
||||||
{
|
{
|
||||||
Resource->ActiveCount--;
|
Resource->ActiveCount--;
|
||||||
Resource->OwnerTable[i].OwnerThread = 0;
|
Resource->OwnerTable[i].OwnerThread = 0;
|
||||||
|
@ -222,7 +232,7 @@ static BOOLEAN EiAddSharedOwner(PERESOURCE Resource)
|
||||||
{
|
{
|
||||||
/* no owner, it's easy */
|
/* no owner, it's easy */
|
||||||
Resource->OwnerThreads[1].OwnerThread = ExGetCurrentResourceThread();
|
Resource->OwnerThreads[1].OwnerThread = ExGetCurrentResourceThread();
|
||||||
Resource->OwnerThreads[1].a.OwnerCount = 1;
|
Resource->OwnerThreads[1].u.OwnerCount = 1;
|
||||||
if (Resource->OwnerTable != NULL)
|
if (Resource->OwnerTable != NULL)
|
||||||
{
|
{
|
||||||
ExFreePool(Resource->OwnerTable);
|
ExFreePool(Resource->OwnerTable);
|
||||||
|
@ -256,10 +266,10 @@ static BOOLEAN EiAddSharedOwner(PERESOURCE Resource)
|
||||||
sizeof(OWNER_ENTRY));
|
sizeof(OWNER_ENTRY));
|
||||||
|
|
||||||
Resource->OwnerThreads[1].OwnerThread = 0;
|
Resource->OwnerThreads[1].OwnerThread = 0;
|
||||||
Resource->OwnerThreads[1].a.TableSize = 3;
|
Resource->OwnerThreads[1].u.TableSize = 3;
|
||||||
|
|
||||||
Resource->OwnerTable[1].OwnerThread = CurrentThread;
|
Resource->OwnerTable[1].OwnerThread = CurrentThread;
|
||||||
Resource->OwnerTable[1].a.OwnerCount = 1;
|
Resource->OwnerTable[1].u.OwnerCount = 1;
|
||||||
Resource->ActiveCount++;
|
Resource->ActiveCount++;
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
@ -268,15 +278,15 @@ static BOOLEAN EiAddSharedOwner(PERESOURCE Resource)
|
||||||
DPRINT("Search free entries\n");
|
DPRINT("Search free entries\n");
|
||||||
|
|
||||||
DPRINT("Number of entries %d\n",
|
DPRINT("Number of entries %d\n",
|
||||||
Resource->OwnerThreads[1].a.TableSize);
|
Resource->OwnerThreads[1].u.TableSize);
|
||||||
|
|
||||||
freeEntry = NULL;
|
freeEntry = NULL;
|
||||||
for (i=0; i<Resource->OwnerThreads[1].a.TableSize; i++)
|
for (i=0; i<Resource->OwnerThreads[1].u.TableSize; i++)
|
||||||
{
|
{
|
||||||
if (Resource->OwnerTable[i].OwnerThread == CurrentThread)
|
if (Resource->OwnerTable[i].OwnerThread == CurrentThread)
|
||||||
{
|
{
|
||||||
DPRINT("Thread already owns resource\n");
|
DPRINT("Thread already owns resource\n");
|
||||||
Resource->OwnerTable[i].a.OwnerCount++;
|
Resource->OwnerTable[i].u.OwnerCount++;
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
if (Resource->OwnerTable[i].OwnerThread == 0)
|
if (Resource->OwnerTable[i].OwnerThread == 0)
|
||||||
|
@ -296,7 +306,7 @@ static BOOLEAN EiAddSharedOwner(PERESOURCE Resource)
|
||||||
freeEntry =
|
freeEntry =
|
||||||
ExAllocatePoolWithTag(NonPagedPool,
|
ExAllocatePoolWithTag(NonPagedPool,
|
||||||
sizeof(OWNER_ENTRY)*
|
sizeof(OWNER_ENTRY)*
|
||||||
(Resource->OwnerThreads[1].a.TableSize+1),
|
(Resource->OwnerThreads[1].u.TableSize+1),
|
||||||
TAG_OWNER_TABLE);
|
TAG_OWNER_TABLE);
|
||||||
if (freeEntry == NULL)
|
if (freeEntry == NULL)
|
||||||
{
|
{
|
||||||
|
@ -304,15 +314,15 @@ static BOOLEAN EiAddSharedOwner(PERESOURCE Resource)
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
memcpy(freeEntry,Resource->OwnerTable,
|
memcpy(freeEntry,Resource->OwnerTable,
|
||||||
sizeof(OWNER_ENTRY)*(Resource->OwnerThreads[1].a.TableSize));
|
sizeof(OWNER_ENTRY)*(Resource->OwnerThreads[1].u.TableSize));
|
||||||
ExFreePool(Resource->OwnerTable);
|
ExFreePool(Resource->OwnerTable);
|
||||||
Resource->OwnerTable=freeEntry;
|
Resource->OwnerTable=freeEntry;
|
||||||
freeEntry=&Resource->OwnerTable[Resource->OwnerThreads[1].a.TableSize];
|
freeEntry=&Resource->OwnerTable[Resource->OwnerThreads[1].u.TableSize];
|
||||||
Resource->OwnerThreads[1].a.TableSize++;
|
Resource->OwnerThreads[1].u.TableSize++;
|
||||||
}
|
}
|
||||||
DPRINT("Creating entry\n");
|
DPRINT("Creating entry\n");
|
||||||
freeEntry->OwnerThread=ExGetCurrentResourceThread();
|
freeEntry->OwnerThread=ExGetCurrentResourceThread();
|
||||||
freeEntry->a.OwnerCount=1;
|
freeEntry->u.OwnerCount=1;
|
||||||
Resource->ActiveCount++;
|
Resource->ActiveCount++;
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
@ -361,7 +371,7 @@ ExAcquireResourceSharedLite (
|
||||||
/*
|
/*
|
||||||
* NOTE: Is this correct? Seems the same as ExConvertExclusiveToShared
|
* NOTE: Is this correct? Seems the same as ExConvertExclusiveToShared
|
||||||
*/
|
*/
|
||||||
Resource->OwnerThreads[0].a.OwnerCount++;
|
Resource->OwnerThreads[0].u.OwnerCount++;
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExAcquireResourceSharedLite() = TRUE\n");
|
DPRINT("ExAcquireResourceSharedLite() = TRUE\n");
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
@ -436,9 +446,9 @@ ExConvertExclusiveToSharedLite (
|
||||||
|
|
||||||
//transfer infos from entry 0 to entry 1 and erase entry 0
|
//transfer infos from entry 0 to entry 1 and erase entry 0
|
||||||
Resource->OwnerThreads[1].OwnerThread=Resource->OwnerThreads[0].OwnerThread;
|
Resource->OwnerThreads[1].OwnerThread=Resource->OwnerThreads[0].OwnerThread;
|
||||||
Resource->OwnerThreads[1].a.OwnerCount=Resource->OwnerThreads[0].a.OwnerCount;
|
Resource->OwnerThreads[1].u.OwnerCount=Resource->OwnerThreads[0].u.OwnerCount;
|
||||||
Resource->OwnerThreads[0].OwnerThread=0;
|
Resource->OwnerThreads[0].OwnerThread=0;
|
||||||
Resource->OwnerThreads[0].a.OwnerCount=0;
|
Resource->OwnerThreads[0].u.OwnerCount=0;
|
||||||
/* erase exclusive flag */
|
/* erase exclusive flag */
|
||||||
Resource->Flag &= (~ResourceOwnedExclusive);
|
Resource->Flag &= (~ResourceOwnedExclusive);
|
||||||
/* if no shared waiters, that's all */
|
/* if no shared waiters, that's all */
|
||||||
|
@ -510,7 +520,7 @@ ExAcquireSharedStarveExclusive (
|
||||||
if (Resource->ActiveCount == 0)
|
if (Resource->ActiveCount == 0)
|
||||||
{
|
{
|
||||||
Resource->OwnerThreads[1].OwnerThread=ExGetCurrentResourceThread();
|
Resource->OwnerThreads[1].OwnerThread=ExGetCurrentResourceThread();
|
||||||
Resource->OwnerThreads[1].a.OwnerCount=1;
|
Resource->OwnerThreads[1].u.OwnerCount=1;
|
||||||
Resource->ActiveCount=1;
|
Resource->ActiveCount=1;
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExAcquireSharedStarveExclusive() = TRUE\n");
|
DPRINT("ExAcquireSharedStarveExclusive() = TRUE\n");
|
||||||
|
@ -521,7 +531,7 @@ ExAcquireSharedStarveExclusive (
|
||||||
&& Resource->OwnerThreads[0].OwnerThread==ExGetCurrentResourceThread())
|
&& Resource->OwnerThreads[0].OwnerThread==ExGetCurrentResourceThread())
|
||||||
{
|
{
|
||||||
/* exclusive, but by same thread : it's ok */
|
/* exclusive, but by same thread : it's ok */
|
||||||
Resource->OwnerThreads[0].a.OwnerCount++;
|
Resource->OwnerThreads[0].u.OwnerCount++;
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExAcquireSharedStarveExclusive() = TRUE\n");
|
DPRINT("ExAcquireSharedStarveExclusive() = TRUE\n");
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
@ -565,6 +575,12 @@ ExAcquireSharedWaitForExclusive (
|
||||||
return(ExAcquireResourceSharedLite(Resource,Wait));
|
return(ExAcquireResourceSharedLite(Resource,Wait));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef ExDeleteResource
|
||||||
|
#undef ExDeleteResource
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -605,6 +621,11 @@ ExGetSharedWaiterCount (
|
||||||
return(Resource->NumberOfSharedWaiters);
|
return(Resource->NumberOfSharedWaiters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef ExInitializeResource
|
||||||
|
#undef ExInitializeResource
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -662,14 +683,23 @@ ExIsResourceAcquiredExclusiveLite (
|
||||||
&& Resource->OwnerThreads[0].OwnerThread==ExGetCurrentResourceThread());
|
&& Resource->OwnerThreads[0].OwnerThread==ExGetCurrentResourceThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef ExIsResourceAcquiredSharedLite
|
||||||
|
#undef ExIsResourceAcquiredSharedLite
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
ULONG
|
|
||||||
STDCALL
|
|
||||||
ExIsResourceAcquiredSharedLite (
|
//NTOSAPI
|
||||||
PERESOURCE Resource
|
//DDKAPI
|
||||||
)
|
USHORT STDCALL
|
||||||
|
ExIsResourceAcquiredSharedLite(
|
||||||
|
IN PERESOURCE Resource)
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Returns whether the current thread has shared access to a given
|
* FUNCTION: Returns whether the current thread has shared access to a given
|
||||||
* resource
|
* resource
|
||||||
|
@ -682,21 +712,21 @@ ExIsResourceAcquiredSharedLite (
|
||||||
ULONG i;
|
ULONG i;
|
||||||
if (Resource->OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread())
|
if (Resource->OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread())
|
||||||
{
|
{
|
||||||
return(Resource->OwnerThreads[0].a.OwnerCount);
|
return(Resource->OwnerThreads[0].u.OwnerCount);
|
||||||
}
|
}
|
||||||
if (Resource->OwnerThreads[1].OwnerThread == ExGetCurrentResourceThread())
|
if (Resource->OwnerThreads[1].OwnerThread == ExGetCurrentResourceThread())
|
||||||
{
|
{
|
||||||
return(Resource->OwnerThreads[1].a.OwnerCount);
|
return(Resource->OwnerThreads[1].u.OwnerCount);
|
||||||
}
|
}
|
||||||
if (!Resource->OwnerThreads[1].a.TableSize)
|
if (!Resource->OwnerThreads[1].u.TableSize)
|
||||||
{
|
{
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
for (i=0; i<Resource->OwnerThreads[1].a.TableSize; i++)
|
for (i=0; i<Resource->OwnerThreads[1].u.TableSize; i++)
|
||||||
{
|
{
|
||||||
if (Resource->OwnerTable[i].OwnerThread==ExGetCurrentResourceThread())
|
if (Resource->OwnerTable[i].OwnerThread==ExGetCurrentResourceThread())
|
||||||
{
|
{
|
||||||
return Resource->OwnerTable[i].a.OwnerCount;
|
return Resource->OwnerTable[i].u.OwnerCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
|
@ -724,9 +754,9 @@ ExReinitializeResourceLite (
|
||||||
ExFreePool(Resource->OwnerTable);
|
ExFreePool(Resource->OwnerTable);
|
||||||
}
|
}
|
||||||
Resource->OwnerThreads[0].OwnerThread=0;
|
Resource->OwnerThreads[0].OwnerThread=0;
|
||||||
Resource->OwnerThreads[0].a.OwnerCount=0;
|
Resource->OwnerThreads[0].u.OwnerCount=0;
|
||||||
Resource->OwnerThreads[1].OwnerThread=0;
|
Resource->OwnerThreads[1].OwnerThread=0;
|
||||||
Resource->OwnerThreads[1].a.OwnerCount=0;
|
Resource->OwnerThreads[1].u.OwnerCount=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -742,6 +772,13 @@ ExReleaseResourceLite (
|
||||||
ExGetCurrentResourceThread()));
|
ExGetCurrentResourceThread()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef ExReleaseResourceForThread
|
||||||
|
#undef ExReleaseResourceForThread
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -755,6 +792,7 @@ ExReleaseResourceForThread (
|
||||||
return(ExReleaseResourceForThreadLite(Resource,ResourceThreadId));
|
return(ExReleaseResourceForThreadLite(Resource,ResourceThreadId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -785,8 +823,8 @@ ExReleaseResourceForThreadLite (
|
||||||
{
|
{
|
||||||
DPRINT("Releasing from exclusive access\n");
|
DPRINT("Releasing from exclusive access\n");
|
||||||
|
|
||||||
Resource->OwnerThreads[0].a.OwnerCount--;
|
Resource->OwnerThreads[0].u.OwnerCount--;
|
||||||
if (Resource->OwnerThreads[0].a.OwnerCount > 0)
|
if (Resource->OwnerThreads[0].u.OwnerCount > 0)
|
||||||
{
|
{
|
||||||
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
KeReleaseSpinLock(&Resource->SpinLock, oldIrql);
|
||||||
DPRINT("ExReleaseResourceForThreadLite() finished\n");
|
DPRINT("ExReleaseResourceForThreadLite() finished\n");
|
||||||
|
|
|
@ -24,7 +24,7 @@ struct _EPROCESS;
|
||||||
#define PA_SYSTEM (0)
|
#define PA_SYSTEM (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PAGE_SIZE (4096)
|
// #define PAGE_SIZE (4096)
|
||||||
|
|
||||||
PULONG MmGetPageEntry(PVOID Address);
|
PULONG MmGetPageEntry(PVOID Address);
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,9 @@ NTSTATUS MmLockMemoryArea(MEMORY_AREA* MemoryArea);
|
||||||
NTSTATUS MmUnlockMemoryArea(MEMORY_AREA* MemoryArea);
|
NTSTATUS MmUnlockMemoryArea(MEMORY_AREA* MemoryArea);
|
||||||
NTSTATUS MmInitSectionImplementation(VOID);
|
NTSTATUS MmInitSectionImplementation(VOID);
|
||||||
|
|
||||||
|
#ifndef __USE_W32API
|
||||||
#define MM_LOWEST_USER_ADDRESS (4096)
|
#define MM_LOWEST_USER_ADDRESS (4096)
|
||||||
|
#endif
|
||||||
|
|
||||||
PMEMORY_AREA MmSplitMemoryArea(struct _EPROCESS* Process,
|
PMEMORY_AREA MmSplitMemoryArea(struct _EPROCESS* Process,
|
||||||
PMADDRESS_SPACE AddressSpace,
|
PMADDRESS_SPACE AddressSpace,
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: ps.h,v 1.48 2003/06/20 16:20:34 ekohl Exp $
|
/* $Id: ps.h,v 1.49 2003/07/15 16:26:18 silverblade Exp $
|
||||||
*
|
*
|
||||||
* FILE: ntoskrnl/ke/kthread.c
|
* FILE: ntoskrnl/ke/kthread.c
|
||||||
* PURPOSE: Process manager definitions
|
* PURPOSE: Process manager definitions
|
||||||
|
@ -43,7 +43,9 @@ struct _KTRAPFRAME;
|
||||||
#include <internal/mm.h>
|
#include <internal/mm.h>
|
||||||
#include <napi/teb.h>
|
#include <napi/teb.h>
|
||||||
|
|
||||||
|
#ifndef __USE_W32API
|
||||||
#define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->ProcessorNumber)
|
#define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->ProcessorNumber)
|
||||||
|
#endif
|
||||||
|
|
||||||
extern HANDLE SystemProcessHandle;
|
extern HANDLE SystemProcessHandle;
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: bug.c,v 1.33 2003/07/12 10:24:45 chorns Exp $
|
/* $Id: bug.c,v 1.34 2003/07/15 16:26:18 silverblade Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/bug.c
|
* FILE: ntoskrnl/ke/bug.c
|
||||||
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
#include <internal/debug.h>
|
#include <internal/debug.h>
|
||||||
|
|
||||||
|
#include "../../hal/halx86/include/hal.h"
|
||||||
|
|
||||||
/* GLOBALS ******************************************************************/
|
/* GLOBALS ******************************************************************/
|
||||||
|
|
||||||
static LIST_ENTRY BugcheckCallbackListHead = {NULL,NULL};
|
static LIST_ENTRY BugcheckCallbackListHead = {NULL,NULL};
|
||||||
|
|
|
@ -6,6 +6,10 @@ DEP_FILTERED := $(filter-out $(DEP_EXCLUDE_FILTER), $(DEP_OBJECTS:.o=.d))
|
||||||
DEP_FILES := $(join $(dir $(DEP_FILTERED)), $(addprefix ., $(notdir $(DEP_FILTERED))))
|
DEP_FILES := $(join $(dir $(DEP_FILTERED)), $(addprefix ., $(notdir $(DEP_FILTERED))))
|
||||||
|
|
||||||
|
|
||||||
|
# Added by Silver Blade:
|
||||||
|
SEP = /
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(MAKECMDGOALS),clean)
|
ifneq ($(MAKECMDGOALS),clean)
|
||||||
include $(DEP_FILES)
|
include $(DEP_FILES)
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in a new issue