Added an entry point routine for native drivers.

oldstable
Alexandre Julliard 2005-09-02 15:19:42 +00:00
parent cd6e611bb7
commit d1c5f68dca
3 changed files with 42 additions and 1 deletions

View File

@ -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 \

View File

@ -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 <stdarg.h>
#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 );
}

View File

@ -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";
}