示例#1
0
static void VBoxSeamlessInstallHook()
{
    if (gCtx.pfnVBoxHookInstallWindowTracker)
    {
        /* Check current visible region state */
        VBoxSeamlessCheckWindows(true);

        HMODULE hMod = (HMODULE)RTLdrGetNativeHandle(gCtx.hModHook);
        Assert(hMod != (HMODULE)~(uintptr_t)0);
        gCtx.pfnVBoxHookInstallWindowTracker(hMod);
    }
}
示例#2
0
static void VBoxSeamlessInstallHook(void)
{
    PVBOXSEAMLESSCONTEXT pCtx = &g_Ctx; /** @todo r=andy Use instance data via service lookup (add void *pInstance). */
    AssertPtr(pCtx);

    if (pCtx->pfnVBoxHookInstallWindowTracker)
    {
        /* Check current visible region state */
        VBoxSeamlessCheckWindows(true);

        HMODULE hMod = (HMODULE)RTLdrGetNativeHandle(pCtx->hModHook);
        Assert(hMod != (HMODULE)~(uintptr_t)0);
        pCtx->pfnVBoxHookInstallWindowTracker(hMod);
    }
}
示例#3
0
int VBoxMMRInit(const VBOXSERVICEENV *pEnv, void **ppInstance, bool *pfStartThread)
{
    LogFlowFuncEnter();

    int rc = RTLdrLoadAppPriv(g_pszMMRDLL, &gCtx.hModHook);
    if (RT_SUCCESS(rc))
    {
        HOOKPROC pHook = (HOOKPROC)RTLdrGetFunction(gCtx.hModHook, g_pszMMRPROC);
        if (pHook)
        {
            HMODULE hMod = (HMODULE)RTLdrGetNativeHandle(gCtx.hModHook);
            Assert(hMod != (HMODULE)~(uintptr_t)0);
            gCtx.hHook = SetWindowsHookEx(WH_CBT, pHook, hMod, 0);
            if (gCtx.hHook)
            {
                *ppInstance = &gCtx;
                return VINF_SUCCESS;
            }

            rc = RTErrConvertFromWin32(GetLastError());
            LogFlowFunc(("Error installing hooking proc: %Rrc\n", rc));
        }
        else
        {
            LogFlowFunc(("Hooking proc not found\n"));
            rc = VERR_NOT_FOUND;
        }

        RTLdrClose(gCtx.hModHook);
        gCtx.hModHook = NIL_RTLDRMOD;
    }
    else
        LogFlowFunc(("Hooking library not found (%Rrc)\n", rc));

    return rc;
}