Merge from amd64-branch:

34969 Some ULONG / SIZE_T fixes, handle amd64 in PspCreateThread
34986 Fix several 64 bit issues
35968 Fix Size parameter of CmpAllpcate (ULONG->SIZE_T).
35970 Fix pointer <-> ULONG cast
35971 Fix pointer <-> ULONG cast fixes
36332 fix 64 bit warnings
37435 Fix several ULONG/ULONG_PTR issues. Add a parameter to DefaultQueryInfoBufferCheck for ULONG_PTR/SIZE_T ResultLength
39522 ExInitializeSystemlookasideList: Use InitializeSListHead instead of directly accessing the members. ExpAllocateLocallyUniqueId: use InterlockedCompareExchange64 instead of non-portable ExfInterlockedCompareExchange64
37433 fix InterlockedExchangePointer usage
38105 Use KeGetCurrentPrcb() instead of KeGetPcr()->Prcb / KeGetPcr()->CurrentPrcb
39160 Use wbinvd instruction for amd64, too.

svn path=/trunk/; revision=45066
This commit is contained in:
Timo Kreuzer 2010-01-13 22:35:43 +00:00
parent 0206768d44
commit f9868fc771
35 changed files with 109 additions and 88 deletions

View file

@ -615,7 +615,7 @@ CcZeroData (IN PFILE_OBJECT FileObject,
{ {
CurrentLength = Length; CurrentLength = Length;
} }
MmInitializeMdl(Mdl, (PVOID)WriteOffset.u.LowPart, CurrentLength); MmInitializeMdl(Mdl, (PVOID)(ULONG_PTR)WriteOffset.QuadPart, CurrentLength);
Mdl->MdlFlags |= (MDL_PAGES_LOCKED | MDL_IO_PAGE_READ); Mdl->MdlFlags |= (MDL_PAGES_LOCKED | MDL_IO_PAGE_READ);
for (i = 0; i < ((Mdl->Size - sizeof(MDL)) / sizeof(ULONG)); i++) for (i = 0; i < ((Mdl->Size - sizeof(MDL)) / sizeof(ULONG)); i++)
{ {

View file

@ -1054,7 +1054,7 @@ EnlistKeyBodyWithKCB(IN PCM_KEY_BODY KeyBody,
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
/* Add it into the list */ /* Add it into the list */
if (!InterlockedCompareExchangePointer(&KeyBody->KeyControlBlock-> if (!InterlockedCompareExchangePointer((PVOID*)&KeyBody->KeyControlBlock->
KeyBodyArray[i], KeyBodyArray[i],
KeyBody, KeyBody,
NULL)) NULL))
@ -1110,7 +1110,7 @@ DelistKeyBodyFromKCB(IN PCM_KEY_BODY KeyBody,
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
/* Add it into the list */ /* Add it into the list */
if (InterlockedCompareExchangePointer(&KeyBody->KeyControlBlock-> if (InterlockedCompareExchangePointer((VOID*)&KeyBody->KeyControlBlock->
KeyBodyArray[i], KeyBodyArray[i],
NULL, NULL,
KeyBody) == KeyBody) KeyBody) == KeyBody)

View file

@ -1079,7 +1079,7 @@ CmpLoadHiveThread(IN PVOID StartContext)
PAGED_CODE(); PAGED_CODE();
/* Get the hive index, make sure it makes sense */ /* Get the hive index, make sure it makes sense */
i = (ULONG)StartContext; i = PtrToUlong(StartContext);
ASSERT(CmpMachineHiveList[i].Name != NULL); ASSERT(CmpMachineHiveList[i].Name != NULL);
/* We were started */ /* We were started */
@ -1274,7 +1274,7 @@ CmpInitializeHiveList(IN USHORT Flag)
0, 0,
NULL, NULL,
CmpLoadHiveThread, CmpLoadHiveThread,
(PVOID)i); UlongToPtr(i));
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
/* We don't care about the handle -- the thread self-terminates */ /* We don't care about the handle -- the thread self-terminates */

View file

@ -51,7 +51,7 @@ CmpCreateEvent(IN EVENT_TYPE EventType,
PVOID PVOID
NTAPI NTAPI
CmpAllocate(IN ULONG Size, CmpAllocate(IN SIZE_T Size,
IN BOOLEAN Paged, IN BOOLEAN Paged,
IN ULONG Tag) IN ULONG Tag)
{ {

View file

@ -331,6 +331,7 @@ NtQueryEvent(IN HANDLE EventHandle,
EventInformation, EventInformation,
EventInformationLength, EventInformationLength,
ReturnLength, ReturnLength,
NULL,
PreviousMode); PreviousMode);
if(!NT_SUCCESS(Status)) if(!NT_SUCCESS(Status))
{ {

View file

@ -515,7 +515,7 @@ ExpAllocateHandleTableEntrySlow(IN PHANDLE_TABLE HandleTable,
/* Write the new level and attempt to change the table code */ /* Write the new level and attempt to change the table code */
TableBase = ((ULONG_PTR)Mid) | 1; TableBase = ((ULONG_PTR)Mid) | 1;
Value = InterlockedExchangePointer(&HandleTable->TableCode, TableBase); Value = InterlockedExchangePointer((PVOID*)&HandleTable->TableCode, (PVOID)TableBase);
} }
else if (TableLevel == 1) else if (TableLevel == 1)
{ {
@ -532,7 +532,7 @@ ExpAllocateHandleTableEntrySlow(IN PHANDLE_TABLE HandleTable,
if (!Low) return FALSE; if (!Low) return FALSE;
/* Update the table */ /* Update the table */
Value = InterlockedExchangePointer(&SecondLevel[i], Low); Value = InterlockedExchangePointer((PVOID*)&SecondLevel[i], Low);
ASSERT(Value == NULL); ASSERT(Value == NULL);
} }
else else
@ -559,7 +559,7 @@ ExpAllocateHandleTableEntrySlow(IN PHANDLE_TABLE HandleTable,
/* Write the new table and change the table code */ /* Write the new table and change the table code */
TableBase = ((ULONG_PTR)High) | 2; TableBase = ((ULONG_PTR)High) | 2;
Value = InterlockedExchangePointer(&HandleTable->TableCode, Value = InterlockedExchangePointer((PVOID*)&HandleTable->TableCode,
(PVOID)TableBase); (PVOID)TableBase);
} }
} }
@ -580,7 +580,7 @@ ExpAllocateHandleTableEntrySlow(IN PHANDLE_TABLE HandleTable,
if (!Mid) return FALSE; if (!Mid) return FALSE;
/* Update the table pointer */ /* Update the table pointer */
Value = InterlockedExchangePointer(&ThirdLevel[i], Mid); Value = InterlockedExchangePointer((PVOID*)&ThirdLevel[i], Mid);
ASSERT(Value == NULL); ASSERT(Value == NULL);
} }
else else
@ -595,7 +595,7 @@ ExpAllocateHandleTableEntrySlow(IN PHANDLE_TABLE HandleTable,
if (!Low) return FALSE; if (!Low) return FALSE;
/* Update the table pointer */ /* Update the table pointer */
Value = InterlockedExchangePointer(&ThirdLevel[i][j], Low); Value = InterlockedExchangePointer((PVOID*)&ThirdLevel[i][j], Low);
ASSERT(Value == NULL); ASSERT(Value == NULL);
} }
} }
@ -885,8 +885,8 @@ ExpLockHandleTableEntry(IN PHANDLE_TABLE HandleTable,
/* It's not locked, remove the lock bit to lock it */ /* It's not locked, remove the lock bit to lock it */
NewValue = OldValue & ~EXHANDLE_TABLE_ENTRY_LOCK_BIT; NewValue = OldValue & ~EXHANDLE_TABLE_ENTRY_LOCK_BIT;
if (InterlockedCompareExchangePointer(&HandleTableEntry->Object, if (InterlockedCompareExchangePointer(&HandleTableEntry->Object,
NewValue, (PVOID)NewValue,
OldValue) == (PVOID)OldValue) (PVOID)OldValue) == (PVOID)OldValue)
{ {
/* We locked it, get out */ /* We locked it, get out */
return TRUE; return TRUE;
@ -1009,7 +1009,7 @@ ExDestroyHandle(IN PHANDLE_TABLE HandleTable,
} }
/* Clear the handle */ /* Clear the handle */
Object = InterlockedExchangePointer(&HandleTableEntry->Object, NULL); Object = InterlockedExchangePointer((PVOID*)&HandleTableEntry->Object, NULL);
/* Sanity checks */ /* Sanity checks */
ASSERT(Object != NULL); ASSERT(Object != NULL);

View file

@ -387,7 +387,7 @@ ExRaiseHardError(IN NTSTATUS ErrorStatus,
IN ULONG ValidResponseOptions, IN ULONG ValidResponseOptions,
OUT PULONG Response) OUT PULONG Response)
{ {
ULONG Size; SIZE_T Size;
UNICODE_STRING CapturedParams[MAXIMUM_HARDERROR_PARAMETERS]; UNICODE_STRING CapturedParams[MAXIMUM_HARDERROR_PARAMETERS];
ULONG i; ULONG i;
PULONG_PTR UserData = NULL, ParameterBase; PULONG_PTR UserData = NULL, ParameterBase;

View file

@ -68,7 +68,7 @@ PVOID ExpNlsTableBase;
ULONG ExpAnsiCodePageDataOffset, ExpOemCodePageDataOffset; ULONG ExpAnsiCodePageDataOffset, ExpOemCodePageDataOffset;
ULONG ExpUnicodeCaseTableDataOffset; ULONG ExpUnicodeCaseTableDataOffset;
NLSTABLEINFO ExpNlsTableInfo; NLSTABLEINFO ExpNlsTableInfo;
ULONG ExpNlsTableSize; SIZE_T ExpNlsTableSize;
PVOID ExpNlsSectionPointer; PVOID ExpNlsSectionPointer;
/* CMOS Timer Sanity */ /* CMOS Timer Sanity */
@ -196,7 +196,7 @@ ExpInitNls(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
NTSTATUS Status; NTSTATUS Status;
HANDLE NlsSection; HANDLE NlsSection;
PVOID SectionBase = NULL; PVOID SectionBase = NULL;
ULONG ViewSize = 0; SIZE_T ViewSize = 0;
LARGE_INTEGER SectionOffset = {{0, 0}}; LARGE_INTEGER SectionOffset = {{0, 0}};
PLIST_ENTRY ListHead, NextEntry; PLIST_ENTRY ListHead, NextEntry;
PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; PMEMORY_ALLOCATION_DESCRIPTOR MdBlock;
@ -369,7 +369,7 @@ ExpLoadInitialProcess(IN PINIT_BUFFER InitBuffer,
OUT PCHAR *ProcessEnvironment) OUT PCHAR *ProcessEnvironment)
{ {
NTSTATUS Status; NTSTATUS Status;
ULONG Size; SIZE_T Size;
PWSTR p; PWSTR p;
UNICODE_STRING NullString = RTL_CONSTANT_STRING(L""); UNICODE_STRING NullString = RTL_CONSTANT_STRING(L"");
UNICODE_STRING SmssName, Environment, SystemDriveString, DebugString; UNICODE_STRING SmssName, Environment, SystemDriveString, DebugString;
@ -829,7 +829,7 @@ ExpInitializeExecutive(IN ULONG Cpu,
PLDR_DATA_TABLE_ENTRY NtosEntry; PLDR_DATA_TABLE_ENTRY NtosEntry;
PRTL_MESSAGE_RESOURCE_ENTRY MsgEntry; PRTL_MESSAGE_RESOURCE_ENTRY MsgEntry;
ANSI_STRING CsdString; ANSI_STRING CsdString;
ULONG Remaining = 0; SIZE_T Remaining = 0;
PCHAR RcEnd = NULL; PCHAR RcEnd = NULL;
CHAR VersionBuffer [65]; CHAR VersionBuffer [65];
@ -1245,7 +1245,8 @@ Phase1InitializationDiscard(IN PVOID Context)
PCHAR StringBuffer, EndBuffer, BeginBuffer, MpString = ""; PCHAR StringBuffer, EndBuffer, BeginBuffer, MpString = "";
PINIT_BUFFER InitBuffer; PINIT_BUFFER InitBuffer;
ANSI_STRING TempString; ANSI_STRING TempString;
ULONG LastTzBias, Size, Length, YearHack = 0, Disposition, MessageCode = 0; ULONG LastTzBias, Length, YearHack = 0, Disposition, MessageCode = 0;
SIZE_T Size;
PRTL_USER_PROCESS_INFORMATION ProcessInfo; PRTL_USER_PROCESS_INFORMATION ProcessInfo;
KEY_VALUE_PARTIAL_INFORMATION KeyPartialInfo; KEY_VALUE_PARTIAL_INFORMATION KeyPartialInfo;
UNICODE_STRING KeyName, DebugString; UNICODE_STRING KeyName, DebugString;
@ -1325,14 +1326,14 @@ Phase1InitializationDiscard(IN PVOID Context)
StringBuffer = InitBuffer->VersionBuffer; StringBuffer = InitBuffer->VersionBuffer;
BeginBuffer = StringBuffer; BeginBuffer = StringBuffer;
EndBuffer = StringBuffer; EndBuffer = StringBuffer;
Length = 256; Size = 256;
if (CmCSDVersionString.Length) if (CmCSDVersionString.Length)
{ {
/* Print the version string */ /* Print the version string */
Status = RtlStringCbPrintfExA(StringBuffer, Status = RtlStringCbPrintfExA(StringBuffer,
255, 255,
&EndBuffer, &EndBuffer,
&Length, &Size,
0, 0,
": %wZ", ": %wZ",
&CmCSDVersionString); &CmCSDVersionString);
@ -1345,7 +1346,7 @@ Phase1InitializationDiscard(IN PVOID Context)
else else
{ {
/* No version */ /* No version */
Length = 255; Size = 255;
} }
/* Null-terminate the string */ /* Null-terminate the string */
@ -1369,7 +1370,7 @@ Phase1InitializationDiscard(IN PVOID Context)
{ {
/* Create the banner message */ /* Create the banner message */
Status = RtlStringCbPrintfA(EndBuffer, Status = RtlStringCbPrintfA(EndBuffer,
Length, Size,
MsgEntry->Text, MsgEntry->Text,
StringBuffer, StringBuffer,
NtBuildNumber & 0xFFFF, NtBuildNumber & 0xFFFF,
@ -1383,7 +1384,7 @@ Phase1InitializationDiscard(IN PVOID Context)
else else
{ {
/* Use hard-coded banner message */ /* Use hard-coded banner message */
Status = RtlStringCbCopyA(EndBuffer, Length, "REACTOS (R)\n"); Status = RtlStringCbCopyA(EndBuffer, Size, "REACTOS (R)\n");
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
/* Bugcheck */ /* Bugcheck */

View file

@ -47,9 +47,7 @@ ExInitializeSystemLookasideList(IN PGENERAL_LOOKASIDE List,
List->Depth = 2; List->Depth = 2;
List->Allocate = ExAllocatePoolWithTag; List->Allocate = ExAllocatePoolWithTag;
List->Free = ExFreePool; List->Free = ExFreePool;
List->ListHead.Next.Next = NULL; InitializeSListHead(&List->ListHead);
List->ListHead.Depth = 0;
List->ListHead.Sequence = 0;
List->TotalAllocates = 0; List->TotalAllocates = 0;
List->AllocateHits = 0; List->AllocateHits = 0;
List->TotalFrees = 0; List->TotalFrees = 0;

View file

@ -242,6 +242,7 @@ NtQueryMutant(IN HANDLE MutantHandle,
MutantInformation, MutantInformation,
MutantInformationLength, MutantInformationLength,
ResultLength, ResultLength,
NULL,
PreviousMode); PreviousMode);
if(!NT_SUCCESS(Status)) if(!NT_SUCCESS(Status))
{ {

View file

@ -21,6 +21,12 @@ ULONG ExPushLockSpinCount = 0;
/* PRIVATE FUNCTIONS *********************************************************/ /* PRIVATE FUNCTIONS *********************************************************/
#ifdef _WIN64
#define InterlockedAndPointer(ptr,val) InterlockedAnd64((PLONGLONG)ptr,(LONGLONG)val)
#else
#define InterlockedAndPointer(ptr,val) InterlockedAnd((PLONG)ptr,(LONG)val)
#endif
/*++ /*++
* @name ExpInitializePushLocks * @name ExpInitializePushLocks
* *
@ -91,7 +97,7 @@ ExfWakePushLock(PEX_PUSH_LOCK PushLock,
ASSERT(NewValue.Waiting); ASSERT(NewValue.Waiting);
/* Write the New Value */ /* Write the New Value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) return; if (NewValue.Value == OldValue.Value) return;
@ -101,7 +107,7 @@ ExfWakePushLock(PEX_PUSH_LOCK PushLock,
} }
/* Save the First Block */ /* Save the First Block */
FirstWaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR)OldValue.Ptr & FirstWaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)(OldValue.Value &
~EX_PUSH_LOCK_PTR_BITS); ~EX_PUSH_LOCK_PTR_BITS);
WaitBlock = FirstWaitBlock; WaitBlock = FirstWaitBlock;
@ -139,7 +145,7 @@ ExfWakePushLock(PEX_PUSH_LOCK PushLock,
ASSERT(!NewValue.Waking); ASSERT(!NewValue.Waking);
/* Write the New Value */ /* Write the New Value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) break; if (NewValue.Value == OldValue.Value) break;
@ -158,7 +164,7 @@ ExfWakePushLock(PEX_PUSH_LOCK PushLock,
ASSERT(PushLock->Waiting); ASSERT(PushLock->Waiting);
/* Remove waking bit from pushlock */ /* Remove waking bit from pushlock */
InterlockedAnd((PLONG)PushLock, ~EX_PUSH_LOCK_WAKING); InterlockedAndPointer(&PushLock->Value, ~EX_PUSH_LOCK_WAKING);
/* Leave the loop */ /* Leave the loop */
break; break;
@ -240,7 +246,7 @@ ExpOptimizePushLockList(PEX_PUSH_LOCK PushLock,
} }
/* Get the wait block */ /* Get the wait block */
WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR)OldValue.Ptr & WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)(OldValue.Value &
~EX_PUSH_LOCK_PTR_BITS); ~EX_PUSH_LOCK_PTR_BITS);
/* Loop the blocks */ /* Loop the blocks */
@ -274,7 +280,7 @@ ExpOptimizePushLockList(PEX_PUSH_LOCK PushLock,
ASSERT(!NewValue.Waking); ASSERT(!NewValue.Waking);
/* Update the value */ /* Update the value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
@ -478,7 +484,7 @@ ExfAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
ASSERT(NewValue.Locked); ASSERT(NewValue.Locked);
/* Set the new value */ /* Set the new value */
if (InterlockedCompareExchangePointer(PushLock, if (InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr) != OldValue.Ptr) OldValue.Ptr) != OldValue.Ptr)
{ {
@ -508,8 +514,8 @@ ExfAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
WaitBlock->ShareCount = 0; WaitBlock->ShareCount = 0;
/* Set the current Wait Block pointer */ /* Set the current Wait Block pointer */
WaitBlock->Next = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR) WaitBlock->Next = (PEX_PUSH_LOCK_WAIT_BLOCK)(
OldValue.Ptr &~ EX_PUSH_LOCK_PTR_BITS); OldValue.Value &~ EX_PUSH_LOCK_PTR_BITS);
/* Point to ours */ /* Point to ours */
NewValue.Value = (OldValue.Value & EX_PUSH_LOCK_MULTIPLE_SHARED) | NewValue.Value = (OldValue.Value & EX_PUSH_LOCK_MULTIPLE_SHARED) |
@ -564,7 +570,7 @@ ExfAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
/* Write the new value */ /* Write the new value */
TempValue = NewValue; TempValue = NewValue;
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value != OldValue.Value) if (NewValue.Value != OldValue.Value)
@ -663,7 +669,7 @@ ExfAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
ASSERT(NewValue.Locked); ASSERT(NewValue.Locked);
/* Set the new value */ /* Set the new value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value != OldValue.Value) if (NewValue.Value != OldValue.Value)
@ -688,8 +694,8 @@ ExfAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
if (OldValue.Waiting) if (OldValue.Waiting)
{ {
/* Set the current Wait Block pointer */ /* Set the current Wait Block pointer */
WaitBlock->Next = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR) WaitBlock->Next = (PEX_PUSH_LOCK_WAIT_BLOCK)(
OldValue.Ptr &~ EX_PUSH_LOCK_PTR_BITS); OldValue.Value &~ EX_PUSH_LOCK_PTR_BITS);
/* Nobody is the last waiter yet */ /* Nobody is the last waiter yet */
WaitBlock->Last = NULL; WaitBlock->Last = NULL;
@ -727,7 +733,7 @@ ExfAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
#endif #endif
/* Write the new value */ /* Write the new value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Ptr != OldValue.Ptr) if (NewValue.Ptr != OldValue.Ptr)
@ -826,7 +832,7 @@ ExfReleasePushLock(PEX_PUSH_LOCK PushLock)
} }
/* Write the New Value */ /* Write the New Value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) return; if (NewValue.Value == OldValue.Value) return;
@ -840,7 +846,7 @@ ExfReleasePushLock(PEX_PUSH_LOCK PushLock)
if (OldValue.MultipleShared) if (OldValue.MultipleShared)
{ {
/* Get the wait block */ /* Get the wait block */
WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR)OldValue.Ptr & WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)(OldValue.Value &
~EX_PUSH_LOCK_PTR_BITS); ~EX_PUSH_LOCK_PTR_BITS);
/* Loop until we find the last wait block */ /* Loop until we find the last wait block */
@ -893,7 +899,7 @@ ExfReleasePushLock(PEX_PUSH_LOCK PushLock)
ASSERT(NewValue.Waking && !NewValue.Locked && !NewValue.MultipleShared); ASSERT(NewValue.Waking && !NewValue.Locked && !NewValue.MultipleShared);
/* Write the new value */ /* Write the new value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) return; if (NewValue.Value == OldValue.Value) return;
@ -913,7 +919,7 @@ ExfReleasePushLock(PEX_PUSH_LOCK PushLock)
/* Write the new value */ /* Write the new value */
WakeValue = NewValue; WakeValue = NewValue;
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value != OldValue.Value) continue; if (NewValue.Value != OldValue.Value) continue;
@ -966,7 +972,7 @@ ExfReleasePushLockShared(PEX_PUSH_LOCK PushLock)
} }
/* Write the New Value */ /* Write the New Value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) return; if (NewValue.Value == OldValue.Value) return;
@ -979,7 +985,7 @@ ExfReleasePushLockShared(PEX_PUSH_LOCK PushLock)
if (OldValue.MultipleShared) if (OldValue.MultipleShared)
{ {
/* Get the wait block */ /* Get the wait block */
WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)((ULONG_PTR)OldValue.Ptr & WaitBlock = (PEX_PUSH_LOCK_WAIT_BLOCK)(OldValue.Value &
~EX_PUSH_LOCK_PTR_BITS); ~EX_PUSH_LOCK_PTR_BITS);
/* Loop until we find the last wait block */ /* Loop until we find the last wait block */
@ -1029,7 +1035,7 @@ ExfReleasePushLockShared(PEX_PUSH_LOCK PushLock)
ASSERT(NewValue.Waking && !NewValue.Locked && !NewValue.MultipleShared); ASSERT(NewValue.Waking && !NewValue.Locked && !NewValue.MultipleShared);
/* Write the new value */ /* Write the new value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value == OldValue.Value) return; if (NewValue.Value == OldValue.Value) return;
@ -1049,7 +1055,7 @@ ExfReleasePushLockShared(PEX_PUSH_LOCK PushLock)
/* Write the new value */ /* Write the new value */
WakeValue = NewValue; WakeValue = NewValue;
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
if (NewValue.Value != OldValue.Value) continue; if (NewValue.Value != OldValue.Value) continue;
@ -1103,7 +1109,7 @@ ExfReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
/* Write the New Value. Save our original value for waking */ /* Write the New Value. Save our original value for waking */
WakeValue = NewValue; WakeValue = NewValue;
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
@ -1124,7 +1130,7 @@ ExfReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
ASSERT(NewValue.Waking && !NewValue.Waiting); ASSERT(NewValue.Waking && !NewValue.Waiting);
/* Write the New Value */ /* Write the New Value */
NewValue.Ptr = InterlockedCompareExchangePointer(PushLock, NewValue.Ptr = InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr); OldValue.Ptr);
@ -1168,7 +1174,7 @@ ExfTryToWakePushLock(PEX_PUSH_LOCK PushLock)
NewValue.Waking = TRUE; NewValue.Waking = TRUE;
/* Write the New Value */ /* Write the New Value */
if (InterlockedCompareExchangePointer(PushLock, if (InterlockedCompareExchangePointer(&PushLock->Ptr,
NewValue.Ptr, NewValue.Ptr,
OldValue.Ptr) == OldValue.Ptr) OldValue.Ptr) == OldValue.Ptr)
{ {

View file

@ -214,7 +214,7 @@ ExpAllocateExclusiveWaiterEvent(IN PERESOURCE Resource,
KeInitializeEvent(Event, SynchronizationEvent, FALSE); KeInitializeEvent(Event, SynchronizationEvent, FALSE);
/* Set it */ /* Set it */
if (InterlockedCompareExchangePointer(&Resource->ExclusiveWaiters, if (InterlockedCompareExchangePointer((PVOID*)&Resource->ExclusiveWaiters,
Event, Event,
NULL)) NULL))
{ {
@ -274,7 +274,7 @@ ExpAllocateSharedWaiterSemaphore(IN PERESOURCE Resource,
KeInitializeSemaphore(Semaphore, 0, MAXLONG); KeInitializeSemaphore(Semaphore, 0, MAXLONG);
/* Set it */ /* Set it */
if (InterlockedCompareExchangePointer(&Resource->SharedWaiters, if (InterlockedCompareExchangePointer((PVOID*)&Resource->SharedWaiters,
Semaphore, Semaphore,
NULL)) NULL))
{ {

View file

@ -235,6 +235,7 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle,
SemaphoreInformation, SemaphoreInformation,
SemaphoreInformationLength, SemaphoreInformationLength,
ReturnLength, ReturnLength,
NULL,
PreviousMode); PreviousMode);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {

View file

@ -1113,7 +1113,7 @@ QSI_DEF(SystemHandleInformation)
for (Count = 0; HandleCount > 0 ; HandleCount--) for (Count = 0; HandleCount > 0 ; HandleCount--)
{ {
Shi->Handles[i].UniqueProcessId = (USHORT)(ULONG)pr->UniqueProcessId; Shi->Handles[i].UniqueProcessId = (USHORT)(ULONG_PTR)pr->UniqueProcessId;
Count++; Count++;
i++; i++;
} }
@ -2023,7 +2023,7 @@ NtFlushInstructionCache(IN HANDLE ProcessHandle,
{ {
PAGED_CODE(); PAGED_CODE();
#if defined(_M_IX86) #if defined(_M_IX86) || defined(_M_AMD64)
__wbinvd(); __wbinvd();
#elif defined(_M_PPC) #elif defined(_M_PPC)
__asm__ __volatile__("tlbsync"); __asm__ __volatile__("tlbsync");

View file

@ -528,6 +528,7 @@ NtQueryTimer(IN HANDLE TimerHandle,
TimerInformation, TimerInformation,
TimerInformationLength, TimerInformationLength,
ReturnLength, ReturnLength,
NULL,
PreviousMode); PreviousMode);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;

View file

@ -147,7 +147,7 @@ ProcessLoop:
TimeoutPointer); TimeoutPointer);
/* Check if we timed out and quit this loop in that case */ /* Check if we timed out and quit this loop in that case */
if ((NTSTATUS)QueueEntry == STATUS_TIMEOUT) break; if ((NTSTATUS)(ULONG_PTR)QueueEntry == STATUS_TIMEOUT) break;
/* Increment Processed Work Items */ /* Increment Processed Work Items */
InterlockedIncrement((PLONG)&WorkQueue->WorkItemsProcessed); InterlockedIncrement((PLONG)&WorkQueue->WorkItemsProcessed);
@ -271,7 +271,7 @@ ExpCreateWorkerThread(WORK_QUEUE_TYPE WorkQueueType,
NULL, NULL,
NULL, NULL,
ExpWorkerThreadEntryPoint, ExpWorkerThreadEntryPoint,
(PVOID)Context); UlongToPtr(Context));
/* If the thread is dynamic */ /* If the thread is dynamic */
if (Dynamic) if (Dynamic)

View file

@ -1301,7 +1301,7 @@ CmpCreateEvent(
PVOID PVOID
NTAPI NTAPI
CmpAllocate( CmpAllocate(
IN ULONG Size, IN SIZE_T Size,
IN BOOLEAN Paged, IN BOOLEAN Paged,
IN ULONG Tag IN ULONG Tag
); );

View file

@ -257,7 +257,7 @@ WRMSR(
); );
/* Finds a new thread to run */ /* Finds a new thread to run */
NTSTATUS LONG_PTR
FASTCALL FASTCALL
KiSwapThread( KiSwapThread(
IN PKTHREAD Thread, IN PKTHREAD Thread,
@ -641,7 +641,7 @@ VOID
FASTCALL FASTCALL
KiUnwaitThread( KiUnwaitThread(
IN PKTHREAD Thread, IN PKTHREAD Thread,
IN NTSTATUS WaitStatus, IN LONG_PTR WaitStatus,
IN KPRIORITY Increment IN KPRIORITY Increment
); );

View file

@ -63,6 +63,7 @@ DefaultQueryInfoBufferCheck(ULONG Class,
PVOID Buffer, PVOID Buffer,
ULONG BufferLength, ULONG BufferLength,
PULONG ReturnLength, PULONG ReturnLength,
PULONG_PTR ReturnLengthPtr,
KPROCESSOR_MODE PreviousMode) KPROCESSOR_MODE PreviousMode)
{ {
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
@ -99,6 +100,10 @@ DefaultQueryInfoBufferCheck(ULONG Class,
{ {
ProbeForWriteUlong(ReturnLength); ProbeForWriteUlong(ReturnLength);
} }
if (ReturnLengthPtr != NULL)
{
ProbeForWrite(ReturnLengthPtr, sizeof(ULONG_PTR), sizeof(ULONG_PTR));
}
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {

View file

@ -398,6 +398,7 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle,
IoCompletionInformation, IoCompletionInformation,
IoCompletionInformationLength, IoCompletionInformationLength,
ResultLength, ResultLength,
NULL,
PreviousMode); PreviousMode);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
@ -497,11 +498,11 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
ListEntry = KeRemoveQueue(Queue, PreviousMode, Timeout); ListEntry = KeRemoveQueue(Queue, PreviousMode, Timeout);
/* If we got a timeout or user_apc back, return the status */ /* If we got a timeout or user_apc back, return the status */
if (((NTSTATUS)ListEntry == STATUS_TIMEOUT) || if (((NTSTATUS)(ULONG_PTR)ListEntry == STATUS_TIMEOUT) ||
((NTSTATUS)ListEntry == STATUS_USER_APC)) ((NTSTATUS)(ULONG_PTR)ListEntry == STATUS_USER_APC))
{ {
/* Set this as the status */ /* Set this as the status */
Status = (NTSTATUS)ListEntry; Status = (NTSTATUS)(ULONG_PTR)ListEntry;
} }
else else
{ {

View file

@ -2451,7 +2451,7 @@ NtSetInformationFile(IN HANDLE FileHandle,
/* Set the Data */ /* Set the Data */
Context->Key = CompletionInfo->Key; Context->Key = CompletionInfo->Key;
Context->Port = Queue; Context->Port = Queue;
if (InterlockedCompareExchangePointer(&FileObject-> if (InterlockedCompareExchangePointer((PVOID*)&FileObject->
CompletionContext, CompletionContext,
Context, Context,
NULL)) NULL))

View file

@ -1214,7 +1214,7 @@ IofCompleteRequest(IN PIRP Irp,
if (LastStackPtr->Control & SL_ERROR_RETURNED) if (LastStackPtr->Control & SL_ERROR_RETURNED)
{ {
/* Get the error code */ /* Get the error code */
ErrorCode = (NTSTATUS)LastStackPtr->Parameters.Others.Argument4; ErrorCode = PtrToUlong(LastStackPtr->Parameters.Others.Argument4);
} }
/* Get the Current Stack and skip it */ /* Get the Current Stack and skip it */
@ -1236,7 +1236,7 @@ IofCompleteRequest(IN PIRP Irp,
/* Update the error for the current stack */ /* Update the error for the current stack */
ErrorCode = Irp->IoStatus.Status; ErrorCode = Irp->IoStatus.Status;
StackPtr->Control |= SL_ERROR_RETURNED; StackPtr->Control |= SL_ERROR_RETURNED;
LastStackPtr->Parameters.Others.Argument4 = (PVOID)ErrorCode; LastStackPtr->Parameters.Others.Argument4 = UlongToPtr(ErrorCode);
LastStackPtr->Control |= SL_ERROR_RETURNED; LastStackPtr->Control |= SL_ERROR_RETURNED;
} }
} }
@ -1610,7 +1610,7 @@ NTAPI
IoGetRequestorProcessId(IN PIRP Irp) IoGetRequestorProcessId(IN PIRP Irp)
{ {
/* Return the requestor process' id */ /* Return the requestor process' id */
return (ULONG)(IoGetRequestorProcess(Irp)->UniqueProcessId); return PtrToUlong(IoGetRequestorProcess(Irp)->UniqueProcessId);
} }
/* /*
@ -1782,5 +1782,5 @@ NTAPI
IoSetTopLevelIrp(IN PIRP Irp) IoSetTopLevelIrp(IN PIRP Irp)
{ {
/* Set the IRP */ /* Set the IRP */
PsGetCurrentThread()->TopLevelIrp = (ULONG)Irp; PsGetCurrentThread()->TopLevelIrp = (ULONG_PTR)Irp;
} }

View file

@ -54,7 +54,7 @@ KdpServiceDispatcher(ULONG Service,
#if DBG #if DBG
case ' soR': /* ROS-INTERNAL */ case ' soR': /* ROS-INTERNAL */
{ {
switch ((ULONG)Buffer1) switch ((ULONG_PTR)Buffer1)
{ {
case ManualBugCheck: case ManualBugCheck:
KeBugCheck(MANUALLY_INITIATED_CRASH); KeBugCheck(MANUALLY_INITIATED_CRASH);

View file

@ -45,7 +45,7 @@ KdpBochsInit(PKD_DISPATCH_TABLE DispatchTable,
if (BootPhase == 0) if (BootPhase == 0)
{ {
Value = READ_PORT_UCHAR(BOCHS_LOGGER_PORT); Value = READ_PORT_UCHAR(BOCHS_LOGGER_PORT);
if (Value != (ULONG)BOCHS_LOGGER_PORT) if (Value != (ULONG_PTR)BOCHS_LOGGER_PORT)
{ {
KdpDebugMode.Bochs = FALSE; KdpDebugMode.Bochs = FALSE;
return; return;

View file

@ -209,6 +209,7 @@ KdbpKdbTrapFrameFromKernelStack(
RtlZeroMemory(KdbTrapFrame, sizeof(KDB_KTRAP_FRAME)); RtlZeroMemory(KdbTrapFrame, sizeof(KDB_KTRAP_FRAME));
StackPtr = (ULONG_PTR *) KernelStack; StackPtr = (ULONG_PTR *) KernelStack;
#if _M_X86_
KdbTrapFrame->Tf.Ebp = StackPtr[3]; KdbTrapFrame->Tf.Ebp = StackPtr[3];
KdbTrapFrame->Tf.Edi = StackPtr[4]; KdbTrapFrame->Tf.Edi = StackPtr[4];
KdbTrapFrame->Tf.Esi = StackPtr[5]; KdbTrapFrame->Tf.Esi = StackPtr[5];
@ -220,6 +221,7 @@ KdbpKdbTrapFrameFromKernelStack(
KdbTrapFrame->Tf.SegDs = KGDT_R0_DATA; KdbTrapFrame->Tf.SegDs = KGDT_R0_DATA;
KdbTrapFrame->Tf.SegEs = KGDT_R0_DATA; KdbTrapFrame->Tf.SegEs = KGDT_R0_DATA;
KdbTrapFrame->Tf.SegGs = KGDT_R0_DATA; KdbTrapFrame->Tf.SegGs = KGDT_R0_DATA;
#endif
/* FIXME: what about the other registers??? */ /* FIXME: what about the other registers??? */
} }
@ -421,7 +423,7 @@ KdbpStepIntoInstruction(
} }
/* Get the interrupt descriptor */ /* Get the interrupt descriptor */
if (!NT_SUCCESS(KdbpSafeReadMemory(IntDesc, (PVOID)(Idtr.Base + (IntVect * 8)), sizeof (IntDesc)))) if (!NT_SUCCESS(KdbpSafeReadMemory(IntDesc, (PVOID)(ULONG_PTR)(Idtr.Base + (IntVect * 8)), sizeof (IntDesc))))
{ {
/*KdbpPrint("Couldn't access memory at 0x%p\n", (ULONG_PTR)Idtr.Base + (IntVect * 8));*/ /*KdbpPrint("Couldn't access memory at 0x%p\n", (ULONG_PTR)Idtr.Base + (IntVect * 8));*/
return FALSE; return FALSE;
@ -1126,7 +1128,7 @@ KdbpAttachToThread(
/* Get a pointer to the thread */ /* Get a pointer to the thread */
if (!NT_SUCCESS(PsLookupThreadByThreadId(ThreadId, &Thread))) if (!NT_SUCCESS(PsLookupThreadByThreadId(ThreadId, &Thread)))
{ {
KdbpPrint("Invalid thread id: 0x%08x\n", (ULONG)ThreadId); KdbpPrint("Invalid thread id: 0x%08x\n", (ULONG_PTR)ThreadId);
return FALSE; return FALSE;
} }
Process = Thread->ThreadsProcess; Process = Thread->ThreadsProcess;
@ -1208,7 +1210,7 @@ KdbpAttachToProcess(
/* Get a pointer to the process */ /* Get a pointer to the process */
if (!NT_SUCCESS(PsLookupProcessByProcessId(ProcessId, &Process))) if (!NT_SUCCESS(PsLookupProcessByProcessId(ProcessId, &Process)))
{ {
KdbpPrint("Invalid process id: 0x%08x\n", (ULONG)ProcessId); KdbpPrint("Invalid process id: 0x%08x\n", (ULONG_PTR)ProcessId);
return FALSE; return FALSE;
} }
@ -1216,7 +1218,7 @@ KdbpAttachToProcess(
ObDereferenceObject(Process); ObDereferenceObject(Process);
if (Entry == &KdbCurrentProcess->ThreadListHead) if (Entry == &KdbCurrentProcess->ThreadListHead)
{ {
KdbpPrint("No threads in process 0x%08x, cannot attach to process!\n", (ULONG)ProcessId); KdbpPrint("No threads in process 0x%p, cannot attach to process!\n", ProcessId);
return FALSE; return FALSE;
} }
@ -1257,7 +1259,7 @@ KdbpInternalEnter()
SavedStackLimit = Thread->Tcb.StackLimit; SavedStackLimit = Thread->Tcb.StackLimit;
SavedKernelStack = Thread->Tcb.KernelStack; SavedKernelStack = Thread->Tcb.KernelStack;
Thread->Tcb.InitialStack = Thread->Tcb.StackBase = (char*)KdbStack + KDB_STACK_SIZE; Thread->Tcb.InitialStack = Thread->Tcb.StackBase = (char*)KdbStack + KDB_STACK_SIZE;
Thread->Tcb.StackLimit = (ULONG)KdbStack; Thread->Tcb.StackLimit = (ULONG_PTR)KdbStack;
Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE; Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE;
/*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/ /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/

View file

@ -418,10 +418,10 @@ KdbSymProcessSymbols(
KdbpSymAddCachedFile(&LdrEntry->FullDllName, LdrEntry->PatchInformation); KdbpSymAddCachedFile(&LdrEntry->FullDllName, LdrEntry->PatchInformation);
} }
DPRINT("Installed symbols: %wZ@%08x-%08x %p\n", DPRINT("Installed symbols: %wZ@%p-%p %p\n",
&LdrEntry->BaseDllName, &LdrEntry->BaseDllName,
LdrEntry->DllBase, LdrEntry->DllBase,
LdrEntry->SizeOfImage + (ULONG)LdrEntry->DllBase, (PVOID)(LdrEntry->SizeOfImage + (ULONG_PTR)LdrEntry->DllBase),
LdrEntry->PatchInformation); LdrEntry->PatchInformation);
} }

View file

@ -57,7 +57,7 @@ KiActivateWaiterQueue(IN PKQUEUE Queue)
KWAIT_BLOCK, KWAIT_BLOCK,
WaitListEntry); WaitListEntry);
Thread = WaitBlock->Thread; Thread = WaitBlock->Thread;
KiUnwaitThread(Thread, (NTSTATUS)QueueEntry, IO_NO_INCREMENT); KiUnwaitThread(Thread, (LONG_PTR)QueueEntry, IO_NO_INCREMENT);
} }
} }
} }
@ -102,7 +102,7 @@ KiInsertQueue(IN PKQUEUE Queue,
Thread = WaitBlock->Thread; Thread = WaitBlock->Thread;
/* Remove the queue from the thread's wait list */ /* Remove the queue from the thread's wait list */
Thread->WaitStatus = (NTSTATUS)Entry; Thread->WaitStatus = (LONG_PTR)Entry;
if (Thread->WaitListEntry.Flink) RemoveEntryList(&Thread->WaitListEntry); if (Thread->WaitListEntry.Flink) RemoveEntryList(&Thread->WaitListEntry);
/* Increase the active threads and remove any wait reason */ /* Increase the active threads and remove any wait reason */
@ -239,7 +239,7 @@ KeRemoveQueue(IN PKQUEUE Queue,
IN PLARGE_INTEGER Timeout OPTIONAL) IN PLARGE_INTEGER Timeout OPTIONAL)
{ {
PLIST_ENTRY QueueEntry; PLIST_ENTRY QueueEntry;
NTSTATUS Status; LONG_PTR Status;
PKTHREAD Thread = KeGetCurrentThread(); PKTHREAD Thread = KeGetCurrentThread();
PKQUEUE PreviousQueue; PKQUEUE PreviousQueue;
PKWAIT_BLOCK WaitBlock = &Thread->WaitBlock[0]; PKWAIT_BLOCK WaitBlock = &Thread->WaitBlock[0];

View file

@ -1356,7 +1356,9 @@ KeTerminateThread(IN KPRIORITY Increment)
SavedEntry = Entry; SavedEntry = Entry;
/* Now try to do the exchange */ /* Now try to do the exchange */
Entry = InterlockedCompareExchangePointer(ListHead, ThreadAddr, Entry); Entry = InterlockedCompareExchangePointer((PVOID*)ListHead,
ThreadAddr,
Entry);
/* Break out if the change was succesful */ /* Break out if the change was succesful */
} while (Entry != SavedEntry); } while (Entry != SavedEntry);

View file

@ -334,7 +334,7 @@ KiSelectNextThread(IN PKPRCB Prcb)
return Thread; return Thread;
} }
NTSTATUS LONG_PTR
FASTCALL FASTCALL
KiSwapThread(IN PKTHREAD CurrentThread, KiSwapThread(IN PKTHREAD CurrentThread,
IN PKPRCB Prcb) IN PKPRCB Prcb)

View file

@ -87,7 +87,7 @@ KiUnlinkThread(IN PKTHREAD Thread,
VOID VOID
FASTCALL FASTCALL
KiUnwaitThread(IN PKTHREAD Thread, KiUnwaitThread(IN PKTHREAD Thread,
IN NTSTATUS WaitStatus, IN LONG_PTR WaitStatus,
IN KPRIORITY Increment) IN KPRIORITY Increment)
{ {
/* Unlink the thread */ /* Unlink the thread */

View file

@ -4311,6 +4311,7 @@ NtQuerySection(IN HANDLE SectionHandle,
sizeof(ExSectionInfoClass) / sizeof(ExSectionInfoClass[0]), sizeof(ExSectionInfoClass) / sizeof(ExSectionInfoClass[0]),
SectionInformation, SectionInformation,
SectionInformationLength, SectionInformationLength,
NULL,
ResultLength, ResultLength,
PreviousMode); PreviousMode);

View file

@ -631,7 +631,7 @@ PsImpersonateClient(IN PETHREAD Thread,
if (!Impersonation) return STATUS_INSUFFICIENT_RESOURCES; if (!Impersonation) return STATUS_INSUFFICIENT_RESOURCES;
/* Update the pointer */ /* Update the pointer */
OldData = InterlockedCompareExchangePointer(&Thread-> OldData = InterlockedCompareExchangePointer((PVOID*)&Thread->
ImpersonationInfo, ImpersonationInfo,
Impersonation, Impersonation,
NULL); NULL);

View file

@ -138,7 +138,7 @@ SeLocateProcessImageName(IN PEPROCESS Process,
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
/* Set it */ /* Set it */
if (InterlockedCompareExchangePointer(&Process-> if (InterlockedCompareExchangePointer((PVOID*)&Process->
SeAuditProcessCreationInfo.ImageFileName, SeAuditProcessCreationInfo.ImageFileName,
AuditName, AuditName,
NULL)) NULL))

View file

@ -49,7 +49,7 @@ NTSTATUS
NTAPI NTAPI
LsaFreeReturnBuffer(PVOID Buffer) LsaFreeReturnBuffer(PVOID Buffer)
{ {
ULONG Size = 0; SIZE_T Size = 0;
return ZwFreeVirtualMemory(NtCurrentProcess(), return ZwFreeVirtualMemory(NtCurrentProcess(),
&Buffer, &Buffer,
&Size, &Size,

View file

@ -870,6 +870,7 @@ NtQueryInformationToken(IN HANDLE TokenHandle,
TokenInformation, TokenInformation,
TokenInformationLength, TokenInformationLength,
ReturnLength, ReturnLength,
NULL,
PreviousMode); PreviousMode);
if(!NT_SUCCESS(Status)) if(!NT_SUCCESS(Status))