mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
- Remove unused and broken MmSplitMemoryArea function.
- Don't allow releasing section with NtFreeVirtualMemory. - Implement TokenDefaultDacl case of NtSetInformationToken. svn path=/trunk/; revision=12226
This commit is contained in:
parent
e469cf0000
commit
016f144f5b
5 changed files with 63 additions and 64 deletions
|
@ -370,14 +370,6 @@ NTSTATUS MmLockMemoryArea(MEMORY_AREA* MemoryArea);
|
|||
|
||||
NTSTATUS MmUnlockMemoryArea(MEMORY_AREA* MemoryArea);
|
||||
|
||||
PMEMORY_AREA MmSplitMemoryArea(struct _EPROCESS* Process,
|
||||
PMADDRESS_SPACE AddressSpace,
|
||||
PMEMORY_AREA OriginalMemoryArea,
|
||||
PVOID BaseAddress,
|
||||
ULONG Length,
|
||||
ULONG NewType,
|
||||
ULONG NewAttributes);
|
||||
|
||||
MEMORY_AREA* MmOpenMemoryAreaByRegion(PMADDRESS_SPACE AddressSpace,
|
||||
PVOID Address,
|
||||
ULONG Length);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: anonmem.c,v 1.33 2004/10/01 20:26:04 gvg Exp $
|
||||
/* $Id: anonmem.c,v 1.34 2004/12/19 16:16:57 navaraf Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/mm/anonmem.c
|
||||
|
@ -814,7 +814,8 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
|
|||
{
|
||||
case MEM_RELEASE:
|
||||
/* We can only free a memory area in one step. */
|
||||
if (MemoryArea->BaseAddress != BaseAddress)
|
||||
if (MemoryArea->BaseAddress != BaseAddress ||
|
||||
MemoryArea->Type != MEMORY_AREA_VIRTUAL_MEMORY)
|
||||
{
|
||||
MmUnlockAddressSpace(AddressSpace);
|
||||
ObDereferenceObject(Process);
|
||||
|
|
|
@ -498,55 +498,6 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace,
|
|||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
PMEMORY_AREA MmSplitMemoryArea(PEPROCESS Process,
|
||||
PMADDRESS_SPACE AddressSpace,
|
||||
PMEMORY_AREA OriginalMemoryArea,
|
||||
PVOID BaseAddress,
|
||||
ULONG Length,
|
||||
ULONG NewType,
|
||||
ULONG NewAttributes)
|
||||
{
|
||||
PMEMORY_AREA Result;
|
||||
PMEMORY_AREA Split;
|
||||
|
||||
Result = ExAllocatePoolWithTag(NonPagedPool, sizeof(MEMORY_AREA),
|
||||
TAG_MAREA);
|
||||
RtlZeroMemory(Result,sizeof(MEMORY_AREA));
|
||||
Result->Type = NewType;
|
||||
Result->BaseAddress = BaseAddress;
|
||||
Result->Length = Length;
|
||||
Result->Attributes = NewAttributes;
|
||||
Result->LockCount = 0;
|
||||
Result->Process = Process;
|
||||
|
||||
if (BaseAddress == OriginalMemoryArea->BaseAddress)
|
||||
{
|
||||
OriginalMemoryArea->BaseAddress = (char*)BaseAddress + Length;
|
||||
OriginalMemoryArea->Length = OriginalMemoryArea->Length - Length;
|
||||
MmInsertMemoryArea(AddressSpace, Result);
|
||||
return(Result);
|
||||
}
|
||||
if (((char*)BaseAddress + Length) ==
|
||||
((char*)OriginalMemoryArea->BaseAddress + OriginalMemoryArea->Length))
|
||||
{
|
||||
OriginalMemoryArea->Length = OriginalMemoryArea->Length - Length;
|
||||
MmInsertMemoryArea(AddressSpace, Result);
|
||||
|
||||
return(Result);
|
||||
}
|
||||
|
||||
Split = ExAllocatePoolWithTag(NonPagedPool, sizeof(MEMORY_AREA),
|
||||
TAG_MAREA);
|
||||
RtlCopyMemory(Split,OriginalMemoryArea,sizeof(MEMORY_AREA));
|
||||
Split->BaseAddress = (char*)BaseAddress + Length;
|
||||
Split->Length = OriginalMemoryArea->Length - (((ULONG)BaseAddress)
|
||||
+ Length);
|
||||
|
||||
OriginalMemoryArea->Length = (char*)BaseAddress - (char*)OriginalMemoryArea->BaseAddress;
|
||||
|
||||
return(Split);
|
||||
}
|
||||
|
||||
NTSTATUS MmCreateMemoryArea(PEPROCESS Process,
|
||||
PMADDRESS_SPACE AddressSpace,
|
||||
ULONG Type,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: section.c,v 1.166 2004/10/22 20:38:23 ekohl Exp $
|
||||
/* $Id: section.c,v 1.167 2004/12/19 16:16:58 navaraf Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/mm/section.c
|
||||
|
@ -3023,8 +3023,8 @@ MmMapViewOfSegment(PEPROCESS Process,
|
|||
BoundaryAddressMultiple);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Mapping between 0x%.8X and 0x%.8X failed.\n",
|
||||
(*BaseAddress), (char*)(*BaseAddress) + ViewSize);
|
||||
DPRINT1("Mapping between 0x%.8X and 0x%.8X failed (%X).\n",
|
||||
(*BaseAddress), (char*)(*BaseAddress) + ViewSize, Status);
|
||||
return(Status);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: token.c,v 1.44 2004/12/14 00:41:24 gdalsnes Exp $
|
||||
/* $Id: token.c,v 1.45 2004/12/19 16:16:58 navaraf Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -913,8 +913,14 @@ NtSetInformationToken(IN HANDLE TokenHandle,
|
|||
NeededAccess = TOKEN_ADJUST_DEFAULT;
|
||||
break;
|
||||
|
||||
case TokenDefaultDacl:
|
||||
if (TokenInformationLength < sizeof(TOKEN_DEFAULT_DACL))
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
NeededAccess = TOKEN_ADJUST_DEFAULT;
|
||||
break;
|
||||
|
||||
default:
|
||||
DPRINT1("NtSetInformationToken: lying about success (stub)\n");
|
||||
DPRINT1("NtSetInformationToken: lying about success (stub) - %x\n", TokenInformationClass);
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
}
|
||||
|
@ -954,6 +960,55 @@ NtSetInformationToken(IN HANDLE TokenHandle,
|
|||
"Token->PrimaryGroup = 0x%08x\n", Token->PrimaryGroup);
|
||||
break;
|
||||
|
||||
case TokenDefaultDacl:
|
||||
{
|
||||
TOKEN_DEFAULT_DACL TokenDefaultDacl = { 0 };
|
||||
ACL OldAcl;
|
||||
PACL NewAcl;
|
||||
|
||||
Status = MmCopyFromCaller( &TokenDefaultDacl, TokenInformation,
|
||||
sizeof(TOKEN_DEFAULT_DACL) );
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
break;
|
||||
}
|
||||
|
||||
Status = MmCopyFromCaller( &OldAcl, TokenDefaultDacl.DefaultDacl,
|
||||
sizeof(ACL) );
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
break;
|
||||
}
|
||||
|
||||
NewAcl = ExAllocatePool(NonPagedPool, sizeof(ACL));
|
||||
if (NewAcl == NULL)
|
||||
{
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
break;
|
||||
}
|
||||
|
||||
Status = MmCopyFromCaller( NewAcl, TokenDefaultDacl.DefaultDacl,
|
||||
OldAcl.AclSize );
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
ExFreePool(NewAcl);
|
||||
break;
|
||||
}
|
||||
|
||||
if (Token->DefaultDacl)
|
||||
{
|
||||
ExFreePool(Token->DefaultDacl);
|
||||
}
|
||||
|
||||
Token->DefaultDacl = NewAcl;
|
||||
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue