ntdll/kernel32: #9
Eric Pouech
pouech-eric at wanadoo.fr
Thu Mar 20 14:11:18 CST 2003
moved WINE_MODREF.flags to WINE_MODREF.ldr.Flags, and make use of the
same flags values as Win2000
(see http://www.smidgeonsoft.com/ for the details)
A+
--
Eric Pouech
-------------- next part --------------
Common subdirectories: dlls/ntdll8/CVS and dlls/ntdll/CVS
diff -u -x '*~' -x '.#*' dlls/ntdll8/loader.c dlls/ntdll/loader.c
--- dlls/ntdll8/loader.c 2003-03-20 20:21:54.000000000 +0100
+++ dlls/ntdll/loader.c 2003-03-20 20:28:09.000000000 +0100
@@ -134,6 +134,7 @@
if (!exe_modref) exe_modref = wm;
else FIXME( "Trying to load second .EXE file: %s\n", filename );
}
+ else wm->ldr.Flags |= LDR_IMAGE_IS_DLL;
}
return wm;
}
@@ -149,7 +150,7 @@
/* Skip calls for modules loaded with special load flags */
- if (wm->flags & WINE_MODREF_DONT_RESOLVE_REFS) return TRUE;
+ if (wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) return TRUE;
TRACE("(%s,%s,%p) - CALL\n", wm->modname, typeName[type], lpReserved );
@@ -209,14 +210,14 @@
assert( wm );
/* prevent infinite recursion in case of cyclical dependencies */
- if ( ( wm->flags & WINE_MODREF_MARKER )
- || ( wm->flags & WINE_MODREF_PROCESS_ATTACHED ) )
+ if ( ( wm->ldr.Flags & LDR_LOAD_IN_PROGRESS )
+ || ( wm->ldr.Flags & LDR_PROCESS_ATTACHED ) )
goto done;
TRACE("(%s,%p) - START\n", wm->modname, lpReserved );
/* Tag current MODREF to prevent recursive loop */
- wm->flags |= WINE_MODREF_MARKER;
+ wm->ldr.Flags |= LDR_LOAD_IN_PROGRESS;
/* Recursively attach all DLLs this one depends on */
for ( i = 0; retv && i < wm->nDeps; i++ )
@@ -228,7 +229,7 @@
{
retv = MODULE_InitDLL( wm, DLL_PROCESS_ATTACH, lpReserved );
if ( retv )
- wm->flags |= WINE_MODREF_PROCESS_ATTACHED;
+ wm->ldr.Flags |= LDR_PROCESS_ATTACHED;
}
/* Re-insert MODREF at head of list */
@@ -243,10 +244,11 @@
}
/* Remove recursion flag */
- wm->flags &= ~WINE_MODREF_MARKER;
+ wm->ldr.Flags &= ~LDR_LOAD_IN_PROGRESS;
TRACE("(%s,%p) - END\n", wm->modname, lpReserved );
+
done:
RtlLeaveCriticalSection( &loader_section );
return retv;
@@ -270,13 +272,13 @@
for ( wm = MODULE_modref_list; wm; wm = wm->next )
{
/* Check whether to detach this DLL */
- if ( !(wm->flags & WINE_MODREF_PROCESS_ATTACHED) )
+ if ( !(wm->ldr.Flags & LDR_PROCESS_ATTACHED) )
continue;
if ( wm->ldr.LoadCount > 0 && !bForceDetach )
continue;
/* Call detach notification */
- wm->flags &= ~WINE_MODREF_PROCESS_ATTACHED;
+ wm->ldr.Flags &= ~LDR_PROCESS_ATTACHED;
MODULE_InitDLL( wm, DLL_PROCESS_DETACH, lpReserved );
/* Restart at head of WINE_MODREF list, as entries might have
@@ -313,9 +315,9 @@
for ( ; wm; wm = wm->prev )
{
- if ( !(wm->flags & WINE_MODREF_PROCESS_ATTACHED) )
+ if ( !(wm->ldr.Flags & LDR_PROCESS_ATTACHED) )
continue;
- if ( wm->flags & WINE_MODREF_NO_DLL_CALLS )
+ if ( wm->ldr.Flags & LDR_NO_DLL_CALLS )
continue;
MODULE_InitDLL( wm, DLL_THREAD_ATTACH, lpReserved );
@@ -339,7 +341,7 @@
if ( !wm )
ret = STATUS_DLL_NOT_FOUND;
else
- wm->flags |= WINE_MODREF_NO_DLL_CALLS;
+ wm->ldr.Flags |= LDR_NO_DLL_CALLS;
RtlLeaveCriticalSection( &loader_section );
@@ -634,10 +636,10 @@
{
(*pwm)->ldr.LoadCount++;
- if (((*pwm)->flags & WINE_MODREF_DONT_RESOLVE_REFS) &&
+ if (((*pwm)->ldr.Flags & LDR_DONT_RESOLVE_REFS) &&
!(flags & DONT_RESOLVE_DLL_REFERENCES))
{
- (*pwm)->flags &= ~WINE_MODREF_DONT_RESOLVE_REFS;
+ (*pwm)->ldr.Flags &= ~LDR_DONT_RESOLVE_REFS;
PE_fixup_imports( *pwm );
}
TRACE("Already loaded module '%s' at %p, count=%d\n", filename, (*pwm)->ldr.BaseAddress, (*pwm)->ldr.LoadCount);
@@ -784,9 +786,9 @@
for ( wm = MODULE_modref_list; wm; wm = wm->next )
{
- if ( !(wm->flags & WINE_MODREF_PROCESS_ATTACHED) )
+ if ( !(wm->ldr.Flags & LDR_PROCESS_ATTACHED) )
continue;
- if ( wm->flags & WINE_MODREF_NO_DLL_CALLS )
+ if ( wm->ldr.Flags & LDR_NO_DLL_CALLS )
continue;
MODULE_InitDLL( wm, DLL_THREAD_DETACH, NULL );
@@ -852,7 +854,7 @@
{
int i;
- if ( wm->flags & WINE_MODREF_MARKER )
+ if ( wm->ldr.Flags & LDR_UNLOAD_IN_PROGRESS )
return;
if ( wm->ldr.LoadCount <= 0 )
@@ -863,13 +865,13 @@
if ( wm->ldr.LoadCount == 0 )
{
- wm->flags |= WINE_MODREF_MARKER;
+ wm->ldr.Flags |= LDR_UNLOAD_IN_PROGRESS;
for ( i = 0; i < wm->nDeps; i++ )
if ( wm->deps[i] )
MODULE_DecRefCount( wm->deps[i] );
- wm->flags &= ~WINE_MODREF_MARKER;
+ wm->ldr.Flags &= ~LDR_UNLOAD_IN_PROGRESS;
}
}
diff -u -x '*~' -x '.#*' include8/module.h include/module.h
--- include8/module.h 2003-03-20 20:20:15.000000000 +0100
+++ include/module.h 2003-03-20 20:28:09.000000000 +0100
@@ -139,8 +139,6 @@
int nDeps;
struct _wine_modref **deps;
- int flags;
-
char *filename;
char *modname;
char *short_filename;
@@ -149,12 +147,6 @@
char data[1]; /* space for storing filename and short_filename */
} WINE_MODREF;
-#define WINE_MODREF_INTERNAL 0x00000001
-#define WINE_MODREF_NO_DLL_CALLS 0x00000002
-#define WINE_MODREF_PROCESS_ATTACHED 0x00000004
-#define WINE_MODREF_DONT_RESOLVE_REFS 0x00000020
-#define WINE_MODREF_MARKER 0x80000000
-
extern WINE_MODREF *MODULE_modref_list;
/* Resource types */
Common subdirectories: include8/msvcrt and include/msvcrt
Common subdirectories: include8/wine and include/wine
diff -u -x '*~' -x '.#*' include8/winternl.h include/winternl.h
--- include8/winternl.h 2003-03-20 19:34:00.000000000 +0100
+++ include/winternl.h 2003-03-20 20:28:09.000000000 +0100
@@ -1174,6 +1174,18 @@
ULONG TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;
+/* those defines are (some of the) regular LDR_MODULE.Flags values */
+#define LDR_IMAGE_IS_DLL 0x00000004
+#define LDR_LOAD_IN_PROGRESS 0x00001000
+#define LDR_UNLOAD_IN_PROGRESS 0x00002000
+#define LDR_NO_DLL_CALLS 0x00040000
+#define LDR_PROCESS_ATTACHED 0x00080000
+#define LDR_MODULE_REBASED 0x00200000
+
+/* these ones is Wine specific */
+#define LDR_DONT_RESOLVE_REFS 0x40000000
+#define LDR_WINE_INTERNAL 0x80000000
+
/* FIXME: to be checked */
#define MAXIMUM_FILENAME_LENGTH 256
Only in include: winternl.h.orig
Common subdirectories: loader8/CVS and loader/CVS
Common subdirectories: loader8/ne and loader/ne
diff -u -x '*~' -x '.#*' loader8/pe_image.c loader/pe_image.c
--- loader8/pe_image.c 2003-03-20 20:20:15.000000000 +0100
+++ loader/pe_image.c 2003-03-20 20:28:09.000000000 +0100
@@ -508,10 +508,10 @@
{
NE_MODULE *pModule = (NE_MODULE *)GlobalLock16( hModule16 );
pModule->flags |= NE_FFLAGS_BUILTIN;
- wm->flags |= WINE_MODREF_INTERNAL;
+ wm->ldr.Flags |= LDR_WINE_INTERNAL;
}
else if ( flags & DONT_RESOLVE_DLL_REFERENCES )
- wm->flags |= WINE_MODREF_DONT_RESOLVE_REFS;
+ wm->ldr.Flags |= LDR_DONT_RESOLVE_REFS;
wm->find_export = PE_FindExportedFunction;
@@ -522,7 +522,7 @@
/* Fixup Imports */
- if (!(wm->flags & WINE_MODREF_DONT_RESOLVE_REFS) &&
+ if (!(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) &&
PE_fixup_imports( wm ))
{
/* remove entry from modref chain */
Common subdirectories: misc8/CVS and misc/CVS
diff -u -x '*~' -x '.#*' misc8/version.c misc/version.c
--- misc8/version.c 2003-03-20 20:20:15.000000000 +0100
+++ misc/version.c 2003-03-20 20:28:09.000000000 +0100
@@ -464,7 +464,7 @@
ophd->MajorSubsystemVersion, ophd->MinorSubsystemVersion);
/* test if it is an external (native) dll */
- if (!(wm->flags & WINE_MODREF_INTERNAL))
+ if (!(wm->ldr.Flags & LDR_WINE_INTERNAL))
{
int i;
for (i = 0; special_dlls[i]; i++)
Common subdirectories: relay328/CVS and relay32/CVS
diff -u -x '*~' -x '.#*' relay328/relay386.c relay32/relay386.c
--- relay328/relay386.c 2003-03-20 20:20:15.000000000 +0100
+++ relay32/relay386.c 2003-03-20 20:28:09.000000000 +0100
@@ -238,7 +238,7 @@
for (wm = MODULE_modref_list; wm; wm = wm->next)
{
- if (!(wm->flags & WINE_MODREF_INTERNAL)) continue;
+ if (!(wm->ldr.Flags & LDR_WINE_INTERNAL)) continue;
exp = RtlImageDirectoryEntryToData( wm->ldr.BaseAddress, TRUE, IMAGE_DIRECTORY_ENTRY_EXPORT, &size );
if (!exp) continue;
debug = (DEBUG_ENTRY_POINT *)((char *)exp + size);
Common subdirectories: scheduler8/CVS and scheduler/CVS
More information about the wine-patches
mailing list