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

📄 ntinfo.c

📁 从内核直接获取NT操作系统的信息。
💻 C
📖 第 1 页 / 共 4 页
字号:
        {
        printf (T("\r\nStandard -> Daylight:         ")
                T("%02u-%02u %02u:%02u:%02u [%ls]")
                T("\r\nDaylight -> Standard:         ")
                T("%02u-%02u %02u:%02u:%02u [%ls]")
                T("\r\nStandard UTC bias (minutes):  %li")
                T("\r\nDaylight UTC bias (minutes):  %li"),
                stzi.tfDaylightDate.Month,
                stzi.tfDaylightDate.Day,
                stzi.tfDaylightDate.Hour,
                stzi.tfDaylightDate.Minute,
                stzi.tfDaylightDate.Second,
                stzi.awDaylightName,
                stzi.tfStandardDate.Month,
                stzi.tfStandardDate.Day,
                stzi.tfStandardDate.Hour,
                stzi.tfStandardDate.Minute,
                stzi.tfStandardDate.Second,
                stzi.awStandardName,
                stzi.lBias + stzi.lStandardBias,
                stzi.lBias + stzi.lDaylightBias);
        }
    dSize = SYSTEM_TIME_INFORMATION_;
    if (NtlInfoRead (&sti, &dSize, NTL_INFO_SYSTEM,
                     SystemTimeInformation, NULL)
        == STATUS_SUCCESS)
        {
        qBias = sti.dExpTimeZoneBias;
        NtlTimeUnits (&qBias, TICKS_PER_MINUTE);

        printf (T("\r\nCurrent  UTC bias (minutes):  %li"),
                qBias.LowPart);

        NtlTimeUnpack (&sti.qKeBootTime, &tf);

        printf (T("\r\nSystem startup time (UTC):    ")
                T("%02u-%02u-%04u %02u:%02u:%02u"),
                tf.Month, tf.Day,    tf.Year,
                tf.Hour,  tf.Minute, tf.Second);

        NtlTimeInterval
            (&sti.dExpTimeZoneBias, &sti.qKeBootTime, &qTime, 1);

        NtlTimeUnpack (&qTime, &tf);

        printf (T("\r\nSystem startup time (local):  ")
                T("%02u-%02u-%04u %02u:%02u:%02u"),
                tf.Month, tf.Day,    tf.Year,
                tf.Hour,  tf.Minute, tf.Second);

        NtlTimeUnpack (&sti.qKeSystemTime, &tf);

        printf (T("\r\nCurrent system time (UTC):    ")
                T("%02u-%02u-%04u %02u:%02u:%02u"),
                tf.Month, tf.Day,    tf.Year,
                tf.Hour,  tf.Minute, tf.Second);

        NtlTimeInterval
            (&sti.dExpTimeZoneBias, &sti.qKeSystemTime, &qTime, 1);

        NtlTimeUnpack (&qTime, &tf);

        printf (T("\r\nCurrent system time (local):  ")
                T("%02u-%02u-%04u %02u:%02u:%02u"),
                tf.Month, tf.Day,    tf.Year,
                tf.Hour,  tf.Minute, tf.Second);

        NtlTimeInterval
            (&sti.qKeBootTime, &sti.qKeSystemTime, &qTime, 1);

        NtlTimeUnpack (&qTime, &tf);

        printf (T("\r\nSystem up time:               ")
                T("%02u:%02u:%02u"),
                tf.Hour, tf.Minute, tf.Second);
        }
    dSize = SYSTEM_PERFORMANCE_INFORMATION_;
    if (NtlInfoRead (&spi, &dSize, NTL_INFO_SYSTEM,
                     SystemPerformanceInformation, NULL)
        == STATUS_SUCCESS)
        {
        NtlTimeUnpack (&spi.qIdleTime, &tf);

        printf (T("\r\nSystem idle time:             ")
                T("%02u:%02u:%02u"),
                tf.Hour, tf.Minute, tf.Second);
        }
    printf (atNewLine);
    return 0;
    }

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

