[Bug 18958] Adobe Reader 9 has a divide by zero error during install

wine-bugs at winehq.org wine-bugs at winehq.org
Sat May 29 21:39:12 CDT 2010


http://bugs.winehq.org/show_bug.cgi?id=18958





--- Comment #6 from Austin English <austinenglish at gmail.com>  2010-05-29 21:39:11 ---
It seems it's trying to defragment. Looking at MSDN:
http://msdn.microsoft.com/en-us/library/aa363911%28VS.85%29.asp

"
To defragment a file

   1. Use the FSCTL_GET_VOLUME_BITMAP control code to find a place on the
volume that is large enough to accept an entire file.

      Note  If necessary, move other files to make a place that is large
enough. Ideally, there is enough unallocated clusters after the first extent of
the file that you can move subsequent extents into the space after the first
extent.
   2. Use the FSCTL_GET_RETRIEVAL_POINTERS control code to get a map of the
current layout of the file on the disk.
   3. Walk the RETRIEVAL_POINTERS_BUFFER structure returned by
FSCTL_GET_RETRIEVAL_POINTERS.
   4. Use the FSCTL_MOVE_FILE control code to move each cluster as you walk the
structure.

      Note  You may need to renew either the bitmap or the retrieval structure,
or both at various times as other processes write to the disk.
"

Right before that crash, terminal output shows:
fixme:ntdll:server_ioctl_file Unsupported ioctl 90073 (device=9 access=0
func=1c method=3)
...
fixme:ntdll:server_ioctl_file Unsupported ioctl 90073 (device=9 access=0
func=1c method=3)

90073 is FSCTL_GET_RETRIEVAL_POINTERS.

Looking at a +file, it seems Adobe Reader is installing a file, then trying to
defrag it:
trace:file:CreateFileW L"C:\\Program Files\\Adobe\\Reader
9.0\\Reader\\acrord32.dll" GENERIC_READ FILE_SHARE_READ FILE_SHARE_WRITE 
creation 3 attributes 0x20000000
...
trace:file:CreateFileW returning 0xb8
trace:file:DeviceIoControl (0xb8,90073,0xb3e35c,8,0xb47448,8204,0xb3e348,(nil))
fixme:ntdll:server_ioctl_file Unsupported ioctl 90073 (device=9 access=0
func=1c method=3)

More info on FSCTL_GET_RETRIEVAL_POINTERS here:
http://www.wd-3.com/archive/luserland.htm

I tried a quick hack:
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index b5d1c14..393bd4d 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1243,6 +1243,12 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE
event,
     }
     SERVER_END_REQ;

+    if (code == FSCTL_GET_RETRIEVAL_POINTERS)
+    {
+        FIXME("FSCTL_GET_RETRIEVAL_POINTERS is a stub.\n");
+        return STATUS_SUCCESS;
+    }
+
     if (status == STATUS_NOT_SUPPORTED)
         FIXME("Unsupported ioctl %x (device=%x access=%x func=%x
method=%x)\n",
               code, code >> 16, (code >> 14) & 3, (code >> 2) & 0xfff, code &
3);

returning different statuses (NOT_IMPLEMENTED, ACCESS_DENIED, etc.), but no
luck. Seems it'll need something with a bit more meat.

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list