FindFirstVolume crash

GOUJON Alexandre ale.goujon at gmail.com
Fri Dec 14 04:13:30 CST 2012


On 12/12/2012 11:00 PM, Michael Ost wrote:
> Hi list,
>
> Can someone help me get through the wineserver code for passing data 
> through a buffer in response to an ioctl?
>
> Our (slightly out of date 1.3.24 version of) Wine is getting 
> INVALID_HANDLE_VALUE returned for FindFirstVolume. The problem is that 
> the FindNextVolume call inside FindFirstVolume fails because it is 
> told there are no mount points.
>
> I have tracked the code through FindFirstVolume through 
> NtDeviceIoControlFile to server_ioctl_file on the app side.
>
> On the wineserver side I can see the wineserver fielding the ioctl 
> request, and mountmgr.sys filling a buffer with 5 mount points.
>
> But this information is being written into a buffer (address 0x12510) 
> by the wineserver that is not making it back to FindNextVolume buffer 
> (address 0x29820) on the app side.
>
> Where do these buffers come from? Do they use shared memory? Or is the 
> info passed through a pipe? I'm having trouble making my way through 
> the wineserver code, so any tips or pointers would be appreciated!
>
> Thank you,
>
> Michael Ost
> Muse Research, Inc.
Hi Michael,

First, some tips:
Have you tested the latest version of wine (v1.3.24 is 17 months old) ?
There are some helpful debug channels which can help you like 'volume' 
or 'server'. I only recommend 'relay' if you're despaired (remember 
there is a registry key that hide some very-repetitive-and-often-useless 
calls)

I built a simple test case and I don't get any error.
You said there is no mount points but you should at least get the C 
drive and the drive corresponding to /.
Is your wine prefix working ?
Try with a new one (WINEPREFIX=~/wine_test for instance)

I'm not used to debug wineserver issues and I'm happy with that because 
debugging multi-thread apps is often a mess.
But after some research, it seems to be a pipe.
So server_ioctl_file (ntdll/file) calls wine_server_call (ntdll/server) 
calling then send_request (same file) which writes to 
ntdll_get_thread_data()->request_fd. This one seems to be initialized in 
RtlCreateUserThread (ntdll/thread).

Hope it helps..
-------------- next part --------------
A non-text attachment was scrubbed...
Name: findVolumeTestCase.c
Type: text/x-csrc
Size: 750 bytes
Desc: not available
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20121214/85f71c60/attachment.c>


More information about the wine-devel mailing list