From d1c5f68dcaa9bc88aa5379116745e57c4c7f206f Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 2 Sep 2005 15:19:42 +0000 Subject: [PATCH] Added an entry point routine for native drivers. --- dlls/winecrt0/Makefile.in | 1 + dlls/winecrt0/drv_entry.c | 40 +++++++++++++++++++++++++++++++++++++++ tools/winebuild/import.c | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 dlls/winecrt0/drv_entry.c diff --git a/dlls/winecrt0/Makefile.in b/dlls/winecrt0/Makefile.in index ada0e66e6be..be56c979d9a 100644 --- a/dlls/winecrt0/Makefile.in +++ b/dlls/winecrt0/Makefile.in @@ -8,6 +8,7 @@ C_SRCS = \ delay_load.c \ dll_entry.c \ dll_main.c \ + drv_entry.c \ exe_entry.c \ exe_main.c \ exe_wentry.c \ diff --git a/dlls/winecrt0/drv_entry.c b/dlls/winecrt0/drv_entry.c new file mode 100644 index 00000000000..7beb8f55aa8 --- /dev/null +++ b/dlls/winecrt0/drv_entry.c @@ -0,0 +1,40 @@ +/* + * Default entry point for a native driver + * + * Copyright 2005 Alexandre Julliard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include "windef.h" +#include "winbase.h" +#include "winternl.h" +#include "wine/library.h" +#include "crt0_private.h" + +struct _DRIVER_OBJECT; +extern NTSTATUS DriverEntry( struct _DRIVER_OBJECT *obj, UNICODE_STRING *path ); + +NTSTATUS __wine_spec_drv_entry( struct _DRIVER_OBJECT *obj, UNICODE_STRING *path ) +{ + BOOL needs_init = (__wine_spec_init_state != CONSTRUCTORS_DONE); + NTSTATUS ret; + + if (needs_init) _init( __wine_main_argc, __wine_main_argv, __wine_main_environ ); + ret = DriverEntry( obj, path ); + if (needs_init) _fini(); + ExitProcess( ret ); +} diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c index 989e5bb0fff..16ea7fa252e 100644 --- a/tools/winebuild/import.c +++ b/tools/winebuild/import.c @@ -470,7 +470,7 @@ static int has_stubs( const DLLSPEC *spec ) static const char *get_default_entry_point( const DLLSPEC *spec ) { if (spec->characteristics & IMAGE_FILE_DLL) return "__wine_spec_dll_entry"; - if (spec->subsystem == IMAGE_SUBSYSTEM_NATIVE) return "DriverEntry"; + if (spec->subsystem == IMAGE_SUBSYSTEM_NATIVE) return "__wine_spec_drv_entry"; return "__wine_spec_exe_entry"; }