[Bug 14915] New: FlushFileBuffers() fails on disk volume, sets ERROR_INVALID_HANDLE when handle supposedly valid

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Aug 19 13:43:51 CDT 2008


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

           Summary: FlushFileBuffers() fails on disk volume, sets
                    ERROR_INVALID_HANDLE when handle supposedly valid
           Product: Wine
           Version: 1.1.2
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: -unknown
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: vesselinpeev at hotmail.com


Ran under Wine, the following program receives ERROR_INVALID_HANDLE as a
Windows last error when the flushing call fails.

Note that if you are testing under Windows Vista, you need to run the program
with administrative privileges to be able to get the handle to the volume.

For brevity, I've omitted GetLastError() printing for failure cases except the
flushing one, but, needless to say, you may want to add them for full
correctness / error handling / safety, or do let me know and I'll happily add
these and re-post the code.

#  include <windows.h>
#  include <stdio.h>
#  include <tchar.h>

int _tmain()
{
  LPCTSTR volName = _T("\\\\.\\C:");
  HANDLE hFile = CreateFile(volName, GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, 0, 0);
  if (hFile != INVALID_HANDLE_VALUE) {
    _tprintf(_T("Opened volume %s\n"), volName);

    SetLastError(0xdeadbeef); /* to make sure that it's really the next call
that sets the last error -- advice taken from Dmitry Timoshkov's comment at
http://bugs.winehq.org/show_bug.cgi?id=14855 */

    if (FlushFileBuffers(hFile)) {
      _tprintf(_T("File buffers flushed\n"));
    }
    else {
      DWORD dwRet = GetLastError();
      _ftprintf(stderr, _T("File buffers not flushed, GetLastError() returned
%lu"), dwRet);
      if(dwRet == ERROR_INVALID_HANDLE) {
        _ftprintf(stderr, _T(" (\"The handle is invalid\")"));
      }
      _ftprintf(stderr, ".\n");
    }
  }
  else {
    _ftprintf(stderr, _T("Could not open volume %s\n"), volName);
    return -2;
  }  
  if(! CloseHandle(hFile)) {
    _ftprintf(stderr, _T("Could not close handle to volume %s\n"), volName);
    return -3;
  }
  return 0;
}


-- 
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