Control Panel Application does not start
Vincent Béron
vberon at mecano.gme.usherb.ca
Thu Oct 24 16:32:12 CDT 2002
Le mer 23/10/2002 à 15:23, Stefan Leichter a écrit :
> Hello,
>
> i am currently tracking down a problem with a program (Nokia PC Suite 4;
> NclConf.exe) that is unable to start its control panel application. The control
> panel application should be started by the rundll32.exe. It does not get
> started because of the path in the filename. The applet is searched in the
> correct directory but it does not get found because the path was not stripped
> from the filename. So a filename with path is compared to the filename without
> path read from the directoy. This will never match. I have attached a logfile
> with the relevant line (i hope). Will please someone be so kind and look at it
> and tell me what ithe reason for the problem is.
>
> Thanks Stefan
>
> --------------------------------------------------------------------------------------------------------------------------
> 0831f930:Call shell32.Control_RunDLL(00020025,00400000,40370bb5,0000000a) ret=00401380
> 0831f930:Call kernel32.LoadLibraryA(403d0028 "\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"") ret=409bb0f4
> trace:dosfs:DOSFS_GetFullName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" (last=1)
> trace:string:lstrcpynA (0x406d1c50, "/wine_app/wine_app", 1024)
> trace:string:lstrcpynA (0x406d1c63, "Programme/Gemeinsame Dateien/Nokia/NCLTools", 1005)
> trace:string:lstrcpynW (0x406d2056, L"PROG~1F2\\GEME~SR3\\NOKIA\\NCLTOOLS", 1021)
> trace:dosfs:DOSFS_FindUnixName /wine_app/wine_app/Programme/Gemeinsame Dateien/Nokia/NCLTools,L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\""
> trace:dosfs:DOSFS_ToDosFCBFormat (L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"", 0x406d1b78)
> trace:dosfs:DOSFS_OpenDir "/wine_app/wine_app/Programme/Gemeinsame Dateien/Nokia/NCLTools"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L".", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"."
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"..", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L".."
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_I.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_I.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_D.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_D.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_E.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_E.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_F.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_F.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_G.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_G.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_N.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_N.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_S.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_S.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NCLCONF_SV.HLP", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NCLCONF_SV.HLP"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NclConf.exe", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NclConf.exe"
> trace:dosfs:DOSFS_ReadDir Read: long_name: L"NclConf.cpl", short_name: (null)
> trace:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" -- L"NclConf.cpl"
> warn:dosfs:DOSFS_FindUnixName L"\"C:\\Programme\\Gemeinsame Dateien\\Nokia\\NCLTools\\NclConf.cpl\"" not found in '/wine_app/wine_app/Programme/Gemeinsame Dateien/Nokia/NCLTools'
> warn:module:MODULE_LoadLibraryExA Failed to load module 'C:\WINDOWS\SYSTEM32'; error=2
> 0831f930:Ret kernel32.LoadLibraryA() retval=00000000 ret=409bb0f4
> 0831f930:Call kernel32.FreeLibrary(00000000) ret=409bb088
> 0831f930:Ret kernel32.FreeLibrary() retval=00000000 ret=409bb088
> 0831f930:Ret shell32.Control_RunDLL() retval=00000001 ret=00401380
>
I don't see where the traces for DOSFS_FindUnixName come from (except
the first one). Did you added them yourself?
Else, I don't think it's the \" which cause problem. DOSFS_ReadDir (and
others before it) are able to locate the proper directory (and
DOSFS_ReadDir enumerates it's content correctly). The problem seems to
come from this:
In DOSFS_FindUnixName:
name is "C:\Programme\Gemeinsame Dateien\Nokia\NCLTools\NclConf.cpl",
with the quotes;
DOSFS_ToDosFCBFormat returns FALSE (and then dos_name[0]=0) because
the first character of its argument is a " (and thus an
INVALID_DOS_CHARS), but it doesn't matter;
The DOSFS_OpenDir works correctly, with the proper Unix path;
The DOSFS_ReadDir loop cycles through the files in that dir,
returning (in long_name) the different files it finds (*without* any
path component);
long_name is then tested if it's the same length as the (minimum
between the position of the first backslash in name and the length of
name), which is 3 in this example, so of course it never matches and you
get the final warning in DOSFS_FindUnixName.
Relevant code of DOSFS_FindUnixName:
LPCWSTR p = strchrW( name, '/' );
int len = p ? (int)(p - name) : strlenW(name);
if ((p = strchrW( name, '\\' ))) len = min( (int)(p - name), len );
and
while ((ret = DOSFS_ReadDir( dir, &long_name, &short_name )))
{
/* Check against Unix name */
if (len == strlenW(long_name))
{
if (!ignore_case)
{
if (!strncmpW( long_name, name, len )) break;
}
else
{
if (!strncmpiW( long_name, name, len )) break;
}
}
Could somebody with more knowledge about the DOSFS_* functions can tell
if that's how DOSFS_FindUnixName is supposed to react (fail if name
contains a path)? If it is indeed the case, then it's upper the call
chain that there's a problem.
Call chain:
LoadLibraryA->MODULE_LoadLibraryExA
MODULE_LoadLibraryExA->SearchPathA
SearchPathA->SearchPathW
SearchPathW->DIR_SearchPath
DIR_SearchPath->DOSFS_GetFullName
DOSFS_GetFullName->DOSFS_FindUnixName
I'll try to go further with Nokia PC Suite 4.06.
Oh, and could you create a bug in bugzilla for this?
Vincent
More information about the wine-devel
mailing list