Index: /trunk/include/VBox/VBoxGuestLib.h
===================================================================
--- /trunk/include/VBox/VBoxGuestLib.h	(revision 30060)
+++ /trunk/include/VBox/VBoxGuestLib.h	(revision 30061)
@@ -560,5 +560,5 @@
 VBGLR3DECL(int)     VbglR3CheckSharedModules(void);
 VBGLR3DECL(bool)    VbglR3PageSharingIsEnabled(void);
-VBGLR3DECL(int)     VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, bool *pfReadWrite);
+VBGLR3DECL(int)     VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, uint64_t *puPageFlags);
 /** @} */
 
Index: /trunk/include/VBox/VMMDev.h
===================================================================
--- /trunk/include/VBox/VMMDev.h	(revision 30060)
+++ /trunk/include/VBox/VMMDev.h	(revision 30061)
@@ -1197,10 +1197,10 @@
     /** Page address. */
     RTGCPTR                     GCPtrPage;
+    /** Page flags. */
+    uint64_t                    uPageFlags;
     /** Shared flag (out) */
     bool                        fShared;
-    /** Read/write flag (out) */
-    bool                        fReadWrite;
     /** Alignment */
-    bool                        fAlignment[2];
+    bool                        fAlignment[3];
 } VMMDevPageIsSharedRequest;
 
Index: /trunk/include/VBox/pgm.h
===================================================================
--- /trunk/include/VBox/pgm.h	(revision 30060)
+++ /trunk/include/VBox/pgm.h	(revision 30061)
@@ -570,5 +570,5 @@
 VMMR3DECL(int)     PGMR3SharedModuleUnregister(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule);
 VMMR3DECL(int)     PGMR3SharedModuleCheckAll(PVM pVM);
-VMMR3DECL(int)     PGMR3SharedModuleGetPageState(PVM pVM, RTGCPTR GCPtrPage, bool *pfShared, bool *pfReadWrite);
+VMMR3DECL(int)     PGMR3SharedModuleGetPageState(PVM pVM, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *puPageFlags);
 /** @} */
 
Index: /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp	(revision 30060)
+++ /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp	(revision 30061)
@@ -149,5 +149,5 @@
  * @returns true/false enabled/disabled
  */
-VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, bool *pfReadWrite)
+VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, uint64_t *puPageFlags)
 {
 #ifdef DEBUG
@@ -160,5 +160,5 @@
     {
         *pfShared    = Req.fShared;
-        *pfReadWrite = Req.fReadWrite;
+        *puPageFlags = Req.uPageFlags;
     }
     return rc;
Index: /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
===================================================================
--- /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 30060)
+++ /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 30061)
@@ -1847,7 +1847,11 @@
 
             if (pRequestHeader->size != sizeof(VMMDevPageIsSharedRequest))
-                pRequestHeader->rc = VERR_INVALID_PARAMETER;
-            else
-                pRequestHeader->rc = PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), pReq->GCPtrPage, &pReq->fShared, &pReq->fReadWrite);
+            {
+                pRequestHeader->rc = VERR_INVALID_PARAMETER;
+            }
+            else
+            {
+                pRequestHeader->rc = PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), pReq->GCPtrPage, &pReq->fShared, &pReq->uPageFlags);
+            }
 # else
             pRequestHeader->rc = VERR_NOT_IMPLEMENTED;
Index: /trunk/src/VBox/VMM/PGMSharedPage.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMSharedPage.cpp	(revision 30060)
+++ /trunk/src/VBox/VMM/PGMSharedPage.cpp	(revision 30061)
@@ -184,7 +184,7 @@
  * @param   GCPtrPage           Page address
  * @param   pfShared            Shared status (out)
- * @param   pfReadWrite         Read/write status (out)
- */
-VMMR3DECL(int) PGMR3SharedModuleGetPageState(PVM pVM, RTGCPTR GCPtrPage, bool *pfShared, bool *pfReadWrite)
+ * @param   puPageFlags         Page flags (out)
+ */
+VMMR3DECL(int) PGMR3SharedModuleGetPageState(PVM pVM, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *puPageFlags)
 {
 #if defined(VBOX_WITH_PAGE_SHARING) && defined(DEBUG)
@@ -196,5 +196,7 @@
 
     int rc = PGMGstGetPage(VMMGetCpu(pVM), GCPtrPage, &fFlags, &GCPhys);
-    if (rc == VINF_SUCCESS)
+    switch (rc)
+    {
+    case VINF_SUCCESS:
     {
         PPGMPAGE pPage = pgmPhysGetPage(&pVM->pgm.s, GCPhys);
@@ -202,8 +204,21 @@
         {
             *pfShared    = PGM_PAGE_IS_SHARED(pPage);
-            *pfReadWrite = !!(fFlags & X86_PTE_RW);
+            *puPageFlags = fFlags;
         }
         else
             rc = VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS;
+        break;
+    }
+    case VERR_PAGE_NOT_PRESENT:
+    case VERR_PAGE_TABLE_NOT_PRESENT:
+    case VERR_PAGE_MAP_LEVEL4_NOT_PRESENT:
+    case VERR_PAGE_DIRECTORY_PTR_NOT_PRESENT:
+        *pfShared = false;
+        *puPageFlags = 0;
+        rc = VINF_SUCCESS;
+        break;
+
+    default:
+        break;
     }
 
