- Simplify CreateFileMapping[AW].

- Fix return value of GlobalReAlloc and GlobalUnlock.

svn path=/trunk/; revision=10726
This commit is contained in:
Filip Navara 2004-08-28 22:16:27 +00:00
parent b1f6932d44
commit f81fb98e23
2 changed files with 20 additions and 65 deletions

View file

@ -1,4 +1,4 @@
/* $Id: global.c,v 1.26 2004/07/03 17:40:22 navaraf Exp $ /* $Id: global.c,v 1.27 2004/08/28 22:16:27 navaraf Exp $
* *
* Win32 Global/Local heap functions (GlobalXXX, LocalXXX). * Win32 Global/Local heap functions (GlobalXXX, LocalXXX).
* These functions included in Win32 for compatibility with 16 bit Windows * These functions included in Win32 for compatibility with 16 bit Windows
@ -491,8 +491,6 @@ GlobalReAlloc(HGLOBAL hMem,
DPRINT("GlobalReAlloc( 0x%lX, 0x%lX, 0x%X )\n", (ULONG)hMem, dwBytes, uFlags); DPRINT("GlobalReAlloc( 0x%lX, 0x%lX, 0x%X )\n", (ULONG)hMem, dwBytes, uFlags);
hnew = 0;
if (uFlags & GMEM_ZEROINIT) if (uFlags & GMEM_ZEROINIT)
{ {
heap_flags = HEAP_ZERO_MEMORY; heap_flags = HEAP_ZERO_MEMORY;
@ -546,13 +544,6 @@ GlobalReAlloc(HGLOBAL hMem,
{ {
/* reallocate a moveable block */ /* reallocate a moveable block */
phandle= HANDLE_TO_INTERN(hMem); phandle= HANDLE_TO_INTERN(hMem);
#if 0
if(phandle->LockCount != 0)
{
SetLastError(ERROR_INVALID_HANDLE);
}
else
#endif
if (0 != dwBytes) if (0 != dwBytes)
{ {
hnew = hMem; hnew = hMem;
@ -587,7 +578,6 @@ GlobalReAlloc(HGLOBAL hMem,
} }
else else
{ {
hnew = hMem;
if(phandle->Pointer) if(phandle->Pointer)
{ {
RtlFreeHeap(GetProcessHeap(), 0, phandle->Pointer - HANDLE_SIZE); RtlFreeHeap(GetProcessHeap(), 0, phandle->Pointer - HANDLE_SIZE);
@ -694,7 +684,7 @@ GlobalUnlock(HGLOBAL hMem)
else if (GLOBAL_LOCK_MAX > phandle->LockCount) else if (GLOBAL_LOCK_MAX > phandle->LockCount)
{ {
phandle->LockCount--; phandle->LockCount--;
locked = (0 == phandle->LockCount) ? TRUE : FALSE; locked = (0 != phandle->LockCount) ? TRUE : FALSE;
SetLastError(NO_ERROR); SetLastError(NO_ERROR);
} }
} }
@ -727,12 +717,4 @@ GlobalWire(HGLOBAL hMem)
return GlobalLock(hMem); return GlobalLock(hMem);
} }
/*
* @implemented
*/
//HGLOBAL STDCALL
//GlobalDiscard(HGLOBAL hMem)
//{
// return GlobalReAlloc(hMem, 0, GMEM_MOVEABLE);
//}
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: section.c,v 1.25 2004/05/25 20:04:14 navaraf Exp $ /* $Id: section.c,v 1.26 2004/08/28 22:16:27 navaraf Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -33,12 +33,11 @@ CreateFileMappingA(HANDLE hFile,
NTSTATUS Status; NTSTATUS Status;
HANDLE SectionHandle; HANDLE SectionHandle;
LARGE_INTEGER MaximumSize; LARGE_INTEGER MaximumSize;
PLARGE_INTEGER MaximumSizePointer;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
ANSI_STRING AnsiName; ANSI_STRING AnsiName;
UNICODE_STRING UnicodeName; UNICODE_STRING UnicodeName;
PSECURITY_DESCRIPTOR SecurityDescriptor; PSECURITY_DESCRIPTOR SecurityDescriptor;
IO_STATUS_BLOCK IoStatusBlock;
FILE_STANDARD_INFORMATION FileStandard;
if ((flProtect & (MASK_PAGE_FLAGS | MASK_SEC_FLAGS)) != flProtect) if ((flProtect & (MASK_PAGE_FLAGS | MASK_SEC_FLAGS)) != flProtect)
{ {
@ -55,26 +54,16 @@ CreateFileMappingA(HANDLE hFile,
SecurityDescriptor = NULL; SecurityDescriptor = NULL;
} }
if((dwMaximumSizeLow==0)&&(dwMaximumSizeHigh==0)) if (dwMaximumSizeLow == 0 && dwMaximumSizeHigh == 0)
{ {
// MSDN: If dwMaximumSizeLow and dwMaximumSizeHigh are zero, the maximum size of the MaximumSizePointer = NULL;
// file-mapping object is equal to the current size of the file identified by hFile. }
Status = NtQueryInformationFile(hFile, else
&IoStatusBlock, {
&FileStandard, MaximumSize.u.LowPart = dwMaximumSizeLow;
sizeof(FILE_STANDARD_INFORMATION), MaximumSize.u.HighPart = dwMaximumSizeHigh;
FileStandardInformation); MaximumSizePointer = &MaximumSize;
if (!NT_SUCCESS(Status)) }
{
DPRINT("Status 0x%08x obtaining FileStandardInformation for source\n", Status);
SetLastErrorByStatus(Status);
return NULL;
}
MaximumSize = FileStandard.EndOfFile;
} else {
MaximumSize.u.LowPart = dwMaximumSizeLow;
MaximumSize.u.HighPart = dwMaximumSizeHigh;
}
RtlInitAnsiString(&AnsiName, RtlInitAnsiString(&AnsiName,
(LPSTR)lpName); (LPSTR)lpName);
RtlAnsiStringToUnicodeString(&UnicodeName, RtlAnsiStringToUnicodeString(&UnicodeName,
@ -88,7 +77,7 @@ CreateFileMappingA(HANDLE hFile,
Status = NtCreateSection(&SectionHandle, Status = NtCreateSection(&SectionHandle,
SECTION_ALL_ACCESS, SECTION_ALL_ACCESS,
&ObjectAttributes, &ObjectAttributes,
&MaximumSize, MaximumSizePointer,
flProtect & MASK_PAGE_FLAGS, flProtect & MASK_PAGE_FLAGS,
flProtect & MASK_SEC_FLAGS, flProtect & MASK_SEC_FLAGS,
hFile==INVALID_HANDLE_VALUE ? NULL : hFile); hFile==INVALID_HANDLE_VALUE ? NULL : hFile);
@ -120,8 +109,6 @@ CreateFileMappingW(HANDLE hFile,
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING UnicodeName; UNICODE_STRING UnicodeName;
PSECURITY_DESCRIPTOR SecurityDescriptor; PSECURITY_DESCRIPTOR SecurityDescriptor;
IO_STATUS_BLOCK IoStatusBlock;
FILE_STANDARD_INFORMATION FileStandard;
if ((flProtect & (MASK_PAGE_FLAGS | MASK_SEC_FLAGS)) != flProtect) if ((flProtect & (MASK_PAGE_FLAGS | MASK_SEC_FLAGS)) != flProtect)
{ {
@ -138,29 +125,15 @@ CreateFileMappingW(HANDLE hFile,
SecurityDescriptor = NULL; SecurityDescriptor = NULL;
} }
if ((dwMaximumSizeLow == 0) && (dwMaximumSizeHigh == 0)) if (dwMaximumSizeLow == 0 && dwMaximumSizeHigh == 0)
{ {
// MSDN: If dwMaximumSizeLow and dwMaximumSizeHigh are zero, the maximum size of the MaximumSizePointer = NULL;
// file-mapping object is equal to the current size of the file identified by hFile.
Status = NtQueryInformationFile(hFile,
&IoStatusBlock,
&FileStandard,
sizeof(FILE_STANDARD_INFORMATION),
FileStandardInformation);
if (!NT_SUCCESS(Status))
{
DPRINT("Status 0x%08x obtaining FileStandardInformation for source\n", Status);
SetLastErrorByStatus(Status);
return NULL;
}
MaximumSize = FileStandard.EndOfFile;
MaximumSizePointer = &MaximumSize;
} }
else else
{ {
MaximumSize.u.LowPart = dwMaximumSizeLow; MaximumSize.u.LowPart = dwMaximumSizeLow;
MaximumSize.u.HighPart = dwMaximumSizeHigh; MaximumSize.u.HighPart = dwMaximumSizeHigh;
MaximumSizePointer = &MaximumSize; MaximumSizePointer = &MaximumSize;
} }
RtlInitUnicodeString(&UnicodeName, RtlInitUnicodeString(&UnicodeName,
lpName); lpName);