[REACTOS] Fix misc 64 bit issues (#783)
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 5 Jan 2019 09:50:11 +0000 (10:50 +0100)
committerGitHub <noreply@github.com>
Sat, 5 Jan 2019 09:50:11 +0000 (10:50 +0100)
* [WIN32K] Fix handle calculation in DbgGdiHTIntegrityCheck
* [NOTEPAD] Fix MSVC warnings
* [PSDK] Simplify *PROC definitions in windef.h
* [VIDEOPRT] Don't try to use NtVdmControl on x64
* [FREELDR] Fix some macros
* [CRT] Make qsort 64 bit compatible
* [NTOS] Use #ifndef _WIN64 instead of #ifdef _M_IX86 around C_ASSERTs
* [FAST486] Fix 64 bit warnings and change DWORD to ULONG, so it can be used in kernel mode
* [APPHELP_APITEST] Fix 64 bit issue

16 files changed:
base/applications/atactl/atactl.cpp
base/applications/notepad/dialog.c
base/applications/notepad/main.h
base/applications/notepad/text.c
boot/freeldr/freeldr/include/arch/amd64/amd64.h
dll/shellext/stobject/volume.cpp
dll/win32/kernel32/client/file/rw.c
dll/win32/shell32/dialogs/view.cpp
dll/win32/ws2_32/src/rnr.c
ntoskrnl/include/internal/ntoskrnl.h
sdk/include/psdk/windef.h
sdk/include/reactos/libs/fast486/fast486.h
sdk/lib/crt/stdlib/qsort.c
sdk/lib/fast486/fast486.c
win32ss/drivers/videoprt/int10.c
win32ss/gdi/ntgdi/gdidbg.c

index a315cac..3eac17a 100644 (file)
@@ -445,7 +445,7 @@ ata_str_to_mode(
     )
 {
     int mode;
-    int len;
+    size_t len;
 
     if(!_stricmp(str, "SATA600"))
         return ATA_SA600;
@@ -1688,7 +1688,8 @@ main (
     )
 {
     //ULONG Flags = 0;
-    int i, j;
+    int i;
+    uintptr_t j;
     char a;
     int bus_id = -1;
     int dev_id = -1;
index a07a71d..d3b5dee 100644 (file)
@@ -1095,7 +1095,7 @@ DIALOG_GoTo_DialogProc(HWND hwndDialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
     switch(uMsg) {
     case WM_INITDIALOG:
         hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
-        _sntprintf(szText, ARRAY_SIZE(szText), _T("%ld"), lParam);
+        _sntprintf(szText, ARRAY_SIZE(szText), _T("%Id"), lParam);
         SetWindowText(hTextBox, szText);
         break;
     case WM_COMMAND:
index a84162f..65a8782 100644 (file)
@@ -42,10 +42,6 @@ typedef enum
     ENCODING_UTF16BE =  2,
     ENCODING_UTF8    =  3
 } ENCODING;
-// #define ENCODING_ANSI       0
-#define ENCODING_UNICODE    1
-#define ENCODING_UNICODE_BE 2
-// #define ENCODING_UTF8       3
 
 // #define MIN_ENCODING   0
 // #define MAX_ENCODING   3
index 2c6ee8c..6e26a7a 100644 (file)
@@ -85,12 +85,12 @@ ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile,
     /* Look for Byte Order Marks */
     if ((dwSize >= 2) && (pBytes[0] == 0xFF) && (pBytes[1] == 0xFE))
     {
-        encFile = ENCODING_UNICODE;
+        encFile = ENCODING_UTF16LE;
         dwPos += 2;
     }
     else if ((dwSize >= 2) && (pBytes[0] == 0xFE) && (pBytes[1] == 0xFF))
     {
-        encFile = ENCODING_UNICODE_BE;
+        encFile = ENCODING_UTF16BE;
         dwPos += 2;
     }
     else if ((dwSize >= 3) && (pBytes[0] == 0xEF) && (pBytes[1] == 0xBB) && (pBytes[2] == 0xBF))
@@ -101,7 +101,7 @@ ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile,
 
     switch(encFile)
     {
-    case ENCODING_UNICODE_BE:
+    case ENCODING_UTF16BE:
         for (i = dwPos; i < dwSize-1; i += 2)
         {
             b = pBytes[i+0];
@@ -110,7 +110,7 @@ ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile,
         }
         /* fall through */
 
-    case ENCODING_UNICODE:
+    case ENCODING_UTF16LE:
         pszText = (LPWSTR) &pBytes[dwPos];
         dwCharCount = (dwSize - dwPos) / sizeof(WCHAR);
         break;
@@ -239,13 +239,13 @@ static BOOL WriteEncodedText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENC
     {
         switch(encFile)
         {
-            case ENCODING_UNICODE:
+            case ENCODING_UTF16LE:
                 pBytes = (LPBYTE) &pszText[dwPos];
                 dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
                 dwPos = dwTextLen;
                 break;
 
-            case ENCODING_UNICODE_BE:
+            case ENCODING_UTF16BE:
                 dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
                 if (dwByteCount > sizeof(buffer))
                     dwByteCount = sizeof(buffer);
index 4820157..8a5ccdd 100644 (file)
 #define PtrToPfn(p) \
     ((((ULONGLONG)p) >> PAGE_SHIFT) & 0xfffffffULL)
 
-#define VAtoPXI(va) ((((ULONG64)va) >> PXI_SHIFT) & 0x1FF)
-#define VAtoPPI(va) ((((ULONG64)va) >> PPI_SHIFT) & 0x1FF)
-#define VAtoPDI(va) ((((ULONG64)va) >> PDI_SHIFT) & 0x1FF)
-#define VAtoPTI(va) ((((ULONG64)va) >> PTI_SHIFT) & 0x1FF)
+#define VAtoPXI(va) ((((ULONG64)(va)) >> PXI_SHIFT) & 0x1FF)
+#define VAtoPPI(va) ((((ULONG64)(va)) >> PPI_SHIFT) & 0x1FF)
+#define VAtoPDI(va) ((((ULONG64)(va)) >> PDI_SHIFT) & 0x1FF)
+#define VAtoPTI(va) ((((ULONG64)(va)) >> PTI_SHIFT) & 0x1FF)
 
 #ifndef ASM
 
index 931cd2e..c30df9c 100644 (file)
@@ -32,7 +32,7 @@ static HRESULT __stdcall Volume_FindMixerControl(CSysTray * pSysTray)
 
     TRACE("Volume_FindDefaultMixerID\n");
 
-    result = waveOutMessage((HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveOutId, (DWORD_PTR)&param2);
+    result = waveOutMessage((HWAVEOUT)UlongToHandle(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveOutId, (DWORD_PTR)&param2);
     if (result)
         return E_FAIL;
 
@@ -46,7 +46,7 @@ static HRESULT __stdcall Volume_FindMixerControl(CSysTray * pSysTray)
     {
         TRACE("waveOut default device is %d\n", waveOutId);
 
-        result = mixerGetID((HMIXEROBJ)waveOutId, &mixerId, MIXER_OBJECTF_WAVEOUT);
+        result = mixerGetID((HMIXEROBJ)UlongToHandle(waveOutId), &mixerId, MIXER_OBJECTF_WAVEOUT);
         if (result)
             return E_FAIL;
 
@@ -77,7 +77,7 @@ static HRESULT __stdcall Volume_FindMixerControl(CSysTray * pSysTray)
     {
         mixerLine.cbStruct = sizeof(mixerLine);
         mixerLine.dwDestination = idx;
-        if (!mixerGetLineInfoW((HMIXEROBJ)g_mixerId, &mixerLine, 0))
+        if (!mixerGetLineInfoW((HMIXEROBJ)UlongToHandle(g_mixerId), &mixerLine, 0))
         {
             if (mixerLine.dwComponentType >= MIXERLINE_COMPONENTTYPE_DST_SPEAKERS &&
                 mixerLine.dwComponentType <= MIXERLINE_COMPONENTTYPE_DST_HEADPHONES)
@@ -100,7 +100,7 @@ static HRESULT __stdcall Volume_FindMixerControl(CSysTray * pSysTray)
     mixerLineControls.pamxctrl = &mixerControl;
     mixerLineControls.cbmxctrl = sizeof(mixerControl);
 
-    if (mixerGetLineControlsW((HMIXEROBJ)g_mixerId, &mixerLineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE))
+    if (mixerGetLineControlsW((HMIXEROBJ)UlongToHandle(g_mixerId), &mixerLineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE))
         return E_FAIL;
 
     TRACE("Found control id %d for mute: %d\n", mixerControl.dwControlID);
index da41eed..0c69057 100644 (file)
@@ -24,7 +24,7 @@ BOOL WINAPI
 WriteFile(IN HANDLE hFile,
           IN LPCVOID lpBuffer,
           IN DWORD nNumberOfBytesToWrite OPTIONAL,
-          OUT LPDWORD lpNumberOfBytesWritten OPTIONAL,
+          OUT LPDWORD lpNumberOfBytesWritten,
           IN LPOVERLAPPED lpOverlapped OPTIONAL)
 {
     NTSTATUS Status;
index 264ef5f..648915a 100644 (file)
@@ -342,10 +342,10 @@ ViewTree_LoadTree(HKEY hKey, LPCWSTR pszKeyName, DWORD dwParentID)
     else
     {
         // HKeyRoot
-        Value = DWORD(HKEY_CURRENT_USER);
-        Size = sizeof(Value);
-        RegQueryValueExW(hKey, L"HKeyRoot", NULL, NULL, LPBYTE(&Value), &Size);
-        pEntry->hkeyRoot = HKEY(Value);
+        HKEY HKeyRoot = HKEY_CURRENT_USER;
+        Size = sizeof(HKeyRoot);
+        RegQueryValueExW(hKey, L"HKeyRoot", NULL, NULL, LPBYTE(&HKeyRoot), &Size);
+        pEntry->hkeyRoot = HKeyRoot;
 
         // RegPath
         pEntry->szRegPath[0] = 0;
@@ -782,7 +782,7 @@ ViewDlg_RestoreDefaults(HWND hwndDlg)
             continue;
         }
         RegSetValueExW(hKey, pEntry->szValueName, 0, REG_DWORD,
-                       LPBYTE(pEntry->dwDefaultValue), sizeof(DWORD));
+                       LPBYTE(&pEntry->dwDefaultValue), sizeof(DWORD));
         RegCloseKey(hKey);
 
         // update check status
index 34e8619..43ebea2 100644 (file)
@@ -248,7 +248,7 @@ WSALookupServiceBeginA(IN LPWSAQUERYSETA lpqsRestrictions,
 {
     INT ErrorCode;
     LPWSAQUERYSETW UnicodeQuerySet = NULL;
-    DWORD UnicodeQuerySetSize = 0;
+    SIZE_T UnicodeQuerySetSize = 0;
 
     DPRINT("WSALookupServiceBeginA: %p\n", lpqsRestrictions);
 
@@ -523,12 +523,25 @@ WSALookupServiceNextA(IN HANDLE hLookup,
 
     if (ErrorCode == ERROR_SUCCESS)
     {
+        SIZE_T SetSize = *lpdwBufferLength;
+
         /* Now convert back to ANSI */
         ErrorCode = MapUnicodeQuerySetToAnsi(UnicodeQuerySet,
-                                             lpdwBufferLength,
+                                             &SetSize,
                                              lpqsResults);
         if (ErrorCode != ERROR_SUCCESS)
+        {
+            SetLastError(ErrorCode);
+        }
+        else if (SetSize > MAXDWORD)
+        {
+            ErrorCode = ERROR_ARITHMETIC_OVERFLOW;
             SetLastError(ErrorCode);
+        }
+        else
+        {
+            *lpdwBufferLength = SetSize;
+        }
     }
     else
     {
index c16a4b5..d0dfe4d 100644 (file)
@@ -136,7 +136,7 @@ typedef struct _INFORMATION_CLASS_INFO
 
 #endif
 
-#ifdef _M_IX86
+#ifndef _WIN64
 C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, SystemCall) == 0x300);
 
 C_ASSERT(FIELD_OFFSET(KTHREAD, InitialStack) == KTHREAD_INITIAL_STACK);
index a456269..bd0278a 100644 (file)
@@ -244,15 +244,10 @@ typedef HANDLE HGLOBAL;
 typedef HANDLE HLOCAL;
 typedef HANDLE GLOBALHANDLE;
 typedef HANDLE LOCALHANDLE;
-#ifdef _WIN64
+
 typedef INT_PTR (WINAPI *FARPROC)();
 typedef INT_PTR (WINAPI *NEARPROC)();
 typedef INT_PTR (WINAPI *PROC)();
-#else
-typedef int (WINAPI *FARPROC)();
-typedef int (WINAPI *NEARPROC)();
-typedef int (WINAPI *PROC)();
-#endif
 
 typedef void *HGDIOBJ;
 
index 5f7e3ce..db1cc7a 100644 (file)
  * (by reading outside of the prefetch buffer). The prefetch cache must
  * also not cross a page boundary.
  */
-C_ASSERT((FAST486_CACHE_SIZE >= sizeof(DWORD))
+C_ASSERT((FAST486_CACHE_SIZE >= sizeof(ULONG))
          && (FAST486_CACHE_SIZE <= FAST486_PAGE_SIZE));
 
 struct _FAST486_STATE;
index d6bca5f..ed3d95a 100644 (file)
@@ -30,6 +30,8 @@
 #include <stdlib.h>
 #include <search.h>
 
+#define long intptr_t
+
 #define min(a, b)      (a) < (b) ? (a) : (b)
 
 /*
@@ -50,7 +52,7 @@
        es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
 
 static __inline void
-swapfunc(char *a, char *b, int n, int swaptype)
+swapfunc(char *a, char *b, intptr_t n, int swaptype)
 {
        if(swaptype <= 1)
                swapcode(long, a, b, n)
@@ -91,7 +93,8 @@ __cdecl
 qsort(void *a, size_t n, size_t es, int (__cdecl *cmp)(const void*, const void*))
 {
        char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
-       int d, r, swaptype, swap_cnt;
+       int swaptype, swap_cnt;
+       intptr_t d, r;
 
 loop:  SWAPINIT(a, es);
        swap_cnt = 0;
index 8505bcc..4ee2103 100644 (file)
@@ -38,7 +38,7 @@ FASTCALL
 Fast486MemReadCallback(PFAST486_STATE State, ULONG Address, PVOID Buffer, ULONG Size)
 {
     UNREFERENCED_PARAMETER(State);
-    RtlMoveMemory(Buffer, (PVOID)Address, Size);
+    RtlMoveMemory(Buffer, UlongToPtr(Address), Size);
 }
 
 static VOID
@@ -46,7 +46,7 @@ FASTCALL
 Fast486MemWriteCallback(PFAST486_STATE State, ULONG Address, PVOID Buffer, ULONG Size)
 {
     UNREFERENCED_PARAMETER(State);
-    RtlMoveMemory((PVOID)Address, Buffer, Size);
+    RtlMoveMemory(UlongToPtr(Address), Buffer, Size);
 }
 
 static VOID
index 0893db7..b8eebfa 100644 (file)
@@ -40,7 +40,9 @@ IntInitializeVideoAddressSpace(VOID)
     PVOID BaseAddress;
     LARGE_INTEGER Offset;
     SIZE_T ViewSize;
+#ifdef _M_IX86
     CHAR IVTAndBda[1024+256];
+#endif // _M_IX86
 
     /* Free the 1MB pre-reserved region. In reality, ReactOS should simply support us mapping the view into the reserved area, but it doesn't. */
     BaseAddress = 0;
@@ -124,6 +126,7 @@ IntInitializeVideoAddressSpace(VOID)
         return 0;
     }
 
+#ifdef _M_IX86
     /* Get the real mode IVT and BDA from the kernel */
     Status = NtVdmControl(VdmInitialize, IVTAndBda);
     if (!NT_SUCCESS(Status))
@@ -131,6 +134,7 @@ IntInitializeVideoAddressSpace(VOID)
         DPRINT1("NtVdmControl failed (status %x)\n", Status);
         return Status;
     }
+#endif // _M_IX86
 
     /* Return success */
     return STATUS_SUCCESS;
index 27297fb..b75bb01 100644 (file)
@@ -365,7 +365,7 @@ DbgGdiHTIntegrityCheck(VOID)
 
                pEntry = &GdiHandleTable->Entries[i];
                Type = pEntry->Type;
-               Handle = (HGDIOBJ)(((ULONG_PTR)Type << GDI_ENTRY_UPPER_SHIFT) + i);
+               Handle = (HGDIOBJ)(ULONG_PTR)((Type << GDI_ENTRY_UPPER_SHIFT) + i);
 
                if (Type & GDI_ENTRY_BASETYPE_MASK)
                {