⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w2k_lib.c

📁 Undocumented Windows 2000 Secrets简体中文版.+源码光盘
💻 C
📖 第 1 页 / 共 5 页
字号:
                {
                glMemorySign++;
                }
            gdMemoryNow += dSize;

            if (!glMemorySign)
                {
                gdMemoryMax = max (gdMemoryMax, gdMemoryNow);
                }
            }
        else
            {
            if (gdMemoryNow < dSize)
                {
                glMemorySign--;
                }
            gdMemoryNow -= dSize;
            }
        LeaveCriticalSection (&gcsMemory);
        }
    return;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kMemoryStatus (PDWORD pdMemoryNow,
                             PDWORD pdMemoryMax)
    {
    BOOL fMemorySign = FALSE;

    EnterCriticalSection (&gcsMemory);

    fMemorySign = (glMemorySign < 0);

    if (pdMemoryNow != NULL) *pdMemoryNow = gdMemoryNow;
    if (pdMemoryMax != NULL) *pdMemoryMax = gdMemoryMax;

    LeaveCriticalSection (&gcsMemory);
    return fMemorySign;
    }

// -----------------------------------------------------------------

PVOID WINAPI w2kMemoryCopy (PVOID pTarget,
                            PVOID pSource,
                            DWORD dBytes)
    {
    DWORD n = 0;

    if ((pTarget != NULL) && (pSource != NULL) && dBytes)
        {
        CopyMemory (pTarget, pSource, n = dBytes);
        }
    return (PBYTE) pTarget + n;
    }

// -----------------------------------------------------------------

PVOID WINAPI w2kMemoryFill (PVOID pTarget,
                            DWORD dBytes,
                            BYTE  bData)
    {
    DWORD n = 0;

    if ((pTarget != NULL) && dBytes)
        {
        FillMemory (pTarget, n = dBytes, bData);
        }
    return (PBYTE) pTarget + n;
    }

// -----------------------------------------------------------------

PVOID WINAPI w2kMemoryZero (PVOID pTarget,
                            DWORD dBytes)
    {
    DWORD n = 0;

    if ((pTarget != NULL) && dBytes)
        {
        ZeroMemory (pTarget, n = dBytes);
        }
    return (PBYTE) pTarget + n;
    }

// =================================================================
// STRING MANAGEMENT
// =================================================================

BOOL WINAPI w2kStringFilter (PWORD pwFilter,
                             PWORD pwData,
                             BOOL  fIgnoreCase)
    {
    DWORD i = 0;
    DWORD j = 0;

    if (pwData   == NULL) return FALSE;
    if (pwFilter == NULL) return TRUE;

    while (pwFilter [i] && pwData [j])
        {
        if (pwFilter [i] != '?')
            {
            if (pwFilter [i] == '*')
                {
                i++;

                if ((pwFilter [i] != '*') &&
                    (pwFilter [i] != '?'))
                    {
                    if (pwFilter [i])
                        {
                        while (pwData [j]
                               &&
                               (!w2kStringFilter (pwFilter + i,
                                                  pwData   + j,
                                                  fIgnoreCase)))
                            {
                            j++;
                            }
                        }
                    return pwData [j] != 0;
                    }
                }
            if (fIgnoreCase
                ? LCASE (pwFilter [i]) != LCASE (pwData [j])
                :        pwFilter [i]  !=        pwData [j] )
                {
                return FALSE;
                }
            }
        i++;
        j++;
        }
    if (pwFilter [i] == '*') i++;
    return !(pwFilter [i] || pwData [j]);
    }

// =================================================================
// POOL MANAGEMENT
// =================================================================

PW2K_POOL WINAPI w2kPoolCreate (DWORD dCount)
    {
    DWORD     i;
    PW2K_POOL pwp = NULL;

    if ((pwp = w2kMemoryCreate (W2K_POOL__ (dCount))) != NULL)
        {
        InitializeCriticalSection (&pwp->cs);
        GetLocalTime              (&pwp->stCreate);

        pwp->stUpdate = pwp->stCreate;
        pwp->stAdd    = pwp->stCreate;
        pwp->stRemove = pwp->stCreate;
        pwp->dCount   = dCount;

        for (i = 0; i < dCount; i++)
            {
            pwp->awe [i].awName [0] = 0;
            pwp->awe [i].pData      = NULL;
            }
        }
    return pwp;
    }

// -----------------------------------------------------------------

