- 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:
Filip Navara 2004-12-19 16:16:58 +00:00
parent e469cf0000
commit 016f144f5b
5 changed files with 63 additions and 64 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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,

View file

@ -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);
}

View file

@ -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;