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
"Stefan" == Stefan Leichter Stefan.Leichter@camLine.com writes:
Stefan> Hello, i am currently tracking down a problem with a program Stefan> (Nokia PC Suite 4; NclConf.exe) that is unable to start its Stefan> control panel application. The control panel application should Stefan> be started by the rundll32.exe. It does not get started because Stefan> of the path in the filename. The applet is searched in the Stefan> correct directory but it does not get found because the path was Stefan> not stripped from the filename. So a filename with path is Stefan> compared to the filename without path read from the Stefan> directoy. This will never match. I have attached a logfile with Stefan> the relevant line (i hope). Will please someone be so kind and Stefan> look at it and tell me what ithe reason for the problem is.
Stefan> Thanks Stefan
Stefan> -------------------------------------------------------------------------------------------------------------------------- Stefan> 0831f930:Call Stefan> shell32.Control_RunDLL(00020025,00400000,40370bb5,0000000a) Stefan> ret=00401380 0831f930:Call kernel32.LoadLibraryA(403d0028 Stefan> ""C:\Programme\Gemeinsame ^^^
Where do these quotes come from. They don't look right and make DOSFS_FindUnixName go astray i.m.h.o.
Bye
"Uwe" == Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de writes:
"Stefan" == Stefan Leichter Stefan.Leichter@camLine.com writes:
Stefan> ""C:\Programme\Gemeinsame Uwe> ^^^ I meant ^^
Bye
Stefan Leichter Stefan.Leichter@camLine.com writes:
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
Control_RunDLL should probably strip the quotes before calling LoadLibraryA.
Am Donnerstag 24 Oktober 2002 19:20 schrieb Alexandre Julliard:
Stefan Leichter Stefan.Leichter@camLine.com writes:
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
Control_RunDLL should probably strip the quotes before calling LoadLibraryA.
You are right, when i strip the quotes the application gets further.
Thanks Stefan
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
Am Donnerstag 24 Oktober 2002 23:32 schrieb Vincent Béron:
Le mer 23/10/2002 à 15:23, Stefan Leichter a écrit :
Hello,
I don't see where the traces for DOSFS_FindUnixName come from (except the first one). Did you added them yourself?
yes
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:
the '' is not in the string it gets added by the debug output (TRACE, debugstr_a)
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.
[snip]
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.
It installed not so well for me (some month ago). The file where ok but many missing registry entries.
Oh, and could you create a bug in bugzilla for this?
As Alexandre pointed out the problem are the quotes around the filename when LoadLibrary is called. I plan to create a 'good' patch for Control_DoLaunch in shell32. I did a hack and got further with the program (not much, because it does not draw the window properly and the window does not interact with the user).
Should the bug report be for shell32.RunDll or for LoadLibraryA?
Stefan
"Stefan" == Stefan Leichter Stefan.Leichter@camLine.com writes:
Stefan> Am Donnerstag 24 Oktober 2002 23:32 schrieb Vincent B,bi(Bron: >> Le mer 23/10/2002 ,b`(B 15:23, Stefan Leichter a ,bi(Bcrit : > Hello, >> > >> >> I don't see where the traces for DOSFS_FindUnixName come from (except >> the first one). Did you added them yourself? >>
Stefan> yes
>> 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:
Stefan> the '' is not in the string it gets added by the debug output Stefan> (TRACE, debugstr_a)
Stefan,
we are talking about the additional quote '"' (Gaensefuesschen oben :-)), not the backslash '\'. The quote is i.m.h.o causing the problem.
If you look at the original debug trace, you see an explicitly quoted string passed to DOSFS_FindXXX function. It's probably addes by the calling shell function.
Bye