PW2K_POOL WINAPI w2kPoolDestroy (PW2K_POOL  pwp,
                                 W2K_NOTIFY Notify,
                                 PDWORD     pdErrors)
    {
    PW2K_ENTRY pwe;
    DWORD      i;
    DWORD      dErrors = 0;

    if (pwp != NULL)
        {
        for (i = 0; i < pwp->dCount; i++)
            {
            pwe = pwp->awe + i;

            if (pwe->awName [0])
                {
                if (Notify != NULL)
                    {
                    if (!Notify (pwp, W2K_NOTIFY_DESTROY,
                                 pwe->awName, pwe->pData))
                        {
                        dErrors++;
                        }
                    }
                else
                    {
                    w2kMemoryDestroy (pwe->pData);
                    }
                }
            }
        DeleteCriticalSection (&pwp->cs);
        w2kMemoryDestroy (pwp);
        }
    if (pdErrors != NULL) *pdErrors = dErrors;
    return NULL;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kPoolLock (PW2K_POOL pwp)
    {
    BOOL fOk = FALSE;

    if (pwp != NULL)
        {
        EnterCriticalSection (&pwp->cs);
        fOk = TRUE;
        }
    return fOk;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kPoolUnlock (PW2K_POOL pwp)
    {
    BOOL fOk = FALSE;

    if (pwp != NULL)
        {
        LeaveCriticalSection (&pwp->cs);
        fOk = TRUE;
        }
    return fOk;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kPoolAdd (PW2K_POOL  pwp,
                        W2K_NOTIFY Notify,
                        PWORD      pwName,
                        PVOID      pData,
                        BOOL       fUnique)
    {
    PW2K_ENTRY pwe;
    DWORD      i;
    BOOL       fOk = FALSE;

    if ((pwName != NULL) && pwName [0] &&
        (lstrlen (pwName) < N_NAME))
        {
        if (w2kPoolLock (pwp))
            {
            for (pwe = NULL, i = 0; i < pwp->dCount; i++)
                {
                if (pwp->awe [i].awName [0])
                    {
                    if (fUnique &&
                        (!lstrcmp (pwp->awe [i].awName, pwName)))
                        {
                        break;
                        }
                    }
                else
                    {
                    if (pwe == NULL)
                        {
                        pwe = pwp->awe + i;
                        if (!fUnique) break;
                        }
                    }
                }
            if ((pwe != NULL) && ((!fUnique) || (i == pwp->dCount)))
                {
                if ((Notify == NULL)
                    ||
                    Notify (pwp, W2K_NOTIFY_ADD,
                            pwe->awName, pwe->pData))
                    {
                    GetLocalTime (&pwp->stUpdate);
                    pwp->stAdd = pwp->stUpdate;

                    lstrcpy (pwe->awName, pwName);
                    pwe->pData = pData;

                    fOk = TRUE;
                    }
                }
            w2kPoolUnlock (pwp);
            }
        }
    return fOk;
    }

// -----------------------------------------------------------------

DWORD WINAPI w2kPoolRemove (PW2K_POOL  pwp,
                            W2K_NOTIFY Notify,
                            PWORD      pwName)
    {
    PW2K_ENTRY pwe;
    DWORD      i;
    DWORD      dCount = 0;

    if (w2kPoolLock (pwp))
        {
        for (i = 0; i < pwp->dCount; i++)
            {
            if ((pwp->awe [i].awName [0])
                &&
                ((pwName == NULL) || (!pwName [0]) ||
                 (!lstrcmp (pwp->awe [i].awName, pwName))))
                {
                pwe = pwp->awe + i;

                if ((Notify == NULL)
                    ||
                    Notify (pwp, W2K_NOTIFY_REMOVE,
                            pwe->awName, pwe->pData))
                    {
                    if (Notify == NULL)
                        {
                        w2kMemoryDestroy (pwe->pData);
                        }
                    GetLocalTime (&pwp->stUpdate);
                    pwp->stRemove = pwp->stUpdate;

                    pwp->awe [i].awName [0] = 0;
                    pwp->awe [i].pData      = NULL;

                    dCount++;
                    }
                }
            }
        w2kPoolUnlock (pwp);
        }
    return dCount;
    }

// -----------------------------------------------------------------

DWORD WINAPI w2kPoolEnumerate (PW2K_POOL  pwp,
                               W2K_NOTIFY Notify,
                               PWORD      pwName)
    {
    PW2K_ENTRY pwe;
    DWORD      i;
    DWORD      dCount = 0;

    if (w2kPoolLock (pwp))
        {
        for (i = 0; i < pwp->dCount; i++)
            {
            if ((pwp->awe [i].awName [0])
                &&
                ((pwName == NULL) || (!pwName [0]) ||
                 (!lstrcmp (pwp->awe [i].awName, pwName))))
                {
                pwe = pwp->awe + i;

                if ((Notify == NULL)
                    ||
                    Notify (pwp, W2K_NOTIFY_ENUMERATE,
                            pwe->awName, pwe->pData))
                    {
                    dCount++;
                    }
                }
            }
        w2kPoolUnlock (pwp);
        }
    return dCount;
    }

// =================================================================
// CONSOLE MANAGEMENT
// =================================================================

BOOL WINAPI w2kConsoleTest (void)
    {
    WORD awTitle [N_CONSOLE];

    return GetConsoleTitle (awTitle, N_CONSOLE) != 0;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kConsoleOpen (void)
    {
    if ((!gfStdHandles) && (!gfStdFailure))
        {
        gfStdTransient = (!w2kConsoleTest ()) && AllocConsole ();

        if (w2kConsoleTest ())
            {
            ghStdInput  = GetStdHandle (STD_INPUT_HANDLE);
            ghStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
            ghStdError  = GetStdHandle (STD_ERROR_HANDLE);

            if ((ghStdInput  != INVALID_HANDLE_VALUE) &&
                (ghStdOutput != INVALID_HANDLE_VALUE) &&
                (ghStdError  != INVALID_HANDLE_VALUE))
                {
                gfStdHandles = TRUE;
                }
            else
                {
                ghStdInput  = INVALID_HANDLE_VALUE;
                ghStdOutput = INVALID_HANDLE_VALUE;
                ghStdError  = INVALID_HANDLE_VALUE;
                }
            }
        if ((gfStdFailure = !gfStdHandles) && gfStdTransient)
            {
            FreeConsole ();
            gfStdTransient = FALSE;
            }
        }
    return gfStdHandles;
    }

// -----------------------------------------------------------------

BOOL WINAPI w2kConsoleClose (void)
    {
    BOOL fOk = FALSE;

    if (gfStdHandles)
        {
        ghStdInput   = INVALID_HANDLE_VALUE;
        ghStdOutput  = INVALID_HANDLE_VALUE;
        ghStdError   = INVALID_HANDLE_VALUE;
        gfStdHandles = FALSE;

        fOk = TRUE;
        }
    if (gfStdTransient)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -