diff --git a/windows/winproc.c b/windows/winproc.c
index 88cb6f0..6d85498 100644
--- a/windows/winproc.c
+++ b/windows/winproc.c
@@ -260,32 +260,30 @@
     BYTE *ptr;
     WINDOWPROC *proc;
 
+    /* ptr cannot be < 64K */
+    if (!HIWORD(handle)) return NULL;
+
     /* Check for a linear pointer */
 
-    if (handle && HeapValidate( WinProcHeap, 0, (LPVOID)handle ))
-    {
-        ptr = (BYTE *)handle;
-        /* First check if it is the jmp address */
-        if (*ptr == 0xe9 /* jmp */) ptr -= (int)&((WINDOWPROC *)0)->jmp -
-                                           (int)&((WINDOWPROC *)0)->thunk;
-        /* Now it must be the thunk address */
-        if (*ptr == 0x58 /* popl eax */) ptr -= (int)&((WINDOWPROC *)0)->thunk;
-        /* Now we have a pointer to the WINDOWPROC struct */
-        if (((WINDOWPROC *)ptr)->magic == WINPROC_MAGIC)
-            return (WINDOWPROC *)ptr;
-    }
+    ptr = (BYTE *)handle;
+    /* First check if it is the jmp address */
+    proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->jmp);
+    if (HeapValidate( WinProcHeap, 0, proc ) && (proc->magic == WINPROC_MAGIC))
+        return proc;
+    /* Now it must be the thunk address */
+    proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->thunk);
+    if (HeapValidate( WinProcHeap, 0, proc ) && (proc->magic == WINPROC_MAGIC))
+        return proc;
 
     /* Check for a segmented pointer */
 
-    if (!IsBadReadPtr16((SEGPTR)handle,sizeof(WINDOWPROC)-sizeof(proc->thunk)))
+    if (!IsBadReadPtr16( (SEGPTR)handle, sizeof(proc->thunk) ))
     {
         ptr = (BYTE *)PTR_SEG_TO_LIN(handle);
-        if (!HeapValidate( WinProcHeap, 0, ptr )) return NULL;
         /* It must be the thunk address */
-        if (*ptr == 0x58 /* popl eax */) ptr -= (int)&((WINDOWPROC *)0)->thunk;
-        /* Now we have a pointer to the WINDOWPROC struct */
-        if (((WINDOWPROC *)ptr)->magic == WINPROC_MAGIC)
-            return (WINDOWPROC *)ptr;
+        proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->thunk);
+        if (HeapValidate( WinProcHeap, 0, proc ) && (proc->magic == WINPROC_MAGIC))
+            return proc;
     }
 
     return NULL;
