On Jul 22 20:54, Corinna Vinschen wrote: > Hi Chuck, > > today I found a filesystem, HGFS, which is sensible against using just > the READ_CONTROL flag in calls to NtOpenFile. The result is a > STATUS_INVALID_PARAMETER status code. > > However, for access to the filesystem information, the READ_CONTROL > isn't necessary. A desired access of 0 is sufficient in every case > I could lay my hands on (NTFS, NFS, Samba, FAT32, HGFS). > > So I just applied a patch to Cygwin to fetch filesystem information > with access set to 0. > > The same patch should go into getVolInfo in csih. Patch below.
New patch below. * cygwin/getVolInfo.c: Check ZwOpenFile status code for STATUS_INVALID_PARAMETER and retry top open with FILE_READ_DATA access. Simply STATUS_NO_MEDIA_IN_DEVICE condition. Index: cygwin/getVolInfo.c =================================================================== RCS file: /sourceware/projects/cygwin-apps-home/cvsfiles/csih/cygwin/getVolInfo.c,v retrieving revision 1.1 diff -u -p -r1.1 getVolInfo.c --- cygwin/getVolInfo.c 7 Aug 2008 23:17:32 -0000 1.1 +++ cygwin/getVolInfo.c 23 Jul 2009 08:38:06 -0000 @@ -86,7 +86,10 @@ main (int argc, char **argv) InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL); stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT); - if (!NT_SUCCESS (stat) && stat == STATUS_NO_MEDIA_IN_DEVICE) + if (stat == STATUS_INVALID_PARAMETER) + status = NtOpenFile (&vol, FILE_READ_DATA, &attr, &io, + FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT); + if (stat == STATUS_NO_MEDIA_IN_DEVICE) { upath.Length = 6 * sizeof (WCHAR); stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, 0); Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple