VirtualPath GetAppPathForPathWorker(string siteID, VirtualPath path)
        {
            uint siteValue = 0;

            if (!UInt32.TryParse(siteID, out siteValue))
            {
                return(VirtualPath.RootVirtualPath);
            }

            IntPtr pBstr = IntPtr.Zero;
            int    cBstr = 0;
            string appPath;

            try {
                int result = _nativeConfig.MgdGetAppPathForPath(siteValue, path.VirtualPathString, out pBstr, out cBstr);
                appPath = (result == 0 && cBstr > 0) ? StringUtil.StringFromWCharPtr(pBstr, cBstr) : null;
            }
            finally {
                if (pBstr != IntPtr.Zero)
                {
                    Marshal.FreeBSTR(pBstr);
                }
            }

            return((appPath != null) ? VirtualPath.Create(appPath) : VirtualPath.RootVirtualPath);
        }