0

を開くWinBase.inlと、次のように表示されます。

ISOLATION_AWARE_INLINE FARPROC IsolationAwarePrivatenCv
IsolationAwarePrivatezltRgCebPnQQeRff(
    __in IsolationAwarePrivateCpBAFGnAG_zBqHyr_vAsB c,
    __inout IsolationAwarePrivateCzHGnoyr_zBqHyr_vAsB m,
    __in PCSTR ProcName
    )
{
    FARPROC Proc = NULL;
    HMODULE hModule;
#ifdef _M_IX86
    static HMODULE s_moduleUnicows;
    static BOOL s_fUnicowsInitialized;

    /*
       get unicows.dll loaded on-demand
    */
    if (!s_fUnicowsInitialized)
    {
    if ((GetVersion() & 0x80000000) != 0)
    {
        GetFileAttributesW(L"???.???");
        s_moduleUnicows = GetModuleHandleA("Unicows.dll");
    }
    s_fUnicowsInitialized = TRUE;
    }

    /*
       always call GetProcAddress(unicows) before the usual .dll
    */
    if (s_moduleUnicows != NULL)
    {
    Proc = GetProcAddress(s_moduleUnicows, ProcName);
    if (Proc != NULL)
        goto Exit;
    }
#endif
    hModule = m->WinbaseIsolationAwarePrivateybNQRQzbQhYR;
    if (hModule == NULL)
    {
#ifdef _M_IX86
    hModule = (((GetVersion() & 0x80000000) != 0) ? (*c->WinbaseIsolationAwarePrivateybNQn)(c->WinbaseIsolationAwarePrivateANZRn) : (*c->WinbaseIsolationAwarePrivateybNQJ)(c->WinbaseIsolationAwarePrivateANZRJ));
#else
    hModule = (*c->WinbaseIsolationAwarePrivateybNQJ)(c->WinbaseIsolationAwarePrivateANZRJ);
#endif
    if (hModule == NULL)
        goto Exit;
    m->WinbaseIsolationAwarePrivateybNQRQzbQhYR = hModule;
    }
    Proc = GetProcAddress(hModule, ProcName);
Exit:
    return Proc;
}

誰が何をするか知ってGetFileAttributesW(L"???.???");いますか?

4

1 に答える 1

2

何もしていない状態です。Unicows.dllこれは、( ) にある DLL を強制的にメモリにロードして、そのハンドルを取得できるようにすることのみを目的としたダミー呼び出しです。実際の値は必要ないため、パラメーターは役に立たない Unicode 文字列「ファイル名」です。呼び出しが無効なファイル名 (ワイルドカードは許可されていません) でエラーになった場合は、結果をスローするためだけにディスクをヒットするよりも少し高速です。 .

于 2012-05-05T01:19:20.920 に答える