diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 547eb5100d3e59363d4e3b90d63198e29cd3dfba..aa23017b3637f63c88cbcd8d051d704e00e26b9d 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -2066,16 +2066,14 @@ void WINAPI LdrInitializeThunk( ULONG unknown1, ULONG unknown2, ULONG unknown3,
     SERVER_START_REQ( init_process_done )
     {
         req->module      = peb->ImageBaseAddress;
-        req->module_size = wm->ldr.SizeOfImage;
         req->entry       = (char *)peb->ImageBaseAddress + nt->OptionalHeader.AddressOfEntryPoint;
-        /* API requires a double indirection */
-        req->name        = &wm->ldr.FullDllName.Buffer;
         req->gui         = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_CUI);
-        wine_server_add_data( req, wm->ldr.FullDllName.Buffer, wm->ldr.FullDllName.Length );
-        wine_server_call( req );
+        status = wine_server_call( req );
     }
     SERVER_END_REQ;
 
+    if (status != STATUS_SUCCESS) goto error;
+
     RtlEnterCriticalSection( &loader_section );
 
     load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index 9ba7cce3239a97047a93d90f94e5287bc6ff71da..1de45312787942fb62aa39d4a37845af102f5b5f 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -261,11 +261,8 @@ struct init_process_done_request
 {
     struct request_header __header;
     void*        module;
-    size_t       module_size;
     void*        entry;
-    void*        name;
     int          gui;
-    /* VARARG(filename,unicode_str); */
 };
 struct init_process_done_reply
 {
@@ -4364,6 +4361,6 @@ union generic_reply
     struct query_symlink_reply query_symlink_reply;
 };
 
-#define SERVER_PROTOCOL_VERSION 227
+#define SERVER_PROTOCOL_VERSION 228
 
 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/server/process.c b/server/process.c
index 8c7133492938d6aad2523a3c2d40b755c162f3b2..cc88c5fdc189c34ea02dfd192d4baee49cc1a599 100644
--- a/server/process.c
+++ b/server/process.c
@@ -968,21 +968,10 @@ DECL_HANDLER(init_process_done)
         fatal_protocol_error( current, "init_process_done: called twice\n" );
         return;
     }
-    if (!req->module)
-    {
-        fatal_protocol_error( current, "init_process_done: module base address cannot be 0\n" );
-        return;
-    }
-
-    /* check if main exe has been registered as a dll already */
     if (!(dll = find_process_dll( process, req->module )))
     {
-        if (!(dll = process_load_dll( process, NULL, req->module,
-                                      get_req_data(), get_req_data_size() ))) return;
-        dll->size       = req->module_size;
-        dll->dbg_offset = 0;
-        dll->dbg_size   = 0;
-        dll->name       = req->name;
+        set_error( STATUS_DLL_NOT_FOUND );
+        return;
     }
 
     /* main exe is the first in the dll list */
diff --git a/server/protocol.def b/server/protocol.def
index 6d7f52726f4c31c82e8929a024555dfc130f8994..b489b260610e7c463b29d3879ef410b77e57ef15 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -255,11 +255,8 @@ struct security_descriptor
 /* Signal the end of the process initialization */
 @REQ(init_process_done)
     void*        module;       /* main module base address */
-    size_t       module_size;  /* main module size */
     void*        entry;        /* process entry point */
-    void*        name;         /* ptr to ptr to name (in process addr space) */
     int          gui;          /* is it a GUI process? */
-    VARARG(filename,unicode_str); /* file name of main exe */
 @END
 
 
diff --git a/server/trace.c b/server/trace.c
index d1c702ec20cf80ebfbd13fcc81b762f3570f46aa..87390f1e154c8398dfad31d5c90c7e8159a83967 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -638,12 +638,8 @@ static void dump_get_startup_info_reply( const struct get_startup_info_reply *re
 static void dump_init_process_done_request( const struct init_process_done_request *req )
 {
     fprintf( stderr, " module=%p,", req->module );
-    fprintf( stderr, " module_size=%lu,", (unsigned long)req->module_size );
     fprintf( stderr, " entry=%p,", req->entry );
-    fprintf( stderr, " name=%p,", req->name );
-    fprintf( stderr, " gui=%d,", req->gui );
-    fprintf( stderr, " filename=" );
-    dump_varargs_unicode_str( cur_size );
+    fprintf( stderr, " gui=%d", req->gui );
 }
 
 static void dump_init_thread_request( const struct init_thread_request *req )