Amd64/misc 64bit fixes (#236)

[REACTOS] Misc 64 bit fixes

* [NTOS:MM] Allow MEM_DOS_LIM in NtMapViewOfSection on x64 as well
* [NTOS:MM] Implement x64 version of MmIsDisabledPage
* [HAL] Remove obsolete code
* [NTOS:KE] Fix amd64 version of KeContextToTrapFrame and KeTrapFrameToContext
* [XDK] Fix CONTEXT_XSTATE definition
* [PCNET] Convert physical address types from pointers to PHYSICAL_ADDRESS
This commit is contained in:
Timo Kreuzer 2018-01-01 12:07:50 +01:00 committed by GitHub
parent 5a4693ff6f
commit a2f7de7ee8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 72 additions and 76 deletions

View file

@ -64,11 +64,10 @@ DbgUiConvertStateChangeStructure(IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange,
NTSTATUS Status; NTSTATUS Status;
THREAD_BASIC_INFORMATION ThreadBasicInfo; THREAD_BASIC_INFORMATION ThreadBasicInfo;
LPDEBUG_EVENT DebugEvent = Win32DebugEvent; LPDEBUG_EVENT DebugEvent = Win32DebugEvent;
/* Write common data */ /* Write common data */
DebugEvent->dwProcessId = (DWORD)WaitStateChange-> DebugEvent->dwProcessId = PtrToUlong(WaitStateChange->AppClientId.UniqueProcess);
AppClientId.UniqueProcess; DebugEvent->dwThreadId = PtrToUlong(WaitStateChange->AppClientId.UniqueThread);
DebugEvent->dwThreadId = (DWORD)WaitStateChange->AppClientId.UniqueThread;
/* Check what kind of even this is */ /* Check what kind of even this is */
switch (WaitStateChange->NewState) switch (WaitStateChange->NewState)

View file

@ -20,7 +20,7 @@ TranslateStdHandle(IN HANDLE hHandle)
{ {
PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters; PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
switch ((ULONG)hHandle) switch ((ULONG_PTR)hHandle)
{ {
case STD_INPUT_HANDLE: return Ppb->StandardInput; case STD_INPUT_HANDLE: return Ppb->StandardInput;
case STD_OUTPUT_HANDLE: return Ppb->StandardOutput; case STD_OUTPUT_HANDLE: return Ppb->StandardOutput;

View file

@ -63,14 +63,15 @@ static LPWSTR load_message( HMODULE module, UINT id, WORD lang )
{ {
MESSAGE_RESOURCE_ENTRY *mre; MESSAGE_RESOURCE_ENTRY *mre;
WCHAR *buffer; WCHAR *buffer;
NTSTATUS status; NTSTATUS Status;
TRACE("module = %p, id = %08x\n", module, id ); TRACE("module = %p, id = %08x\n", module, id );
if (!module) module = GetModuleHandleW( NULL ); if (!module) module = GetModuleHandleW( NULL );
if ((status = RtlFindMessage( module, (ULONG)RT_MESSAGETABLE, lang, id, &mre )) != STATUS_SUCCESS) Status = RtlFindMessage(module, (ULONG_PTR)RT_MESSAGETABLE, lang, id, &mre);
if (!NT_SUCCESS(Status))
{ {
SetLastError( RtlNtStatusToDosError(status) ); SetLastError(RtlNtStatusToDosError(Status));
return NULL; return NULL;
} }

View file

@ -113,7 +113,7 @@ INT_PTR CALLBACK PickIconProc(HWND hwndDlg,
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
pIconContext = (PPICK_ICON_CONTEXT)lParam; pIconContext = (PPICK_ICON_CONTEXT)lParam;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)pIconContext); SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pIconContext);
pIconContext->hDlgCtrl = GetDlgItem(hwndDlg, IDC_PICKICON_LIST); pIconContext->hDlgCtrl = GetDlgItem(hwndDlg, IDC_PICKICON_LIST);
SendMessageW(pIconContext->hDlgCtrl, LB_SETCOLUMNWIDTH, 32, 0); SendMessageW(pIconContext->hDlgCtrl, LB_SETCOLUMNWIDTH, 32, 0);
EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext->hDlgCtrl); EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext->hDlgCtrl);

View file

@ -27,7 +27,7 @@ void OskitDumpBuffer( PCHAR Data, UINT Len ) {
for( i = 0; i < Len; i++ ) { for( i = 0; i < Len; i++ ) {
if( i && !(i & 0xf) ) DbgPrint( "\n" ); if( i && !(i & 0xf) ) DbgPrint( "\n" );
if( !(i & 0xf) ) DbgPrint( "%08x: ", (UINT)(Data + i) ); if( !(i & 0xf) ) DbgPrint( "%p: ", (Data + i) );
DbgPrint( " %02x", Data[i] & 0xff ); DbgPrint( " %02x", Data[i] & 0xff );
} }
DbgPrint("\n"); DbgPrint("\n");

View file

@ -139,8 +139,8 @@ MiniportHandleInterrupt(
IndicatedData = TRUE; IndicatedData = TRUE;
RtlZeroMemory(Descriptor, sizeof(RECEIVE_DESCRIPTOR)); RtlZeroMemory(Descriptor, sizeof(RECEIVE_DESCRIPTOR));
Descriptor->RBADR = Descriptor->RBADR = Adapter->ReceiveBufferPtrPhys.QuadPart +
(ULONG)(Adapter->ReceiveBufferPtrPhys + Adapter->CurrentReceiveDescriptorIndex * BUFFER_SIZE); (Adapter->CurrentReceiveDescriptorIndex * BUFFER_SIZE);
Descriptor->BCNT = (-BUFFER_SIZE) | 0xf000; Descriptor->BCNT = (-BUFFER_SIZE) | 0xf000;
Descriptor->FLAGS |= RD_OWN; Descriptor->FLAGS |= RD_OWN;
@ -308,11 +308,9 @@ MiFreeSharedMemory(
{ {
NDIS_PHYSICAL_ADDRESS PhysicalAddress; NDIS_PHYSICAL_ADDRESS PhysicalAddress;
PhysicalAddress.u.HighPart = 0;
if(Adapter->InitializationBlockVirt) if(Adapter->InitializationBlockVirt)
{ {
PhysicalAddress.u.LowPart = (ULONG)Adapter->InitializationBlockPhys; PhysicalAddress = Adapter->InitializationBlockPhys;
NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->InitializationBlockLength, NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->InitializationBlockLength,
FALSE, Adapter->InitializationBlockVirt, PhysicalAddress); FALSE, Adapter->InitializationBlockVirt, PhysicalAddress);
Adapter->InitializationBlockVirt = NULL; Adapter->InitializationBlockVirt = NULL;
@ -320,7 +318,7 @@ MiFreeSharedMemory(
if(Adapter->TransmitDescriptorRingVirt) if(Adapter->TransmitDescriptorRingVirt)
{ {
PhysicalAddress.u.LowPart = (ULONG)Adapter->TransmitDescriptorRingPhys; PhysicalAddress = Adapter->TransmitDescriptorRingPhys;
NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitDescriptorRingLength, NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitDescriptorRingLength,
FALSE, Adapter->TransmitDescriptorRingVirt, PhysicalAddress); FALSE, Adapter->TransmitDescriptorRingVirt, PhysicalAddress);
Adapter->TransmitDescriptorRingVirt = NULL; Adapter->TransmitDescriptorRingVirt = NULL;
@ -328,7 +326,7 @@ MiFreeSharedMemory(
if(Adapter->ReceiveDescriptorRingVirt) if(Adapter->ReceiveDescriptorRingVirt)
{ {
PhysicalAddress.u.LowPart = (ULONG)Adapter->ReceiveDescriptorRingPhys; PhysicalAddress = Adapter->ReceiveDescriptorRingPhys;
NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveDescriptorRingLength, NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveDescriptorRingLength,
FALSE, Adapter->ReceiveDescriptorRingVirt, PhysicalAddress); FALSE, Adapter->ReceiveDescriptorRingVirt, PhysicalAddress);
Adapter->ReceiveDescriptorRingVirt = NULL; Adapter->ReceiveDescriptorRingVirt = NULL;
@ -336,7 +334,7 @@ MiFreeSharedMemory(
if(Adapter->TransmitBufferPtrVirt) if(Adapter->TransmitBufferPtrVirt)
{ {
PhysicalAddress.u.LowPart = (ULONG)Adapter->TransmitBufferPtrPhys; PhysicalAddress = Adapter->TransmitBufferPtrPhys;
NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitBufferLength, NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitBufferLength,
TRUE, Adapter->TransmitBufferPtrVirt, PhysicalAddress); TRUE, Adapter->TransmitBufferPtrVirt, PhysicalAddress);
Adapter->TransmitBufferPtrVirt = NULL; Adapter->TransmitBufferPtrVirt = NULL;
@ -344,7 +342,7 @@ MiFreeSharedMemory(
if(Adapter->ReceiveBufferPtrVirt) if(Adapter->ReceiveBufferPtrVirt)
{ {
PhysicalAddress.u.LowPart = (ULONG)Adapter->ReceiveBufferPtrPhys; PhysicalAddress = Adapter->ReceiveBufferPtrPhys;
NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveBufferLength, NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveBufferLength,
TRUE, Adapter->ReceiveBufferPtrVirt, PhysicalAddress); TRUE, Adapter->ReceiveBufferPtrVirt, PhysicalAddress);
Adapter->ReceiveBufferPtrVirt = NULL; Adapter->ReceiveBufferPtrVirt = NULL;
@ -383,13 +381,13 @@ MiAllocateSharedMemory(
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
if(((ULONG)Adapter->InitializationBlockVirt & 0x00000003) != 0) if (((ULONG_PTR)Adapter->InitializationBlockVirt & 0x00000003) != 0)
{ {
DPRINT1("address 0x%x not dword-aligned\n", Adapter->InitializationBlockVirt); DPRINT1("address 0x%x not dword-aligned\n", Adapter->InitializationBlockVirt);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
Adapter->InitializationBlockPhys = (PINITIALIZATION_BLOCK)NdisGetPhysicalAddressLow(PhysicalAddress); Adapter->InitializationBlockPhys = PhysicalAddress;
/* allocate the transport descriptor ring */ /* allocate the transport descriptor ring */
Adapter->TransmitDescriptorRingLength = sizeof(TRANSMIT_DESCRIPTOR) * BufferCount; Adapter->TransmitDescriptorRingLength = sizeof(TRANSMIT_DESCRIPTOR) * BufferCount;
@ -404,13 +402,13 @@ MiAllocateSharedMemory(
continue; continue;
} }
if (((ULONG)Adapter->TransmitDescriptorRingVirt & 0x00000003) != 0) if (((ULONG_PTR)Adapter->TransmitDescriptorRingVirt & 0x00000003) != 0)
{ {
DPRINT1("address 0x%x not dword-aligned\n", Adapter->TransmitDescriptorRingVirt); DPRINT1("address 0x%x not dword-aligned\n", Adapter->TransmitDescriptorRingVirt);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
Adapter->TransmitDescriptorRingPhys = (PTRANSMIT_DESCRIPTOR)NdisGetPhysicalAddressLow(PhysicalAddress); Adapter->TransmitDescriptorRingPhys = PhysicalAddress;
RtlZeroMemory(Adapter->TransmitDescriptorRingVirt, sizeof(TRANSMIT_DESCRIPTOR) * BufferCount); RtlZeroMemory(Adapter->TransmitDescriptorRingVirt, sizeof(TRANSMIT_DESCRIPTOR) * BufferCount);
/* allocate the receive descriptor ring */ /* allocate the receive descriptor ring */
@ -426,13 +424,13 @@ MiAllocateSharedMemory(
continue; continue;
} }
if (((ULONG)Adapter->ReceiveDescriptorRingVirt & 0x00000003) != 0) if (((ULONG_PTR)Adapter->ReceiveDescriptorRingVirt & 0x00000003) != 0)
{ {
DPRINT1("address 0x%x not dword-aligned\n", Adapter->ReceiveDescriptorRingVirt); DPRINT1("address 0x%x not dword-aligned\n", Adapter->ReceiveDescriptorRingVirt);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
Adapter->ReceiveDescriptorRingPhys = (PRECEIVE_DESCRIPTOR)NdisGetPhysicalAddressLow(PhysicalAddress); Adapter->ReceiveDescriptorRingPhys = PhysicalAddress;
RtlZeroMemory(Adapter->ReceiveDescriptorRingVirt, sizeof(RECEIVE_DESCRIPTOR) * BufferCount); RtlZeroMemory(Adapter->ReceiveDescriptorRingVirt, sizeof(RECEIVE_DESCRIPTOR) * BufferCount);
/* allocate transmit buffers */ /* allocate transmit buffers */
@ -448,13 +446,13 @@ MiAllocateSharedMemory(
continue; continue;
} }
if (((ULONG)Adapter->TransmitBufferPtrVirt & 0x00000003) != 0) if(((ULONG_PTR)Adapter->TransmitBufferPtrVirt & 0x00000003) != 0)
{ {
DPRINT1("address 0x%x not dword-aligned\n", Adapter->TransmitBufferPtrVirt); DPRINT1("address 0x%x not dword-aligned\n", Adapter->TransmitBufferPtrVirt);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
Adapter->TransmitBufferPtrPhys = (PCHAR)NdisGetPhysicalAddressLow(PhysicalAddress); Adapter->TransmitBufferPtrPhys = PhysicalAddress;
RtlZeroMemory(Adapter->TransmitBufferPtrVirt, BUFFER_SIZE * BufferCount); RtlZeroMemory(Adapter->TransmitBufferPtrVirt, BUFFER_SIZE * BufferCount);
/* allocate receive buffers */ /* allocate receive buffers */
@ -470,13 +468,13 @@ MiAllocateSharedMemory(
continue; continue;
} }
if (((ULONG)Adapter->ReceiveBufferPtrVirt & 0x00000003) != 0) if (((ULONG_PTR)Adapter->ReceiveBufferPtrVirt & 0x00000003) != 0)
{ {
DPRINT1("address 0x%x not dword-aligned\n", Adapter->ReceiveBufferPtrVirt); DPRINT1("address 0x%x not dword-aligned\n", Adapter->ReceiveBufferPtrVirt);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
Adapter->ReceiveBufferPtrPhys = (PCHAR)NdisGetPhysicalAddressLow(PhysicalAddress); Adapter->ReceiveBufferPtrPhys = PhysicalAddress;
RtlZeroMemory(Adapter->ReceiveBufferPtrVirt, BUFFER_SIZE * BufferCount); RtlZeroMemory(Adapter->ReceiveBufferPtrVirt, BUFFER_SIZE * BufferCount);
break; break;
@ -495,7 +493,7 @@ MiAllocateSharedMemory(
TransmitDescriptor = Adapter->TransmitDescriptorRingVirt; TransmitDescriptor = Adapter->TransmitDescriptorRingVirt;
for(i = 0; i < BufferCount; i++) for(i = 0; i < BufferCount; i++)
{ {
(TransmitDescriptor+i)->TBADR = (ULONG)Adapter->TransmitBufferPtrPhys + i * BUFFER_SIZE; (TransmitDescriptor+i)->TBADR = Adapter->TransmitBufferPtrPhys.QuadPart + i * BUFFER_SIZE;
(TransmitDescriptor+i)->BCNT = 0xf000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */ (TransmitDescriptor+i)->BCNT = 0xf000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */
(TransmitDescriptor+i)->FLAGS = TD1_STP | TD1_ENP; (TransmitDescriptor+i)->FLAGS = TD1_STP | TD1_ENP;
} }
@ -506,7 +504,7 @@ MiAllocateSharedMemory(
ReceiveDescriptor = Adapter->ReceiveDescriptorRingVirt; ReceiveDescriptor = Adapter->ReceiveDescriptorRingVirt;
for(i = 0; i < BufferCount; i++) for(i = 0; i < BufferCount; i++)
{ {
(ReceiveDescriptor+i)->RBADR = (ULONG)Adapter->ReceiveBufferPtrPhys + i * BUFFER_SIZE; (ReceiveDescriptor+i)->RBADR = Adapter->ReceiveBufferPtrPhys.QuadPart + i * BUFFER_SIZE;
(ReceiveDescriptor+i)->BCNT = 0xf000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */ (ReceiveDescriptor+i)->BCNT = 0xf000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */
(ReceiveDescriptor+i)->FLAGS = RD_OWN; (ReceiveDescriptor+i)->FLAGS = RD_OWN;
} }
@ -542,12 +540,12 @@ MiPrepareInitializationBlock(
/* set up receive ring */ /* set up receive ring */
DPRINT("Receive ring physical address: 0x%x\n", Adapter->ReceiveDescriptorRingPhys); DPRINT("Receive ring physical address: 0x%x\n", Adapter->ReceiveDescriptorRingPhys);
Adapter->InitializationBlockVirt->RDRA = (ULONG)Adapter->ReceiveDescriptorRingPhys; Adapter->InitializationBlockVirt->RDRA = Adapter->ReceiveDescriptorRingPhys.QuadPart;
Adapter->InitializationBlockVirt->RLEN = (Adapter->LogBufferCount << 4) & 0xf0; Adapter->InitializationBlockVirt->RLEN = (Adapter->LogBufferCount << 4) & 0xf0;
/* set up transmit ring */ /* set up transmit ring */
DPRINT("Transmit ring physical address: 0x%x\n", Adapter->TransmitDescriptorRingPhys); DPRINT("Transmit ring physical address: 0x%x\n", Adapter->TransmitDescriptorRingPhys);
Adapter->InitializationBlockVirt->TDRA = (ULONG)Adapter->TransmitDescriptorRingPhys; Adapter->InitializationBlockVirt->TDRA = Adapter->TransmitDescriptorRingPhys.QuadPart;
Adapter->InitializationBlockVirt->TLEN = (Adapter->LogBufferCount << 4) & 0xf0; Adapter->InitializationBlockVirt->TLEN = (Adapter->LogBufferCount << 4) & 0xf0;
} }
@ -730,9 +728,9 @@ MiInitChip(
/* set up csr1 and csr2 with init block */ /* set up csr1 and csr2 with init block */
NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR1); NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR1);
NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)((ULONG)Adapter->InitializationBlockPhys & 0xffff)); NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)(Adapter->InitializationBlockPhys.LowPart & 0xffff));
NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR2); NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR2);
NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)((ULONG)Adapter->InitializationBlockPhys >> 16) & 0xffff); NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)(Adapter->InitializationBlockPhys.LowPart >> 16) & 0xffff);
DPRINT("programmed with init block\n"); DPRINT("programmed with init block\n");
@ -1223,7 +1221,7 @@ MiniportSend(
Adapter->CurrentTransmitEndIndex %= Adapter->BufferCount; Adapter->CurrentTransmitEndIndex %= Adapter->BufferCount;
Desc->FLAGS = TD1_OWN | TD1_STP | TD1_ENP; Desc->FLAGS = TD1_OWN | TD1_STP | TD1_ENP;
Desc->BCNT = 0xf000 | -TotalPacketLength; Desc->BCNT = 0xf000 | -(INT)TotalPacketLength;
NdisMSynchronizeWithInterrupt(&Adapter->InterruptObject, MiSyncStartTransmit, Adapter); NdisMSynchronizeWithInterrupt(&Adapter->InterruptObject, MiSyncStartTransmit, Adapter);

View file

@ -79,27 +79,27 @@ typedef struct _ADAPTER
/* initialization block */ /* initialization block */
ULONG InitializationBlockLength; ULONG InitializationBlockLength;
PINITIALIZATION_BLOCK InitializationBlockVirt; PINITIALIZATION_BLOCK InitializationBlockVirt;
PINITIALIZATION_BLOCK InitializationBlockPhys; PHYSICAL_ADDRESS InitializationBlockPhys;
/* transmit descriptor ring */ /* transmit descriptor ring */
ULONG TransmitDescriptorRingLength; ULONG TransmitDescriptorRingLength;
PTRANSMIT_DESCRIPTOR TransmitDescriptorRingVirt; PTRANSMIT_DESCRIPTOR TransmitDescriptorRingVirt;
PTRANSMIT_DESCRIPTOR TransmitDescriptorRingPhys; PHYSICAL_ADDRESS TransmitDescriptorRingPhys;
/* transmit buffers */ /* transmit buffers */
ULONG TransmitBufferLength; ULONG TransmitBufferLength;
PCHAR TransmitBufferPtrVirt; PCHAR TransmitBufferPtrVirt;
PCHAR TransmitBufferPtrPhys; PHYSICAL_ADDRESS TransmitBufferPtrPhys;
/* receive descriptor ring */ /* receive descriptor ring */
ULONG ReceiveDescriptorRingLength; ULONG ReceiveDescriptorRingLength;
PRECEIVE_DESCRIPTOR ReceiveDescriptorRingVirt; PRECEIVE_DESCRIPTOR ReceiveDescriptorRingVirt;
PRECEIVE_DESCRIPTOR ReceiveDescriptorRingPhys; PHYSICAL_ADDRESS ReceiveDescriptorRingPhys;
/* receive buffers */ /* receive buffers */
ULONG ReceiveBufferLength; ULONG ReceiveBufferLength;
PCHAR ReceiveBufferPtrVirt; PCHAR ReceiveBufferPtrVirt;
PCHAR ReceiveBufferPtrPhys; PHYSICAL_ADDRESS ReceiveBufferPtrPhys;
/* buffer count */ /* buffer count */
ULONG BufferCount; ULONG BufferCount;

View file

@ -418,7 +418,7 @@ int MainFrameBase::Command(int id, int code)
HINSTANCE hinst = ShellExecute(_hwnd, NULL/*operation*/, dlg.cmd/*file*/, NULL/*parameters*/, NULL/*dir*/, dlg.cmdshow); HINSTANCE hinst = ShellExecute(_hwnd, NULL/*operation*/, dlg.cmd/*file*/, NULL/*parameters*/, NULL/*dir*/, dlg.cmdshow);
if ((int)hinst <= 32) if ((INT_PTR)hinst <= 32)
display_error(_hwnd, GetLastError()); display_error(_hwnd, GetLastError());
} }
break;} break;}

View file

@ -192,7 +192,7 @@ BOOL launch_file(HWND hwnd, LPCTSTR cmd, UINT nCmdShow, LPCTSTR parameters)
HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow); HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
if ((int)hinst <= 32) { if ((INT_PTR)hinst <= 32) {
display_error(hwnd, GetLastError()); display_error(hwnd, GetLastError());
return FALSE; return FALSE;
} }
@ -205,7 +205,7 @@ BOOL launch_fileA(HWND hwnd, LPSTR cmd, UINT nCmdShow, LPCSTR parameters)
{ {
HINSTANCE hinst = ShellExecuteA(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow); HINSTANCE hinst = ShellExecuteA(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
if ((int)hinst <= 32) { if ((INT_PTR)hinst <= 32) {
display_error(hwnd, GetLastError()); display_error(hwnd, GetLastError());
return FALSE; return FALSE;
} }
@ -387,7 +387,7 @@ BOOL launch_cpanel(HWND hwnd, LPCTSTR applet)
_tcscpy(parameters, TEXT("shell32.dll,Control_RunDLL ")); _tcscpy(parameters, TEXT("shell32.dll,Control_RunDLL "));
_tcscat(parameters, applet); _tcscat(parameters, applet);
return ((int)ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), parameters, NULL, SW_SHOWDEFAULT) > 32); return ((INT_PTR)ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), parameters, NULL, SW_SHOWDEFAULT) > 32);
} }

View file

@ -838,7 +838,7 @@ protected:
{ {
if (!_cmd.empty()) { if (!_cmd.empty()) {
HINSTANCE hinst = ShellExecute(GetParent(_hwnd), _T("open"), _cmd, 0, 0, SW_SHOWNORMAL); HINSTANCE hinst = ShellExecute(GetParent(_hwnd), _T("open"), _cmd, 0, 0, SW_SHOWNORMAL);
return (int)hinst > HINSTANCE_ERROR; return (INT_PTR)hinst > HINSTANCE_ERROR;
} }
return true; return true;
@ -861,7 +861,7 @@ struct ToolTip : public WindowHandle
void add(HWND hparent, HWND htool, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0) void add(HWND hparent, HWND htool, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), TTF_SUBCLASS|TTF_IDISHWND|TTF_TRANSPARENT, hparent, (UINT)htool, sizeof(TOOLINFO), TTF_SUBCLASS|TTF_IDISHWND|TTF_TRANSPARENT, hparent, (UINT_PTR)htool,
{0,0,0,0}, 0, (LPTSTR)txt, lparam {0,0,0,0}, 0, (LPTSTR)txt, lparam
}; };
@ -893,7 +893,7 @@ struct ToolTip : public WindowHandle
void remove(HWND hparent, HWND htool) void remove(HWND hparent, HWND htool)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), TTF_IDISHWND, hparent, (UINT)htool, sizeof(TOOLINFO), TTF_IDISHWND, hparent, (UINT_PTR)htool,
{0,0,0,0}, 0, 0, 0 {0,0,0,0}, 0, 0, 0
}; };

