cmd.exe.manifest

Reece Dunn msclrhd at googlemail.com
Thu Jan 22 12:59:56 CST 2009


2009/1/22 Luke Kenneth Casson Leighton <lkcl at lkcl.net>:
> 0010:trace:file:RtlGetFullPathName_U
> (L"C:\\windows\\system32\\cmd.exe.manifest" 520 0xff9aaaf4 (nil))
> attr=00000000 sharing=00000001 disp=1 options=00000010 ea=(nil).0x00000000
> 0009:trace:seh:start_debugger Starting debugger "winedbg --auto 8 100"
>
>
> ????? !!!!
>
> ahh fer xxxx's sake :)
>
> this is after various complicated ways to create a subprocess with
> which to communicate (stdin / stdout) involving CreatePipe,
> open_osfhandle, - but it's being done from an app that's compiled with
> msvcr80.
>
> 0009: close_handle() = 0
> 0010:trace:heap:RtlAllocateHeap (0x110000,00000002,00000038): returning 0x114e58
> 0010:trace:actctx:get_manifest_in_module looking for res #0001 in
> module 0x7ec10000 L"C:\\windows\\system32\\cmd.exe"
> 0010:trace:heap:RtlFreeHeap (0x110000,00000002,0x114e58): returning TRUE
> 0010:trace:resource:LdrFindResource_U module 0x7ec10000 type #0018
> name #0001 lang 0000 level 3
> 0010:trace:resource:find_entry_by_id root 0x7ec322e4 dir 0x7ec322e4 id
> 0018 not found
> 0010:trace:actctx:get_manifest_in_associated_manifest looking for
> manifest associated with (null) id 1
> 0010:trace:heap:RtlAllocateHeap (0x110000,00000002,00000060): returning 0x114e58
> 0009:trace:heap:RtlFreeHeap (0x110000,00000002,0x1361e0): returning TRUE
> 0010:trace:file:RtlDosPathNameToNtPathName_U
> (L"C:\\windows\\system32\\cmd.exe.manifest",0xffdc6170,(nil),(nil))
> 0009:trace:process:CreateProcessW started process pid 000f tid 0010
> 0010:trace:file:RtlGetFullPathName_U
> (L"C:\\windows\\system32\\cmd.exe.manifest" 520 0xffdc5f14 (nil))
>
>
> ... but hang on... some notes somewhere after a google search for
> cmd.exe.manifest, apparently there isn't supposed to _be_ a manifest
> for cmd.exe - so that it can't be "themed".

cmd.exe *may* have a manifest, it's just that it won't specify common
controls v6 (which enables the theming code in >= XP). For example,
patch.exe and install.exe in cygwin have .manifest files to tell Vista
"I am *not* an installer!".

> ... wossgoinon?! :)

When Wine (or Windows >= XP) loads a process (exe or dll), it looks
for a .manifest file in the folder where the exe is located. If it
does not find one there, it looks for a RT_MANIFEST resource in the
processes resource block. Failing that, it assumes that the process
was not built with a manifest. NOTE: I'm not sure on the ordering of
the check for a manifest file (i.e. which takes precedence -- external
file or embedded resource).

In the trace log above, you can see that Wine is checking for an
embedded manifest resource first, then the external .manifest file.

So the problem lies elsewhere... do you have any more information on
the debug output?

- Reece



More information about the wine-devel mailing list