Added handle_t type to server interface so that we can make handles
pointers later on.
Always use 0 to signal invalid handle in server requests.

diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c
index fddc48b..fad92a3 100644
--- a/dlls/kernel/sync.c
+++ b/dlls/kernel/sync.c
@@ -44,7 +44,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -84,7 +83,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -121,7 +119,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -149,7 +146,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -271,7 +267,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -300,7 +295,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -333,7 +327,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -361,7 +354,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -423,7 +415,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -464,7 +455,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -492,7 +482,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
@@ -519,7 +508,6 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
-    if (ret == -1) ret = 0; /* must return 0 on failure, not -1 */
     return ret;
 }
 
diff --git a/dlls/kernel/toolhelp.c b/dlls/kernel/toolhelp.c
index fccb241..c2486dc 100644
--- a/dlls/kernel/toolhelp.c
+++ b/dlls/kernel/toolhelp.c
@@ -212,6 +212,7 @@
         ret = req->handle;
     }
     SERVER_END_REQ;
+    if (!ret) ret = INVALID_HANDLE_VALUE;
     return ret;
 }
 
diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c
index 12f884f..5ea5812 100644
--- a/dlls/ntdll/reg.c
+++ b/dlls/ntdll/reg.c
@@ -107,7 +107,6 @@
 
     if (len > MAX_NAME_LENGTH) return STATUS_BUFFER_OVERFLOW;
     if (!retkey) return STATUS_INVALID_PARAMETER;
-    *retkey = 0;
 
     SERVER_START_REQ
     {
@@ -115,7 +114,8 @@
         req->parent = attr->RootDirectory;
         req->access = access;
         memcpy( server_data_ptr(req), attr->ObjectName->Buffer, len );
-        if (!(ret = server_call_noerr( REQ_OPEN_KEY ))) *retkey = req->hkey;
+        ret = server_call_noerr( REQ_OPEN_KEY );
+        *retkey = req->hkey;
     }
     SERVER_END_REQ;
     return ret;
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index 928a244..82de172 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -36,8 +36,6 @@
     if ((MaximumCount <= 0) || (InitialCount < 0) || (InitialCount > MaximumCount))
         return STATUS_INVALID_PARAMETER;
 
-    *SemaphoreHandle = 0;
-
     SERVER_START_REQ
     {
         struct create_semaphore_request *req = server_alloc_req( sizeof(*req), len );
@@ -45,8 +43,8 @@
         req->max     = MaximumCount;
         req->inherit = attr && (attr->Attributes & OBJ_INHERIT);
         if (len) memcpy( server_data_ptr(req), attr->ObjectName->Buffer, len );
-        if (!(ret = server_call_noerr( REQ_CREATE_SEMAPHORE )))
-            *SemaphoreHandle = req->handle;
+        ret = server_call_noerr( REQ_CREATE_SEMAPHORE );
+        *SemaphoreHandle = req->handle;
     }
     SERVER_END_REQ;
     return ret;
@@ -62,16 +60,14 @@
     DWORD len = attr && attr->ObjectName ? attr->ObjectName->Length : 0;
     NTSTATUS ret;
 
-    *SemaphoreHandle = 0;
-
     SERVER_START_REQ
     {
         struct open_semaphore_request *req = server_alloc_req( sizeof(*req), len );
         req->access  = access;
         req->inherit = attr && (attr->Attributes & OBJ_INHERIT);
         if (len) memcpy( server_data_ptr(req), attr->ObjectName->Buffer, len );
-        if (!(ret = server_call_noerr( REQ_OPEN_SEMAPHORE )))
-            *SemaphoreHandle = req->handle;
+        ret = server_call_noerr( REQ_OPEN_SEMAPHORE );
+        *SemaphoreHandle = req->handle;
     }
     SERVER_END_REQ;
     return ret;
@@ -129,8 +125,6 @@
     DWORD len = attr && attr->ObjectName ? attr->ObjectName->Length : 0;
     NTSTATUS ret;
 
-    *EventHandle = 0;
-
     SERVER_START_REQ
     {
         struct create_event_request *req = server_alloc_req( sizeof(*req), len );
@@ -138,7 +132,8 @@
         req->initial_state = InitialState;
         req->inherit = attr && (attr->Attributes & OBJ_INHERIT);
         if (len) memcpy( server_data_ptr(req), attr->ObjectName->Buffer, len );
-        if (!(ret = server_call_noerr( REQ_CREATE_EVENT ))) *EventHandle = req->handle;
+        ret = server_call_noerr( REQ_CREATE_EVENT );
+        *EventHandle = req->handle;
     }
     SERVER_END_REQ;
     return ret;
@@ -155,8 +150,6 @@
     DWORD len = attr && attr->ObjectName ? attr->ObjectName->Length : 0;
     NTSTATUS ret;
 
-    *EventHandle = 0;
-
     SERVER_START_REQ
     {
         struct open_event_request *req = server_alloc_req( sizeof(*req), len );
@@ -164,7 +157,8 @@
         req->access  = DesiredAccess;
         req->inherit = attr && (attr->Attributes & OBJ_INHERIT);
         if (len) memcpy( server_data_ptr(req), attr->ObjectName->Buffer, len );
-        if (!(ret = server_call_noerr( REQ_OPEN_EVENT ))) *EventHandle = req->handle;
+        ret = server_call_noerr( REQ_OPEN_EVENT );
+        *EventHandle = req->handle;
     }
     SERVER_END_REQ;
     return ret;
diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index d0a09e8..15e765c 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -818,10 +818,10 @@
             req->access  = GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE;
             req->inherit = TRUE;
             sock_server_call( REQ_ACCEPT_SOCKET );
-            as = req->handle;
+            as = (SOCKET)req->handle;
         }
         SERVER_END_REQ;
-	if( ((int)as) >= 0 )
+	if (as)
 	{
 	    unsigned omask = _get_sock_mask( s );
 	    int fd = _get_sock_fd( as );
@@ -2223,10 +2223,10 @@
         req->access   = GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE;
         req->inherit  = TRUE;
         sock_server_call( REQ_CREATE_SOCKET );
-        ret = req->handle;
+        ret = (SOCKET)req->handle;
     }
     SERVER_END_REQ;
-    if ( ((int) ret) >= 0)
+    if (ret)
     {
         TRACE("\tcreated %04x\n", ret );
         return ret;