GlobalAlloc as GlobalAlloc16 should round size to 32.
Call SetLastError in GlobalLock.

diff --git a/memory/global.c b/memory/global.c
index 0b00ee2..57d1e7f 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -1049,6 +1049,7 @@
       if (!pintern) return NULL;
       if(size)
       {
+	 size = (size + 0x1f) & ~0x1f;
 	 if (!(palloc=HeapAlloc(heap, hpflags, size+sizeof(HGLOBAL)))) {
 	    HeapFree(heap, 0, pintern);
 	    return NULL;
@@ -1097,6 +1098,7 @@
    {
       WARN("invalid handle\n");
       palloc=(LPVOID) NULL;
+      SetLastError(ERROR_INVALID_HANDLE);
    }
    /* HeapUnlock(GetProcessHeap()); */;
    return palloc;