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