DWORD WINAPI Memory (PNTL_CMD_DATA pncd)
    {
    SYSTEM_BASIC_INFORMATION          sbi;
    SYSTEM_PERFORMANCE_INFORMATION    spi;
    SYSTEM_REGISTRY_QUOTA_INFORMATION srqi;
    DWORD                             dSize;

    DisplayCommand (pncd);

    dSize = SYSTEM_BASIC_INFORMATION_;
    if (NtlInfoRead (&sbi, &dSize, NTL_INFO_SYSTEM,
                     SystemBasicInformation, NULL)
        == STATUS_SUCCESS)
        {
        printf (T("\r\nPage size:                    %10lu %7lu K")
                T("\r\nAllocation granularity:       %10lu %7lu K")
                T("\r\nPhysical memory total:        %10lu %7lu K"),
                                (sbi.dPageSize),
                NtlBytesToKb    (sbi.dPageSize),
                                (sbi.dAllocationGranularity),
                NtlBytesToKb    (sbi.dAllocationGranularity),
                NtlPagesToBytes (sbi.dMmNumberOfPhysicalPages),
                NtlPagesToKb    (sbi.dMmNumberOfPhysicalPages));
        }
    dSize = SYSTEM_PERFORMANCE_INFORMATION_;
    if (NtlInfoRead (&spi, &dSize, NTL_INFO_SYSTEM,
                     SystemPerformanceInformation, NULL)
        == STATUS_SUCCESS)
        {
        printf (T("\r\nPhysical memory available:    %10lu %7lu K")
                T("\r\nCommit charge total:          %10lu %7lu K")
                T("\r\nCommit charge limit:          %10lu %7lu K")
                T("\r\nCommit charge peak:           %10lu %7lu K")
                T("\r\nPool memory paged:            %10lu %7lu K")
                T("\r\nPool memory non-paged:        %10lu %7lu K"),
                NtlPagesToBytes (spi.dMmAvailablePages     ),
                NtlPagesToKb    (spi.dMmAvailablePages     ),
                NtlPagesToBytes (spi.dMmTotalCommittedPages),
                NtlPagesToKb    (spi.dMmTotalCommittedPages),
                NtlPagesToBytes (spi.dMmTotalCommitLimit   ),
                NtlPagesToKb    (spi.dMmTotalCommitLimit   ),
                NtlPagesToBytes (spi.dMmPeakCommitLimit    ),
                NtlPagesToKb    (spi.dMmPeakCommitLimit    ),
                NtlPagesToBytes (spi.dPoolPaged            ),
                NtlPagesToKb    (spi.dPoolPaged            ),
                NtlPagesToBytes (spi.dPoolNonPaged         ),
                NtlPagesToKb    (spi.dPoolNonPaged         ),
                NtlPagesToBytes (spi.dMmPagedPoolPage      ));
        }
    dSize = SYSTEM_REGISTRY_QUOTA_INFORMATION_;
    if (NtlInfoRead (&srqi, &dSize, NTL_INFO_SYSTEM,
                     SystemRegistryQuotaInformation, NULL)
        == STATUS_SUCCESS)
        {
        printf (T("\r\nRegistry size limit:          %10lu %7lu K")
                T("\r\nCurrent registry size:        %10lu %7lu K")
                T("\r\nPaged pool size:              %10lu %7lu K"),
                             (srqi.dCmpGlobalQuota),
                NtlBytesToKb (srqi.dCmpGlobalQuota),
                             (srqi.dCmpGlobalQuotaUsed),
                NtlBytesToKb (srqi.dCmpGlobalQuotaUsed),
                             (srqi.dMmSizeOfPagedPoolInBytes),
                NtlBytesToKb (srqi.dMmSizeOfPagedPoolInBytes));
        }
    printf (atNewLine);
    return 0;
    }

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