View file

@ -57,8 +57,9 @@ KeContextToTrapFrame(IN PCONTEXT Context,
/* Handle floating point registers */ /* Handle floating point registers */
if ((ContextFlags & CONTEXT_FLOATING_POINT) && if ((ContextFlags & CONTEXT_FLOATING_POINT) &&
(Context->SegCs & MODE_MASK)) ((Context->SegCs & MODE_MASK) != KernelMode))
{ {
TrapFrame->MxCsr = Context->MxCsr;
TrapFrame->Xmm0 = Context->Xmm0; TrapFrame->Xmm0 = Context->Xmm0;
TrapFrame->Xmm1 = Context->Xmm1; TrapFrame->Xmm1 = Context->Xmm1;
TrapFrame->Xmm2 = Context->Xmm2; TrapFrame->Xmm2 = Context->Xmm2;
@ -84,7 +85,7 @@ KeContextToTrapFrame(IN PCONTEXT Context,
if (ContextFlags & CONTEXT_CONTROL) if (ContextFlags & CONTEXT_CONTROL)
{ {
/* Check if this was a Kernel Trap */ /* Check if this was a Kernel Trap */
if (Context->SegCs == KGDT64_R0_CODE) if ((Context->SegCs & MODE_MASK) == KernelMode)
{ {
/* Set valid selectors */ /* Set valid selectors */
TrapFrame->SegCs = KGDT64_R0_CODE; TrapFrame->SegCs = KGDT64_R0_CODE;
@ -107,7 +108,7 @@ KeContextToTrapFrame(IN PCONTEXT Context,
if (ContextFlags & CONTEXT_SEGMENTS) if (ContextFlags & CONTEXT_SEGMENTS)
{ {
/* Check if this was a Kernel Trap */ /* Check if this was a Kernel Trap */
if (Context->SegCs == KGDT64_R0_CODE) if ((Context->SegCs & MODE_MASK) == KernelMode)
{ {
/* Set valid selectors */ /* Set valid selectors */
TrapFrame->SegDs = KGDT64_R3_DATA | RPL_MASK; TrapFrame->SegDs = KGDT64_R3_DATA | RPL_MASK;
@ -147,14 +148,20 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame, IN PKEXCEPTION_FRAME ExceptionFrame,
IN OUT PCONTEXT Context) IN OUT PCONTEXT Context)
{ {
ULONG ContextFlags;
KIRQL OldIrql; KIRQL OldIrql;
/* Do this at APC_LEVEL */ /* Do this at APC_LEVEL */
OldIrql = KeGetCurrentIrql(); OldIrql = KeGetCurrentIrql();
if (OldIrql < APC_LEVEL) KeRaiseIrql(APC_LEVEL, &OldIrql); if (OldIrql < APC_LEVEL) KeRaiseIrql(APC_LEVEL, &OldIrql);
/* Make sure we have an amd64 context, then remove the flag */
ContextFlags = Context->ContextFlags;
ASSERT(ContextFlags & CONTEXT_AMD64);
ContextFlags &= ~CONTEXT_AMD64;
/* Handle integer registers */ /* Handle integer registers */
if ((Context->ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER) if (ContextFlags & CONTEXT_INTEGER)
{ {
Context->Rax = TrapFrame->Rax; Context->Rax = TrapFrame->Rax;
Context->Rbx = TrapFrame->Rbx; Context->Rbx = TrapFrame->Rbx;
@ -178,8 +185,8 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
} }
/* Handle floating point registers */ /* Handle floating point registers */
if (((Context->ContextFlags & CONTEXT_FLOATING_POINT) == if ((ContextFlags & CONTEXT_FLOATING_POINT) &&
CONTEXT_FLOATING_POINT) && (TrapFrame->SegCs & MODE_MASK)) ((TrapFrame->SegCs & MODE_MASK) != KernelMode))
{ {
Context->Xmm0 = TrapFrame->Xmm0; Context->Xmm0 = TrapFrame->Xmm0;
Context->Xmm1 = TrapFrame->Xmm1; Context->Xmm1 = TrapFrame->Xmm1;
@ -203,10 +210,10 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
} }
/* Handle control registers */ /* Handle control registers */
if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL) if (ContextFlags & CONTEXT_CONTROL)
{ {
/* Check if this was a Kernel Trap */ /* Check if this was a Kernel Trap */
if (TrapFrame->SegCs == KGDT64_R0_CODE) if ((TrapFrame->SegCs & MODE_MASK) == KernelMode)
{ {
/* Set valid selectors */ /* Set valid selectors */
Context->SegCs = KGDT64_R0_CODE; Context->SegCs = KGDT64_R0_CODE;
@ -226,10 +233,10 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
} }
/* Handle segment selectors */ /* Handle segment selectors */
if ((Context->ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS) if (ContextFlags & CONTEXT_SEGMENTS)
{ {
/* Check if this was a Kernel Trap */ /* Check if this was a Kernel Trap */
if (TrapFrame->SegCs == KGDT64_R0_CODE) if ((TrapFrame->SegCs & MODE_MASK) == KernelMode)
{ {
/* Set valid selectors */ /* Set valid selectors */
Context->SegDs = KGDT64_R3_DATA | RPL_MASK; Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
@ -248,8 +255,7 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
} }
/* Handle debug registers */ /* Handle debug registers */
if ((Context->ContextFlags & CONTEXT_DEBUG_REGISTERS) == if (ContextFlags & CONTEXT_DEBUG_REGISTERS)
CONTEXT_DEBUG_REGISTERS)
{ {
/* Copy the debug registers */ /* Copy the debug registers */
Context->Dr0 = TrapFrame->Dr0; Context->Dr0 = TrapFrame->Dr0;

View file

@ -54,16 +54,9 @@ VOID
NTAPI NTAPI
KiSetProcessorType(VOID) KiSetProcessorType(VOID)
{ {
ULONG64 EFlags;
CPU_INFO CpuInfo; CPU_INFO CpuInfo;
ULONG Stepping, Type; ULONG Stepping, Type;
/* Start by assuming no CPUID data */
KeGetCurrentPrcb()->CpuID = 0;
/* Save EFlags */
EFlags = __readeflags();
/* Do CPUID 1 now */ /* Do CPUID 1 now */
KiCpuId(&CpuInfo, 1); KiCpuId(&CpuInfo, 1);
@ -85,9 +78,6 @@ KiSetProcessorType(VOID)
KeGetCurrentPrcb()->CpuID = TRUE; KeGetCurrentPrcb()->CpuID = TRUE;
KeGetCurrentPrcb()->CpuType = (UCHAR)Type; KeGetCurrentPrcb()->CpuType = (UCHAR)Type;
KeGetCurrentPrcb()->CpuStep = (USHORT)Stepping; KeGetCurrentPrcb()->CpuStep = (USHORT)Stepping;
/* Restore EFLAGS */
__writeeflags(EFlags);
} }
ULONG ULONG

View file

@ -716,7 +716,7 @@ KiDisplayBlueScreen(IN ULONG MessageId,
/* Show the technical Data */ /* Show the technical Data */
sprintf(AnsiName, sprintf(AnsiName,
"\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n", "\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
KiBugCheckData[0], (ULONG)KiBugCheckData[0],
(PVOID)KiBugCheckData[1], (PVOID)KiBugCheckData[1],
(PVOID)KiBugCheckData[2], (PVOID)KiBugCheckData[2],
(PVOID)KiBugCheckData[3], (PVOID)KiBugCheckData[3],

View file

@ -3567,7 +3567,7 @@ NtMapViewOfSection(IN HANDLE SectionHandle,
ACCESS_MASK DesiredAccess; ACCESS_MASK DesiredAccess;
ULONG ProtectionMask; ULONG ProtectionMask;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
#ifdef _M_IX86 #if defined(_M_IX86) || defined(_M_AMD64)
static const ULONG ValidAllocationType = (MEM_TOP_DOWN | MEM_LARGE_PAGES | static const ULONG ValidAllocationType = (MEM_TOP_DOWN | MEM_LARGE_PAGES |
MEM_DOS_LIM | SEC_NO_CHANGE | MEM_RESERVE); MEM_DOS_LIM | SEC_NO_CHANGE | MEM_RESERVE);
#else #else

View file

@ -312,8 +312,10 @@ MmIsDisabledPage(PEPROCESS Process, PVOID Address)
{ {
MMPTE Pte; MMPTE Pte;
Pte.u.Long = MiGetPteValueForProcess(Process, Address); Pte.u.Long = MiGetPteValueForProcess(Process, Address);
__debugbreak(); // FIXME
return !Pte.u.Hard.Valid && !(Pte.u.Long & 0x800) && Pte.u.Hard.PageFrameNumber; return (Pte.u.Hard.Valid == 0) &&
(Pte.u.Trans.Transition == 0) &&
(Pte.u.Hard.PageFrameNumber != 0);
} }
BOOLEAN BOOLEAN

View file

@ -1975,7 +1975,7 @@ typedef struct _KPROCESS
LIST_ENTRY ProfileListHead; LIST_ENTRY ProfileListHead;
#if (NTDDI_VERSION >= NTDDI_LONGHORN) #if (NTDDI_VERSION >= NTDDI_LONGHORN)
ULONG_PTR DirectoryTableBase; ULONG_PTR DirectoryTableBase;
ULONG Unused0; ULONG_PTR Unused0;
#else #else
ULONG_PTR DirectoryTableBase[2]; ULONG_PTR DirectoryTableBase[2];
#endif #endif

View file

@ -191,7 +191,7 @@ $if (_NTDDK_)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L) #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x40L)
#define CONTEXT_EXCEPTION_ACTIVE 0x8000000 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
#define CONTEXT_SERVICE_ACTIVE 0x10000000 #define CONTEXT_SERVICE_ACTIVE 0x10000000