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

📄 w2k_obj.c

📁 Undocumented Windows 2000 Secrets简体中文版.+源码光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
             awMaxLevel, (dMaxLevel == 1 ? L"" : L"s"));

    if ((pObject = w2kObjectOpen (fTypeDirectory
                                  ? __ObpTypeDirectoryObject ()
                                  : __ObpRootDirectoryObject ()))
        != NULL)
        {
        n += DisplayObject (pObject, dOptions,
                            pwType, 0, dMaxLevel,
                            aLevels, TRUE);

        w2kObjectClose (pObject);
        }
    _printf (L"\r\n%lu object%s\r\n",
             n, (n == 1 ? L"" : L"s"));
    return n;
    }

// =================================================================
// POOR MAN'S OBJECT BROWSER
// =================================================================

VOID WINAPI _DisplayObject (PW2K_OBJECT pObject,
                            DWORD       dLevel)
    {
    POBJECT_DIRECTORY       pDir;
    POBJECT_DIRECTORY_ENTRY pEntry;
    DWORD                   i;

    for (i = 0; i < dLevel; i++) printf (L"   ");

    _printf (L"%+.-16s%s\r\n", pObject->pwType, pObject->pwName);

    if ((!lstrcmp (pObject->pwType, L"Directory")) &&
        ((pDir = w2kDirectoryOpen (pObject->pObject)) != NULL))
        {
        for (i = 0; i < OBJECT_HASH_TABLE_SIZE; i++)
            {
            for (pEntry  = pDir->HashTable [i];
                 pEntry != NULL;
                 pEntry  = pEntry->NextEntry)
                {
                _DisplayObject (pEntry->Object, dLevel+1);
                }
            }
        w2kDirectoryClose (pDir);
        }
    return;
    }

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

VOID WINAPI _DisplayObjects (VOID)
    {
    PW2K_OBJECT pObject;

    if ((pObject = w2kObjectOpen (__ObpRootDirectoryObject ()))
        != NULL)
        {
        _DisplayObject (pObject, 0);
        w2kObjectClose (pObject);
        }
    return;
    }

// =================================================================
// OPTION MANAGEMENT
// =================================================================

BOOL WINAPI OptionNumeric (PWORD  pwData,
                           PDWORD pdData)
    {
    BOOL  fMinus;
    DWORD i, j, n;
    DWORD dData = (pdData != NULL ? *pdData : 0);
    BOOL  fOk   = FALSE;

    i = n = 0;

    switch (pwData [i])
        {
        case '-': fMinus = TRUE;  i++; break;
        case '+': fMinus = FALSE; i++; break;
        default:  fMinus = FALSE;      break;
        }
    while ((pwData [i] >= '0') && (pwData [i] <= '9'))
        {
        if ((j = (n * 10)) / 10 != n) break;
        n = j;

        if ((j = n + (pwData [i] - '0')) < n) break;
        n = j;

        i++;
        }
    if (i && (!pwData [i]))
        {
        dData = (fMinus ? 0 - n : n);
        fOk   = TRUE;
        }
    if (pdData != NULL) *pdData = dData;
    return fOk;
    }

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

VOID WINAPI OptionDispatcher (PPWORD ppwItems,
                              DWORD  dCount)
    {
    BOOL  fPlus;
    DWORD dOption, i, j;
    DWORD dOptions = OPTION_DEFAULT;
    PWORD pwType   = L"*";
    DWORD dLevel   = MAXDWORD;

    for (i = 0; i < dCount; i++)
        {
        if (!lstrcmpi (ppwItems [i], L"/root"))
            {
            DisplayObjects (dOptions, pwType, dLevel, FALSE);
            }
        else if (!lstrcmpi (ppwItems [i], L"/types"))
            {
            DisplayObjects (dOptions, pwType, dLevel, TRUE);
            }
        else if (!OptionNumeric (ppwItems [i], &dLevel))
            {
            switch (ppwItems [i] [0])
                {
                default:
                    {
                    pwType = ppwItems [i];
                    break;
                    }
                case '+':
                case '-':
                    {
                    for (j = 0; ppwItems [i] [j]; j++)
                        {
                        dOption = 0;

                        switch (ppwItems [i] [j])
                            {
                            case '+':
                                {
                                fPlus = TRUE;
                                break;
                                }
                            case '-':
                                {
                                fPlus = FALSE;
                                break;
                                }
                            case 'a':
                            case 'A':
                                {
                                dOption = OPTION_ADDRESS;
                                break;
                                }
                            case 't':
                            case 'T':
                                {
                                dOption = OPTION_TYPE;
                                break;
                                }
                            case 'f':
                            case 'F':
                                {
                                dOption = OPTION_FLAGS;
                                break;
                                }
                            }
                        if (dOption)
                            {
                            if (fPlus) dOptions |=  dOption;
                            else       dOptions &= ~dOption;
                            }
                        }
                    }
                }
            }
        }
    return;
    }

// =================================================================
// MAIN PROGRAM
// =================================================================

DWORD Main (DWORD argc, PTBYTE *argv, PTBYTE *argp)
    {
    PWORD pwStatus;
    DWORD dStatus, dMemoryNow, dMemoryMax;
    BOOL  fMemorySign;

    _printf (atAbout);

    if (argc < 2)
        {
        _printf (atUsage, awArguments);
        _printf (awMoreInfo);
        }
    else
        {
        if ((dStatus = w2kSymbolsStatus ()) == W2K_SYMBOLS_OK)
            {
            OptionDispatcher (argv + 1, argc - 1);
            }
        else
            {
            switch (dStatus)
                {
                case W2K_SYMBOLS_MODULE_ERROR:
                    {
                    pwStatus = awModuleNotFound;
                    break;
                    }
                case W2K_SYMBOLS_LOAD_ERROR:
                    {
                    pwStatus = awLoadError;
                    break;
                    }
                case W2K_SYMBOLS_VERSION_ERROR:
                    {
                    pwStatus = awChecksumError;
                    break;
                    }
                default:
                    {
                    pwStatus = awUnknownError;
                    break;
                    }
                }
            _printf (L"%s", pwStatus);
            }
        }
    if (gfMemoryStatus)
        {
        fMemorySign = w2kMemoryStatus (&dMemoryNow, &dMemoryMax);

        _printf (L"\r\nCurrent memory usage: %c%lu"
                 L"\r\nMaximum memory usage:  %lu\r\n",
                 (fMemorySign ? '-' : ' '), dMemoryNow, dMemoryMax);
        }
    return 0;
    }

// =================================================================
// END OF PROGRAM
// =================================================================

⌨️ 快捷键说明

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