DWORD WINAPI Cache (PNTL_CMD_DATA pncd)
    {
    SYSTEM_CACHE_INFORMATION       sci;
    SYSTEM_PERFORMANCE_INFORMATION spi;
    DWORD                          dSize;

    DisplayCommand (pncd);

    dSize = SYSTEM_CACHE_INFORMATION_;
    if (NtlInfoRead (&sci, &dSize, NTL_INFO_SYSTEM,
                     SystemCacheInformation, NULL)
        == STATUS_SUCCESS)
        {
        printf (T("\r\nFile cache:                   ")
                T("%10lu %7lu K %4lu M")
                T("\r\nFile cache peak:              ")
                T("%10lu %7lu K %4lu M"),
                              sci.dFileCache,
                NtlBytesToKb (sci.dFileCache),
                NtlBytesToMb (sci.dFileCache),
                              sci.dFileCachePeak,
                NtlBytesToKb (sci.dFileCachePeak),
                NtlBytesToMb (sci.dFileCachePeak));
        }
    dSize = SYSTEM_PERFORMANCE_INFORMATION_;
    if (NtlInfoRead (&spi, &dSize, NTL_INFO_SYSTEM,
                     SystemPerformanceInformation, NULL)
        == STATUS_SUCCESS)
        {
        printf (T("\r\nSystem cache page:            0x%08lX\r\n")
                T("\r\nFast read no wait:            %10lu")
                T("\r\nFast read wait:               %10lu")
                T("\r\nFast read resource miss:      %10lu")
                T("\r\nFast read not possible:       %10lu\r\n")
                T("\r\nFast MDL read no wait:        %10lu")
                T("\r\nFast MDL read wait:           %10lu")
                T("\r\nFast MDL read resource miss:  %10lu")
                T("\r\nFast MDL read not possible:   %10lu\r\n")
                T("\r\nMap data no wait:             %10lu")
                T("\r\nMap data wait:                %10lu")
                T("\r\nMap data no wait miss:        %10lu")
                T("\r\nMap data wait miss:           %10lu\r\n"),
                NtlPagesToBytes (spi.dMmSystemCachePage),
                spi.dCcFastReadNoWait,
                spi.dCcFastReadWait,
                spi.dCcFastReadResourceMiss,
                spi.dCcFastReadNotPossible,
                spi.dCcFastMdlReadNoWait,
                spi.dCcFastMdlReadWait,
                spi.dCcFastMdlReadResourceMiss,
                spi.dCcFastMdlReadNotPossible,
                spi.dCcMapDataNoWait,
                spi.dCcMapDataWait,
                spi.dCcMapDataNoWaitMiss,
                spi.dCcMapDataWaitMiss);

        printf (T("\r\nPin mapped data count:        %10lu")
                T("\r\nPin read no wait:             %10lu")
                T("\r\nPin read wait:                %10lu")
                T("\r\nPin read no wait miss:        %10lu")
                T("\r\nPin read wait miss:           %10lu\r\n")
                T("\r\nCopy read no wait:            %10lu")
                T("\r\nCopy read wait:               %10lu")
                T("\r\nCopy read no wait miss:       %10lu")
                T("\r\nCopy read wait miss:          %10lu\r\n")
                T("\r\nMDL read no wait:             %10lu")
                T("\r\nMDL read wait:                %10lu")
                T("\r\nMDL read no wait miss:        %10lu")
                T("\r\nMDL read wait miss:           %10lu\r\n")
                T("\r\nRead ahead I/Os:              %10lu")
                T("\r\nLazy write I/Os:              %10lu")
                T("\r\nLazy write Pages:             %10lu")
                T("\r\nData flushes:                 %10lu")
                T("\r\nData pages:                   %10lu"),
                spi.dCcPinMappedDataCount,
                spi.dCcPinReadNoWait,
                spi.dCcPinReadWait,
                spi.dCcPinReadNoWaitMiss,
                spi.dCcPinReadWaitMiss,
                spi.dCcCopyReadNoWait,
                spi.dCcCopyReadWait,
                spi.dCcCopyReadNoWaitMiss,
                spi.dCcCopyReadWaitMiss,
                spi.dCcMdlReadNoWait,
                spi.dCcMdlReadWait,
                spi.dCcMdlReadNoWaitMiss,
                spi.dCcMdlReadWaitMiss,
                spi.dCcReadAheadIos,
                spi.dCcLazyWriteIos,
                spi.dCcLazyWritePages,
                spi.dCcDataFlushes,
                spi.dCcDataPages);
        }
    printf (atNewLine);
    return 0;
    }

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

DWORD WINAPI PageFile (PNTL_CMD_DATA pncd)
    {
    NTL_TABLE                     nt;
    PSYSTEM_PAGE_FILE_INFORMATION pspfi;
    DWORD                         i;
    DWORD                         n = 0;

    DisplayCommand (pncd);

    if (NtlTablePageFile (&nt) == STATUS_SUCCESS)
        {
        DisplayHeader (atPageFile, nt.dCount, nt.dData);

        printf (T("\r\n")
                T("    Total    In use      Peak   Name\r\n"));

        DisplaySeparator (NULL, 79, TRUE);

        pspfi = NtlTableFirst (&nt);

        for (i = 0; i < nt.dCount; i++)
            {
            printf (T("\r\n%7lu K %7lu K %7lu K   \"%ls\""),
                    NtlPagesToKb (pspfi->dTotal),
                    NtlPagesToKb (pspfi->dInUse),
                    NtlPagesToKb (pspfi->dPeak ),
                    pspfi->usName.Buffer);
            n++;

            pspfi = NtlTableNext (&nt, pspfi);
            }
        NtlTableUnload (&nt);
        }
    else
        {
        printf (atListError, T("page file"));
        }
    printf (atNewLine);
    DisplaySummary (atSummary, n);
    return n;
    }

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

