From 7ea9dd6a2817dce58d00372eb8f752e370a735fa Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 18 Nov 2008 03:41:21 +0000 Subject: [PATCH] - Fix several ULONG/ULONG_PTR issues - Add a parameter to DefaultQueryInfoBufferCheck for ULONG_PTR/SIZE_T ResultLength svn path=/branches/ros-amd64-bringup/; revision=37435 --- reactos/ntoskrnl/ex/event.c | 1 + reactos/ntoskrnl/ex/fastinterlck.c | 14 +++++++------- reactos/ntoskrnl/ex/mutant.c | 1 + reactos/ntoskrnl/ex/sem.c | 1 + reactos/ntoskrnl/ex/sysinfo.c | 2 +- reactos/ntoskrnl/ex/timer.c | 1 + reactos/ntoskrnl/include/internal/ntoskrnl.h | 5 +++++ reactos/ntoskrnl/io/iomgr/iocomp.c | 7 ++++--- reactos/ntoskrnl/io/iomgr/irp.c | 8 ++++---- reactos/ntoskrnl/kd/kdmain.c | 2 +- reactos/ntoskrnl/kd/wrappers/bochs.c | 2 +- reactos/ntoskrnl/kdbg/kdb_symbols.c | 4 ++-- reactos/ntoskrnl/mm/section.c | 1 + reactos/ntoskrnl/se/token.c | 1 + 14 files changed, 31 insertions(+), 19 deletions(-) diff --git a/reactos/ntoskrnl/ex/event.c b/reactos/ntoskrnl/ex/event.c index 890ccd46830..c1d452ebc1c 100644 --- a/reactos/ntoskrnl/ex/event.c +++ b/reactos/ntoskrnl/ex/event.c @@ -334,6 +334,7 @@ NtQueryEvent(IN HANDLE EventHandle, EventInformation, EventInformationLength, ReturnLength, + NULL, PreviousMode); if(!NT_SUCCESS(Status)) { diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/reactos/ntoskrnl/ex/fastinterlck.c index 4edcec9541f..dba7065ac1c 100644 --- a/reactos/ntoskrnl/ex/fastinterlck.c +++ b/reactos/ntoskrnl/ex/fastinterlck.c @@ -36,9 +36,9 @@ InterlockedPushEntrySList(IN PSLIST_HEADER ListHead, { Entry->Next = FirstEntry; NextEntry = FirstEntry; - FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head, - (LONG)Entry, - (LONG)FirstEntry); + FirstEntry = InterlockedCompareExchangePointer((PVOID*)Head, + (PVOID)Entry, + (PVOID)FirstEntry); } while (FirstEntry != NextEntry); return FirstEntry; @@ -56,9 +56,9 @@ InterlockedPopEntrySList(IN PSLIST_HEADER ListHead) if (!FirstEntry) return NULL; NextEntry = FirstEntry; - FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head, - (LONG)FirstEntry->Next, - (LONG)FirstEntry); + FirstEntry = InterlockedCompareExchangePointer((PVOID*)Head, + (PVOID)FirstEntry->Next, + (PVOID)FirstEntry); } while (FirstEntry != NextEntry); return FirstEntry; @@ -68,7 +68,7 @@ PSINGLE_LIST_ENTRY FASTCALL ExInterlockedFlushSList(IN PSLIST_HEADER ListHead) { - return (PVOID)_InterlockedExchange((PLONG)&ListHead->Next.Next, (LONG)NULL); + return InterlockedExchangePointer((PVOID*)&ListHead->Next.Next, NULL); } PSLIST_ENTRY diff --git a/reactos/ntoskrnl/ex/mutant.c b/reactos/ntoskrnl/ex/mutant.c index 87c5485b030..82945d0be8b 100644 --- a/reactos/ntoskrnl/ex/mutant.c +++ b/reactos/ntoskrnl/ex/mutant.c @@ -245,6 +245,7 @@ NtQueryMutant(IN HANDLE MutantHandle, MutantInformation, MutantInformationLength, ResultLength, + NULL, PreviousMode); if(!NT_SUCCESS(Status)) { diff --git a/reactos/ntoskrnl/ex/sem.c b/reactos/ntoskrnl/ex/sem.c index b6499c6722b..51d29d04eac 100644 --- a/reactos/ntoskrnl/ex/sem.c +++ b/reactos/ntoskrnl/ex/sem.c @@ -237,6 +237,7 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle, SemaphoreInformation, SemaphoreInformationLength, ReturnLength, + NULL, PreviousMode); if(!NT_SUCCESS(Status)) { diff --git a/reactos/ntoskrnl/ex/sysinfo.c b/reactos/ntoskrnl/ex/sysinfo.c index 9f6003337f1..c1e6629a14b 100644 --- a/reactos/ntoskrnl/ex/sysinfo.c +++ b/reactos/ntoskrnl/ex/sysinfo.c @@ -1055,7 +1055,7 @@ QSI_DEF(SystemHandleInformation) for (Count = 0; HandleCount > 0 ; HandleCount--) { - Shi->Handles[i].UniqueProcessId = (USHORT)(ULONG)pr->UniqueProcessId; + Shi->Handles[i].UniqueProcessId = (USHORT)(ULONG_PTR)pr->UniqueProcessId; Count++; i++; } diff --git a/reactos/ntoskrnl/ex/timer.c b/reactos/ntoskrnl/ex/timer.c index 3669608cc5a..a9b11e55f51 100644 --- a/reactos/ntoskrnl/ex/timer.c +++ b/reactos/ntoskrnl/ex/timer.c @@ -522,6 +522,7 @@ NtQueryTimer(IN HANDLE TimerHandle, TimerInformation, TimerInformationLength, ReturnLength, + NULL, PreviousMode); if(!NT_SUCCESS(Status)) return Status; diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index e9e84c1fac8..c771e611fc3 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -213,6 +213,7 @@ DefaultQueryInfoBufferCheck(ULONG Class, PVOID Buffer, ULONG BufferLength, PULONG ReturnLength, + PULONG_PTR ReturnLengthLong, KPROCESSOR_MODE PreviousMode) { NTSTATUS Status = STATUS_SUCCESS; @@ -249,6 +250,10 @@ DefaultQueryInfoBufferCheck(ULONG Class, { ProbeForWriteUlong(ReturnLength); } + if (ReturnLengthLong != NULL) + { + ProbeForWrite(ReturnLengthLong, sizeof(ULONG_PTR), sizeof(ULONG_PTR)); + } } _SEH_HANDLE { diff --git a/reactos/ntoskrnl/io/iomgr/iocomp.c b/reactos/ntoskrnl/io/iomgr/iocomp.c index 6c762a090b7..e9d86458f82 100644 --- a/reactos/ntoskrnl/io/iomgr/iocomp.c +++ b/reactos/ntoskrnl/io/iomgr/iocomp.c @@ -404,6 +404,7 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle, IoCompletionInformation, IoCompletionInformationLength, ResultLength, + NULL, PreviousMode); if (!NT_SUCCESS(Status)) return Status; @@ -506,11 +507,11 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle, ListEntry = KeRemoveQueue(Queue, PreviousMode, Timeout); /* If we got a timeout or user_apc back, return the status */ - if (((NTSTATUS)ListEntry == STATUS_TIMEOUT) || - ((NTSTATUS)ListEntry == STATUS_USER_APC)) + if (((NTSTATUS)(ULONG_PTR)ListEntry == STATUS_TIMEOUT) || + ((NTSTATUS)(ULONG_PTR)ListEntry == STATUS_USER_APC)) { /* Set this as the status */ - Status = (NTSTATUS)ListEntry; + Status = (NTSTATUS)(ULONG_PTR)ListEntry; } else { diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index 146175f3a92..ffc2a817791 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -1191,7 +1191,7 @@ IofCompleteRequest(IN PIRP Irp, if (LastStackPtr->Control & SL_ERROR_RETURNED) { /* Get the error code */ - ErrorCode = (NTSTATUS)LastStackPtr->Parameters.Others.Argument4; + ErrorCode = PtrToUlong(LastStackPtr->Parameters.Others.Argument4); } /* Get the Current Stack and skip it */ @@ -1213,7 +1213,7 @@ IofCompleteRequest(IN PIRP Irp, /* Update the error for the current stack */ ErrorCode = Irp->IoStatus.Status; StackPtr->Control |= SL_ERROR_RETURNED; - LastStackPtr->Parameters.Others.Argument4 = (PVOID)ErrorCode; + LastStackPtr->Parameters.Others.Argument4 = UlongToPtr(ErrorCode); LastStackPtr->Control |= SL_ERROR_RETURNED; } } @@ -1587,7 +1587,7 @@ NTAPI IoGetRequestorProcessId(IN PIRP Irp) { /* Return the requestor process' id */ - return (ULONG)(IoGetRequestorProcess(Irp)->UniqueProcessId); + return PtrToUlong(IoGetRequestorProcess(Irp)->UniqueProcessId); } /* @@ -1759,5 +1759,5 @@ NTAPI IoSetTopLevelIrp(IN PIRP Irp) { /* Set the IRP */ - PsGetCurrentThread()->TopLevelIrp = (ULONG)Irp; + PsGetCurrentThread()->TopLevelIrp = (ULONG_PTR)Irp; } diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 3b02aa253db..4da07c96dc8 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -52,7 +52,7 @@ KdpServiceDispatcher(ULONG Service, #ifdef DBG case TAG('R', 'o', 's', ' '): /* ROS-INTERNAL */ { - switch ((ULONG)Buffer1) + switch ((ULONG_PTR)Buffer1) { case DumpNonPagedPool: MiDebugDumpNonPagedPool(FALSE); diff --git a/reactos/ntoskrnl/kd/wrappers/bochs.c b/reactos/ntoskrnl/kd/wrappers/bochs.c index bc2266d9143..dcb545662d6 100644 --- a/reactos/ntoskrnl/kd/wrappers/bochs.c +++ b/reactos/ntoskrnl/kd/wrappers/bochs.c @@ -45,7 +45,7 @@ KdpBochsInit(PKD_DISPATCH_TABLE DispatchTable, if (BootPhase == 0) { Value = READ_PORT_UCHAR(BOCHS_LOGGER_PORT); - if (Value != (ULONG)BOCHS_LOGGER_PORT) + if (Value != (ULONG_PTR)BOCHS_LOGGER_PORT) { KdpDebugMode.Bochs = FALSE; return; diff --git a/reactos/ntoskrnl/kdbg/kdb_symbols.c b/reactos/ntoskrnl/kdbg/kdb_symbols.c index d141fc984e8..4f9d95b98ca 100644 --- a/reactos/ntoskrnl/kdbg/kdb_symbols.c +++ b/reactos/ntoskrnl/kdbg/kdb_symbols.c @@ -657,10 +657,10 @@ KdbSymProcessSymbols(IN PANSI_STRING AnsiFileName, IN PKD_SYMBOLS_INFO SymbolInf KdbpSymAddCachedFile(&LdrEntry->FullDllName, LdrEntry->PatchInformation); } - DPRINT("Installed symbols: %wZ@%08x-%08x %p\n", + DPRINT("Installed symbols: %wZ@%p-%p %p\n", &LdrEntry->BaseDllName, LdrEntry->DllBase, - LdrEntry->SizeOfImage + (ULONG)LdrEntry->DllBase, + (PVOID)(LdrEntry->SizeOfImage + (ULONG_PTR)LdrEntry->DllBase), LdrEntry->PatchInformation); } diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index c4d6ad65430..29cbdf3e153 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -4242,6 +4242,7 @@ NtQuerySection(IN HANDLE SectionHandle, sizeof(ExSectionInfoClass) / sizeof(ExSectionInfoClass[0]), SectionInformation, SectionInformationLength, + NULL, ResultLength, PreviousMode); diff --git a/reactos/ntoskrnl/se/token.c b/reactos/ntoskrnl/se/token.c index 47832556b18..6cff27c4a85 100644 --- a/reactos/ntoskrnl/se/token.c +++ b/reactos/ntoskrnl/se/token.c @@ -871,6 +871,7 @@ NtQueryInformationToken(IN HANDLE TokenHandle, TokenInformation, TokenInformationLength, ReturnLength, + NULL, PreviousMode); if(!NT_SUCCESS(Status))