Index: /trunk/include/VBox/VBoxGuestLib.h
===================================================================
--- /trunk/include/VBox/VBoxGuestLib.h	(revision 30039)
+++ /trunk/include/VBox/VBoxGuestLib.h	(revision 30040)
@@ -560,4 +560,5 @@
 VBGLR3DECL(int)     VbglR3CheckSharedModules(void);
 VBGLR3DECL(bool)    VbglR3PageSharingIsEnabled(void);
+VBGLR3DECL(int)     VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, bool *pfReadWrite);
 /** @} */
 
Index: /trunk/include/VBox/VMMDev.h
===================================================================
--- /trunk/include/VBox/VMMDev.h	(revision 30039)
+++ /trunk/include/VBox/VMMDev.h	(revision 30040)
@@ -175,4 +175,5 @@
     VMMDevReq_CheckSharedModules         = 214,
     VMMDevReq_GetPageSharingStatus       = 215,
+    VMMDevReq_DebugIsPageShared          = 216,
     VMMDevReq_SizeHack                   = 0x7fffffff
 } VMMDevRequestType;
@@ -1185,4 +1186,22 @@
 } VMMDevPageSharingStatusRequest;
 AssertCompileSize(VMMDevPageSharingStatusRequest, 24+4);
+
+
+/**
+ * Page sharing status query (debug build only)
+ */
+typedef struct
+{
+    /** Header. */
+    VMMDevRequestHeader         header;
+    /** Page address. */
+    RTGCPTR                     GCPtrPage;
+    /** Shared flag (out) */
+    bool                        fShared;
+    /** Read/write flag (out) */
+    bool                        fReadWrite;
+    /** Alignment */
+    bool                        fAlignment[2];
+} VMMDevPageIsSharedRequest;
 
 #pragma pack()
@@ -1696,5 +1715,6 @@
         case VMMDevReq_GetPageSharingStatus:
             return sizeof(VMMDevPageSharingStatusRequest);
-
+        case VMMDevReq_DebugIsPageShared:
+            return sizeof(VMMDevPageIsSharedRequest);
         default:
             return 0;
Index: /trunk/include/VBox/pgm.h
===================================================================
--- /trunk/include/VBox/pgm.h	(revision 30039)
+++ /trunk/include/VBox/pgm.h	(revision 30040)
@@ -572,4 +572,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);
 /** @} */
 
Index: /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp	(revision 30039)
+++ /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibModule.cpp	(revision 30040)
@@ -144,2 +144,25 @@
 }
 
+/**
+ * Checks if page sharing is enabled.
+ *
+ * @returns true/false enabled/disabled
+ */
+VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, bool *pfReadWrite)
+{
+#ifdef DEBUG
+    VMMDevPageIsSharedRequest Req;
+
+    vmmdevInitRequest(&Req.header, VMMDevReq_DebugIsPageShared);
+    Req.GCPtrPage = pPage;
+    int rc = vbglR3GRPerform(&Req.header);
+    if (RT_SUCCESS(rc))
+    {
+        *pfShared    = Req.fShared;
+        *pfReadWrite = Req.fReadWrite;
+    }
+    return rc;
+#else
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
