Index: /trunk/include/iprt/dbg.h
===================================================================
--- /trunk/include/iprt/dbg.h	(revision 58771)
+++ /trunk/include/iprt/dbg.h	(revision 58772)
@@ -1623,4 +1623,25 @@
 RTR0DECL(int)       RTR0DbgKrnlInfoQuerySymbol(RTDBGKRNLINFO hKrnlInfo, const char *pszModule,
                                                const char *pszSymbol, void **ppvSymbol);
+
+
+/**
+ * Queries the size (in bytes) of a kernel data type.
+ *
+ * @returns IPRT status code.
+ * @retval  VINF_SUCCESS and size at @a pcbType.
+ * @retval  VERR_NOT_FOUND if the type was not found.
+ * @retval  VERR_INVALID_HANDLE if hKrnlInfo is bad.
+ * @retval  VERR_INVALID_POINTER if any of the pointers are bad.
+ * @retval  VERR_WRONG_TYPE if the type was not a valid data type (e.g. a
+ *          function)
+ *
+ * @param   hKrnlInfo       The kernel info handle.
+ * @param   pszModule       The name of the module to search, pass NULL to
+ *                          search the default kernel module.
+ * @param   pszType         The type name.
+ * @param   pcbType         Where to return the size of the type.
+ */
+RTR0DECL(int)       RTR0DbgKrnlInfoQuerySize(RTDBGKRNLINFO hKrnlInfo, const char *pszModule,
+                                             const char *pszType, size_t *pcbType);
 /** @} */
 
Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 58771)
+++ /trunk/include/iprt/mangling.h	(revision 58772)
@@ -1419,4 +1419,5 @@
 # define RTR0DbgKrnlInfoOpen                            RT_MANGLER(RTR0DbgKrnlInfoOpen)        /* r0drv */
 # define RTR0DbgKrnlInfoQueryMember                     RT_MANGLER(RTR0DbgKrnlInfoQueryMember) /* r0drv */
+# define RTR0DbgKrnlInfoQuerySize                       RT_MANGLER(RTR0DbgKrnlInfoQuerySize)   /* r0drv */
 # define RTR0DbgKrnlInfoQuerySymbol                     RT_MANGLER(RTR0DbgKrnlInfoQuerySymbol) /* r0drv */
 # define RTR0DbgKrnlInfoRelease                         RT_MANGLER(RTR0DbgKrnlInfoRelease)     /* r0drv */
Index: /trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp	(revision 58771)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp	(revision 58772)
@@ -330,4 +330,7 @@
     { "RTR0DbgKrnlInfoOpen",                    (void *)RTR0DbgKrnlInfoOpen },          /* only-darwin, only-solaris */
     { "RTR0DbgKrnlInfoQueryMember",             (void *)RTR0DbgKrnlInfoQueryMember },   /* only-darwin, only-solaris */
+# if defined(RT_OS_SOLARIS)
+    { "RTR0DbgKrnlInfoQuerySize",               (void *)RTR0DbgKrnlInfoQuerySize },     /* only-solaris */
+# endif
     { "RTR0DbgKrnlInfoQuerySymbol",             (void *)RTR0DbgKrnlInfoQuerySymbol },   /* only-darwin, only-solaris */
     { "RTR0DbgKrnlInfoRelease",                 (void *)RTR0DbgKrnlInfoRelease },       /* only-darwin, only-solaris */
Index: /trunk/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c	(revision 58771)
+++ /trunk/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c	(revision 58772)
@@ -247,2 +247,52 @@
 }
 
+
+RTR0DECL(int) RTR0DbgKrnlInfoQuerySize(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszType, size_t *pcbType)
+{
+    PRTDBGKRNLINFOINT pThis = hKrnlInfo;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertMsgReturn(pThis->u32Magic == RTDBGKRNLINFO_MAGIC, ("%p: u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_HANDLE);
+    AssertPtrReturn(pszType, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pcbType, VERR_INVALID_PARAMETER);
+    if (g_frtSolInitDone)
+        RT_ASSERT_PREEMPTIBLE();
+
+    modctl_t   *pMod;
+    ctf_file_t *pCtf;
+    if (!pszModule)
+    {
+        pCtf = pThis->pGenUnixCTF;
+        pMod = pThis->pGenUnixMod;
+        NOREF(pMod);
+    }
+    else
+    {
+        char *pszMod = RTStrDup(pszModule);
+        int rc = rtR0DbgKrnlInfoModRetain(pszMod, &pMod, &pCtf);
+        RTStrFree(pszMod);
+        if (RT_FAILURE(rc))
+            return VERR_MODULE_NOT_FOUND;
+        AssertPtrReturn(pMod, VERR_INTERNAL_ERROR_5);
+        AssertPtrReturn(pCtf, VERR_INTERNAL_ERROR_4);
+    }
+
+    int rc = VERR_NOT_FOUND;
+    ctf_id_t TypeIdent = ctf_lookup_by_name(pCtf, pszType);
+    if (TypeIdent != CTF_ERR)
+    {
+        ssize_t cbType = ctf_type_size(pCtf, TypeIdent);
+        if (cbType > 0)
+        {
+            *pcbType = cbType;
+            if (pszModule)
+                rtR0DbgKrnlInfoModRelease(pMod, pCtf);
+            return VINF_SUCCESS;
+        }
+        rc = VERR_WRONG_TYPE;
+    }
+
+    if (pszModule)
+        rtR0DbgKrnlInfoModRelease(pMod, pCtf);
+    return rc;
+}
+