DWORD WINAPI Lock (PNTL_CMD_DATA pncd)
    {
    NTL_TABLE    nt;
    PSYSTEM_LOCK psl;
    DWORD        i;
    DWORD        n = 0;

    DisplayCommand (pncd);

    if (NtlTableLock (&nt) == STATUS_SUCCESS)
        {
        DisplayHeader (atLock, nt.dCount, nt.dData);

        printf (T("\r\n")
                T("   Lock        Lock         Active  ")
                T("Contention      Shared   Exclusive\r\n")
                T("List Entry     Owner         Count  ")
                T("     Count     Waiters     Waiters\r\n"));

        DisplaySeparator (NULL, 79, TRUE);

        psl = NtlTableFirst (&nt);

        for (i = 0; i < nt.dCount; i++)
            {
            if ((pncd->dFlags & NTL_CMD_FLAG_ALL) ||
                psl->dActiveCount                 ||
                psl->dContentionCount             ||
                psl->dNumberOfSharedWaiters       ||
                psl->dNumberOfExclusiveWaiters)
                {
                printf (T("\r\n0x%08lX  0x%08lX  %10lu  ")
                        T("%10lu  %10lu  %10lu"),
                        psl->pEResource,
                        psl->dOwner,
                        psl->dActiveCount,
                        psl->dContentionCount,
                        psl->dNumberOfSharedWaiters,
                        psl->dNumberOfExclusiveWaiters);
                n++;
                }
            psl = NtlTableNext (&nt, psl);
            }
        NtlTableUnload (&nt);
        }
    else
        {
        printf (atListError, T("lock"));
        }
    printf (atNewLine);
    DisplaySummary (atSummary, n);
    return n;
    }

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

DWORD WINAPI Module (PNTL_CMD_DATA pncd)
    {
    NTL_TABLE      nt;
    PSYSTEM_MODULE psm;
    DWORD          i;
    DWORD          n = 0;

    DisplayCommand (pncd);

    if (NtlTableModule (&nt, pncd->dFlags & NTL_CMD_FLAG_THIS)
        == STATUS_SUCCESS)
        {
        DisplayHeader (atModule, nt.dCount, nt.dData);

        printf (T("\r\n")
                T("  ID  Rank     Address       Size     Flags  ")
                T("Name\r\n"));

        DisplaySeparator (NULL, 79, TRUE);

        psm = NtlTableFirst (&nt);

        for (i = 0; i < nt.dCount; i++)
            {
            if (TestIds (pncd, MAXDWORD, 1,
                         psm->wId))
                {
                printf (T("\r\n%4u  %4u  0x%08lX %10lu  %08lX  ")
                        T("\"%hs\""),
                        psm->wId,
                        psm->wRank,
                        psm->pAddress,
                        psm->dSize,
                        psm->dFlags,
                        psm->abName +
                        psm->wNameOffset);
                n++;
                }
            psm = NtlTableNext (&nt, psm);
            }
        NtlTableUnload (&nt);
        }
    else
        {
        printf (atListError, T("module"));
        }
    printf (atNewLine);
    DisplaySummary (atSummary, n);
    return n;
    }

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

DWORD WINAPI Handle (PNTL_CMD_DATA pncd)
    {
    NTL_TABLE      nt;
    PSYSTEM_HANDLE psh;
    PTBYTE         ptName;
    DWORD          dSize, dMaxSize, i, j;
    DWORD          n = 0;

    DisplayCommand (pncd);

    if (NtlTableHandle (&nt) == STATUS_SUCCESS)
        {
        DisplayHeader (atHandle, nt.dCount, nt.dData);

        printf (T("\r\n")
                T("PID   Type            ")
                T("Flags    Value    ObjectBody   GrantedAcc\r\n"));

⌨️ 快捷键说明

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