mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 09:00:27 +00:00
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:
parent
0206768d44
commit
f9868fc771
35 changed files with 109 additions and 88 deletions
|
@ -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++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);*/
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in a new issue