Index: trunk/include/VBox/VBoxGuestLib.h
===================================================================
--- trunk/include/VBox/VBoxGuestLib.h	(revision 44323)
+++ trunk/include/VBox/VBoxGuestLib.h	(revision 44324)
@@ -527,4 +527,5 @@
                                             char const **ppszFlags);
 VBGLR3DECL(void)    VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle);
+VBGLR3DECL(int)     VbglR3GuestPropDelete(uint32_t u32ClientId, const char *pszName);
 VBGLR3DECL(int)     VbglR3GuestPropDelSet(uint32_t u32ClientId, char const * const *papszPatterns, uint32_t cPatterns);
 VBGLR3DECL(int)     VbglR3GuestPropWait(uint32_t u32ClientId, const char *pszPatterns, void *pvBuf, uint32_t cbBuf, uint64_t u64Timestamp, uint32_t cMillies, char ** ppszName, char **ppszValue, uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual);
Index: trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
===================================================================
--- trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp	(revision 44323)
+++ trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp	(revision 44324)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2008-2010 Oracle Corporation
+ * Copyright (C) 2008-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -122,4 +122,5 @@
         doUsage("get <property> [--verbose]", g_pszProgName, "guestproperty");
         doUsage("set <property> [<value> [--flags <flags>]]", g_pszProgName, "guestproperty");
+        doUsage("delete <property>", g_pszProgName, "guestproperty");
         doUsage("enumerate [--patterns <patterns>]", g_pszProgName, "guestproperty");
         doUsage("wait <patterns>", g_pszProgName, "guestproperty");
@@ -1093,4 +1094,49 @@
 
 /**
+ * Deletes a guest property from the guest property store.
+ * This is accessed through the "VBoxGuestPropSvc" HGCM service.
+ *
+ * @returns Command exit code.
+ * @note see the command line API description for parameters
+ */
+static RTEXITCODE deleteGuestProperty(int argc, char *argv[])
+{
+    /*
+     * Check the syntax.  We can deduce the correct syntax from the number of
+     * arguments.
+     */
+    bool usageOK = true;
+    const char *pszName = NULL;
+    if (argc < 1)
+        usageOK = false;
+    if (!usageOK)
+    {
+        usage(GUEST_PROP);
+        return RTEXITCODE_FAILURE;
+    }
+    /* This is always needed. */
+    pszName = argv[0];
+
+    /*
+     * Do the actual setting.
+     */
+    uint32_t u32ClientId = 0;
+    int rc = VbglR3GuestPropConnect(&u32ClientId);
+    if (!RT_SUCCESS(rc))
+        VBoxControlError("Failed to connect to the guest property service, error %Rrc\n", rc);
+    if (RT_SUCCESS(rc))
+    {
+        rc = VbglR3GuestPropDelete(u32ClientId, pszName);
+        if (!RT_SUCCESS(rc))
+            VBoxControlError("Failed to delete the property value, error %Rrc\n", rc);
+    }
+
+    if (u32ClientId != 0)
+        VbglR3GuestPropDisconnect(u32ClientId);
+    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
+}
+
+
+/**
  * Enumerates the properties in the guest property store.
  * This is accessed through the "VBoxGuestPropSvc" HGCM service.
@@ -1312,4 +1358,6 @@
     else if (!strcmp(argv[0], "set"))
         return setGuestProperty(argc - 1, argv + 1);
+    else if (!strcmp(argv[0], "delete"))
+        return deleteGuestProperty(argc - 1, argv + 1);
     else if (!strcmp(argv[0], "enumerate"))
         return enumGuestProperty(argc - 1, argv + 1);
Index: trunk/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
===================================================================
--- trunk/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp	(revision 44323)
+++ trunk/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp	(revision 44324)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2007 Oracle Corporation
+ * Copyright (C) 2007-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -98,4 +98,12 @@
 }
 
+VBGLR3DECL(int)     VbglR3GuestPropDelete(uint32_t u32ClientId,
+                                          const char *pszName)
+{
+    RTPrintf("Called DEL_PROP, client %d, name %s...\n",
+             u32ClientId, pszName);
+    return VINF_SUCCESS;
+}
+
 struct VBGLR3GUESTPROPENUM
 {
Index: trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp
===================================================================
--- trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp	(revision 44323)
+++ trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp	(revision 44324)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2007 Oracle Corporation
+ * Copyright (C) 2007-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -780,4 +780,30 @@
     RTMemFree(pHandle->pchBuf);
     RTMemFree(pHandle);
+}
+
+
+/**
+ * Deletes a guest property.
+ *
+ * @returns VBox status code.
+ * @param   u32ClientId     The client id returned by VbglR3InvsSvcConnect().
+ * @param   pszName         The property to delete.  Utf8
+ */
+VBGLR3DECL(int) VbglR3GuestPropDelete(uint32_t u32ClientId, const char *pszName)
+{
+    AssertPtrReturn(pszName,  VERR_INVALID_POINTER);
+
+    DelProperty Msg;
+
+    Msg.hdr.result = VERR_WRONG_ORDER;
+    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32Function = DEL_PROP;
+    Msg.hdr.cParms = 1;
+    VbglHGCMParmPtrSetString(&Msg.name, pszName);
+    int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
+    if (RT_SUCCESS(rc))
+        rc = Msg.hdr.result;
+
+    return rc;
 }
 
