Index: /trunk/include/VBox/pdmasynccompletion.h
===================================================================
--- /trunk/include/VBox/pdmasynccompletion.h	(revision 31172)
+++ /trunk/include/VBox/pdmasynccompletion.h	(revision 31173)
@@ -231,4 +231,10 @@
 /** whether file content should be cached by the endpoint. */
 #define PDMACEP_FILE_FLAGS_CACHING      RT_BIT_32(1)
+/** Whether the file should not be write protected.
+ * The default is to protect the file against writes by other processes
+ * when opened in read/write mode to prevent data corruption by
+ * concurrent access which can occur if the local writeback cache is enabled.
+ */
+#define PDMACEP_FILE_FLAGS_DONT_LOCK    RT_BIT_32(2)
 /** @} */
 
Index: /trunk/src/VBox/VMM/PDMAsyncCompletionFile.cpp
===================================================================
--- /trunk/src/VBox/VMM/PDMAsyncCompletionFile.cpp	(revision 31172)
+++ /trunk/src/VBox/VMM/PDMAsyncCompletionFile.cpp	(revision 31173)
@@ -800,10 +800,30 @@
     PDMACFILEEPBACKEND enmEpBackend = pEpClassFile->enmEpBackendDefault;
 
-    AssertMsgReturn((fFlags & ~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_CACHING)) == 0,
+    AssertMsgReturn((fFlags & ~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_CACHING | PDMACEP_FILE_FLAGS_DONT_LOCK)) == 0,
                     ("PDMAsyncCompletion: Invalid flag specified\n"), VERR_INVALID_PARAMETER);
 
-    unsigned fFileFlags = fFlags & PDMACEP_FILE_FLAGS_READ_ONLY
-                         ? RTFILE_O_READ      | RTFILE_O_OPEN | RTFILE_O_DENY_NONE
-                         : RTFILE_O_READWRITE | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE;
+    unsigned fFileFlags = RTFILE_O_OPEN;
+
+    if (fFlags & PDMACEP_FILE_FLAGS_READ_ONLY)
+        fFlags |= RTFILE_O_READ | RTFILE_O_DENY_NONE;
+    else
+    {
+        fFlags |= RTFILE_O_READWRITE;
+
+        /*
+         * Opened in read/write mode. Check whether the caller wants to
+         * avoid the lock. Return an error in case caching is enabled
+         * because this can lead to data corruption.
+         */
+        if (fFlags & PDMACEP_FILE_FLAGS_DONT_LOCK)
+        {
+            if (fFlags & PDMACEP_FILE_FLAGS_CACHING)
+                return VERR_NOT_SUPPORTED;
+            else
+                fFlags |= RTFILE_O_DENY_NONE;
+        }
+        else
+            fFlags |= RTFILE_O_DENY_WRITE;
+    }
 
     if (enmMgrType == PDMACEPFILEMGRTYPE_ASYNC)
