[OLEAUT32] Resend: Typelibs, Better handling of References

Robert Shearman R.J.Shearman at warwick.ac.uk
Wed Jun 2 05:57:52 CDT 2004


On Wed, 2004-06-02 at 01:36, Raphael wrote:
> With latest rsabase (i'll send the last today) and ntdll patches
> we go a lot further. But we seems to crash with File Access (sharing) problem.
> Who can understand this log ?
> The traces like fixme:ntdll:NtCreateFile L"\\??\\E:\\4996.rra" => (0, 1)
> are traces in my tree 
> (  FIXME("%s => (%lx, %lx)\n", debugstr_us(attr->ObjectName), io->u.Status, 
> disposition); on ntdll/file.c#220  )
> For me seems that MoveFile not create the file with the good sharing/access 
> rights for future use :(

See below.

> trace:file:MoveFileExW (L"E:\\4996.rra",L"C:\\Program Files\\InstallShield 
> Installation 
> Information\\{A98E5E03-E407-408E-A8D8-B9F088F21000}\\setup.ilg",0002)

...

> fixme:ntdll:NtCreateFile L"\\??\\E:\\4996.rra" => (0, 1)

We open the existing file E:\4996.rra successfully as the source (asking
for no access rights).

...

We presumably detect that the source and destination files are on
different volumes and fall back to copy & delete rather than Unix
rename:
        if (errno == EXDEV && (flag & MOVEFILE_COPY_ALLOWED))
        {
            NtClose( source_handle );
            RtlFreeAnsiString( &source_unix );
            RtlFreeAnsiString( &dest_unix );
            return (CopyFileW( source, dest, TRUE ) && DeleteFileW(
source ));
        }

Therefore, we have now (presumably) closed the source_handle and so we
shouldn't care about how MoveFile opened the file.

> trace:file:CopyFileW L"E:\\4996.rra" -> L"C:\\Program Files\\InstallShield 
> Installation Information\\{A98E5E03-E407-408E-A8D8-B9F088F21000}\\setup.ilg"
> trace:file:CreateFileW L"E:\\4996.rra" GENERIC_READ FILE_SHARE_READ 
> FILE_SHARE_WRITE OPEN_EXISTING attributes 0x0
> trace:file:RtlDosPathNameToNtPathName_U (L"E:\\4996.rra",0x4069d610,(nil),
> (nil))
> trace:file:RtlGetFullPathName_U (L"E:\\4996.rra" 520 0x4069d3b4 (nil))
> trace:file:wine_nt_to_unix_file_name L"\\??\\E:\\4996.rra" -> 
> "/home/fenix/.wine/dosdevices/e:/4996.rra"
> fixme:ntdll:NtCreateFile L"\\??\\E:\\4996.rra" => (c0000043, 4069d628)

But, we cannot open the file this time.

...

And stuff fails from there.

> trace:ole:CoUninitialize ()
> trace:module:LdrShutdownThread ()

We are asking for slightly different rights the second time we open the
file. I presume E:\ is your temp directory? I'm guessing that further up
the log it was created or left open without the right permissions.
You will have to show earlier traces in your log to determine the real
cause.

Rob




More information about the wine-devel mailing list