• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            saga's blog

            突出重點(diǎn),系統(tǒng)全面,不留死角

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              33 Posts :: 2 Stories :: 185 Comments :: 0 Trackbacks

            公告

            QQ:34O859O5

            常用鏈接

            留言簿(15)

            搜索

            •  

            積分與排名

            • 積分 - 210894
            • 排名 - 122

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            輔助材料……原文地址:http://hi.baidu.com/ring3world/blog/item/3f0fb1dbf1fa0a65d0164eab.html

            Native API乃Windows用戶模式中為上層Win32 API提供接口的本機(jī)系統(tǒng)服務(wù)。平常我們總是調(diào)用MS為我們提供的公用的Win32 API函數(shù)來(lái)實(shí)現(xiàn)來(lái)實(shí)現(xiàn)我們系統(tǒng)的功能。今天我們要談的是如何通過(guò)本機(jī)系統(tǒng)服務(wù)(Native API)來(lái)探測(cè)本機(jī)系統(tǒng)信息。當(dāng)然,微軟沒(méi)有為我們提供關(guān)于本機(jī)系統(tǒng)服務(wù)的文檔 (Undocumented),也就是不會(huì)為對(duì)它的使用提供任何的保證,所以我們不提倡使用Native API來(lái)開(kāi)發(fā)軟件。不過(guò)在特殊情況下,本機(jī)系統(tǒng)服務(wù)卻為我們提供了通向“秘密”的捷徑。本文提到的信息僅在Windows2000/XP/2003上測(cè)試 過(guò)。

            今天,我們主要討論的是一個(gè)函數(shù)NtQuerySystemInformation(ZwQuerySystemInformation)。當(dāng)然,你不要小看這么一個(gè)函數(shù),它卻為我們提供了豐富的系統(tǒng)信息,同時(shí)還包括對(duì)某些信息的控制和設(shè)置。以下是這個(gè)函數(shù)的原型:

            typedef NTSTATUS (__stdcall *NTQUERYSYSTEMINFORMATION)
            (IN   SYSTEM_INFORMATION_CLASS SystemInformationClass,
            IN OUT PVOID          SystemInformation,
            IN   ULONG          SystemInformationLength,
            OUT   PULONG         ReturnLength OPTIONAL);
            NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;

            NtQuerySystemInformation這個(gè)函數(shù)有四個(gè)參數(shù):
                  第一個(gè)參數(shù)是dwRecordType,這個(gè)參數(shù)指定了我們所查詢的系統(tǒng)信息類型,為了查詢系統(tǒng)HANDLE列表,我們定義一個(gè)常量#define NT_HANDLE_LIST 16(這個(gè)數(shù)值我是查資料得到的,如果誰(shuí)有更詳細(xì)的資料,也請(qǐng)讓我共享一下)。

                  第二個(gè)參數(shù)是一個(gè)指針,這個(gè)指針用來(lái)返回系統(tǒng)句柄列表,在調(diào)用NtQuerySystemInformation函數(shù)之前,必須為這個(gè)指針?lè)峙渥銐虻膬?nèi)存空間,否則函數(shù)調(diào)用會(huì)出錯(cuò)。

                  第三個(gè)參數(shù)是指定你為HandleList所分配的內(nèi)存空間大小,單位是byte。

                  第四個(gè)參數(shù)是NtQuerySystemInformation返回的HandleList的大小;如果NtQuerySystemInformation函數(shù)調(diào)用成功,返回值將是0,否則可以使用GetLastError()獲得詳細(xì)的錯(cuò)誤代碼。  


            從中可以看到,SystemInformationClass是一個(gè)類型信息,它大概提供了50余種信息,也就是我們可以通過(guò)這個(gè)函數(shù)對(duì)大約50多種 的系統(tǒng)信息進(jìn)行探測(cè)或設(shè)置。SystemInformation是一個(gè)LPVOID型的指針,它為我們提供需要獲得的信息,或是我們需要設(shè)置的系統(tǒng)信息。 SystemInformationLength是SystemInformation的長(zhǎng)度,它根據(jù)探測(cè)的信息類型來(lái)決定。至于 ReturnLength則是系統(tǒng)返回的需要的長(zhǎng)度,通??梢栽O(shè)置為空指針(NULL)。

            首先,我們來(lái)看看大家比較熟悉的系統(tǒng)進(jìn)程/線程相關(guān)的信息。這個(gè)題目在網(wǎng)上已經(jīng)討論了N多年了,所以我就不在老生常談了,呵呵。那么就提出這個(gè)結(jié)構(gòu)類型的定義:

            typedef struct _SYSTEM_PROCESSES
            {
            ULONG     NextEntryDelta;     //構(gòu)成結(jié)構(gòu)序列的偏移量;
            ULONG     ThreadCount;       //線程數(shù)目;
            ULONG     Reserved1[6];    
            LARGE_INTEGER CreateTime;       //創(chuàng)建時(shí)間;
            LARGE_INTEGER UserTime;        //用戶模式(Ring 3)的CPU時(shí)間;
            LARGE_INTEGER KernelTime;       //內(nèi)核模式(Ring 0)的CPU時(shí)間;
            UNICODE_STRING ProcessName;       //進(jìn)程名稱;
            KPRIORITY   BasePriority;      //進(jìn)程優(yōu)先權(quán);
            ULONG     ProcessId;       //進(jìn)程標(biāo)識(shí)符;
            ULONG     InheritedFromProcessId; //父進(jìn)程的標(biāo)識(shí)符;
            ULONG     HandleCount;       //句柄數(shù)目;
            ULONG     Reserved2[2];
            VM_COUNTERS  VmCounters;       //虛擬存儲(chǔ)器的結(jié)構(gòu),見(jiàn)下;
            IO_COUNTERS  IoCounters;       //IO計(jì)數(shù)結(jié)構(gòu),見(jiàn)下;
            SYSTEM_THREADS Threads[1];       //進(jìn)程相關(guān)線程的結(jié)構(gòu)數(shù)組,見(jiàn)下;
            }SYSTEM_PROCESSES,*PSYSTEM_PROCESSES;

            typedef struct _SYSTEM_THREADS
            {
            LARGE_INTEGER KernelTime;       //CPU內(nèi)核模式使用時(shí)間;
            LARGE_INTEGER UserTime;         //CPU用戶模式使用時(shí)間;
            LARGE_INTEGER CreateTime;       //線程創(chuàng)建時(shí)間;
            ULONG     WaitTime;         //等待時(shí)間;
            PVOID     StartAddress;       //線程開(kāi)始的虛擬地址;
            CLIENT_ID   ClientId;         //線程標(biāo)識(shí)符;
            KPRIORITY   Priority;         //線程優(yōu)先級(jí);
            KPRIORITY   BasePriority;       //基本優(yōu)先級(jí);
            ULONG     ContextSwitchCount;   //環(huán)境切換數(shù)目;
            THREAD_STATE State;          //當(dāng)前狀態(tài);
            KWAIT_REASON WaitReason;       //等待原因;
            }SYSTEM_THREADS,*PSYSTEM_THREADS;

            typedef struct _VM_COUNTERS
            {
            ULONG PeakVirtualSize;         //虛擬存儲(chǔ)峰值大小;
            ULONG VirtualSize;           //虛擬存儲(chǔ)大小;
            ULONG PageFaultCount;         //頁(yè)故障數(shù)目;
            ULONG PeakWorkingSetSize;       //工作集峰值大??;
            ULONG WorkingSetSize;         //工作集大??;
            ULONG QuotaPeakPagedPoolUsage;     //分頁(yè)池使用配額峰值;
            ULONG QuotaPagedPoolUsage;       //分頁(yè)池使用配額;
            ULONG QuotaPeakNonPagedPoolUsage;   //非分頁(yè)池使用配額峰值;
            ULONG QuotaNonPagedPoolUsage;     //非分頁(yè)池使用配額;
            ULONG PagefileUsage;          //頁(yè)文件使用情況;
            ULONG PeakPagefileUsage;        //頁(yè)文件使用峰值;
            }VM_COUNTERS,*PVM_COUNTERS;

            typedef struct _IO_COUNTERS
            {
            LARGE_INTEGER ReadOperationCount;   //I/O讀操作數(shù)目;
            LARGE_INTEGER WriteOperationCount;   //I/O寫(xiě)操作數(shù)目;
            LARGE_INTEGER OtherOperationCount;   //I/O其他操作數(shù)目;
            LARGE_INTEGER ReadTransferCount;    //I/O讀數(shù)據(jù)數(shù)目;
            LARGE_INTEGER WriteTransferCount;   //I/O寫(xiě)數(shù)據(jù)數(shù)目;
            LARGE_INTEGER OtherTransferCount;   //I/O其他操作數(shù)據(jù)數(shù)目;
            }IO_COUNTERS,*PIO_COUNTERS;

            以上這些信息應(yīng)該是比較全面的了,在Win32 API里為我們提供了PSAPI(進(jìn)程狀態(tài))和ToolHelp32這兩種探測(cè)系統(tǒng)進(jìn)程/線程信息的方式,在Windows2K/XP/2003都支持它們。

            現(xiàn)在,我們來(lái)看看系統(tǒng)的性能信息,性能結(jié)構(gòu)SYSTEM_PERFORMANCE_INFORMATION為我們提供了70余種系統(tǒng)性能方面的信息,真是太豐富了,請(qǐng)慢慢體會(huì)~

            typedef struct _SYSTEM_PERFORMANCE_INFORMATION
            {
            LARGE_INTEGER IdleTime;          //CPU空閑時(shí)間;
            LARGE_INTEGER ReadTransferCount;     //I/O讀操作數(shù)目;
            LARGE_INTEGER WriteTransferCount;     //I/O寫(xiě)操作數(shù)目;
            LARGE_INTEGER OtherTransferCount;     //I/O其他操作數(shù)目;
            ULONG     ReadOperationCount;     //I/O讀數(shù)據(jù)數(shù)目;
            ULONG     WriteOperationCount;     //I/O寫(xiě)數(shù)據(jù)數(shù)目;
            ULONG     OtherOperationCount;     //I/O其他操作數(shù)據(jù)數(shù)目;
            ULONG     AvailablePages;       //可獲得的頁(yè)數(shù)目;
            ULONG     TotalCommittedPages;     //總共提交頁(yè)數(shù)目;
            ULONG     TotalCommitLimit;      //已提交頁(yè)數(shù)目;
            ULONG     PeakCommitment;       //頁(yè)提交峰值;
            ULONG     PageFaults;         //頁(yè)故障數(shù)目;
            ULONG     WriteCopyFaults;       //Copy-On-Write故障數(shù)目;
            ULONG     TransitionFaults;      //軟頁(yè)故障數(shù)目;
            ULONG     Reserved1;
            ULONG     DemandZeroFaults;      //需求0故障數(shù);
            ULONG     PagesRead;         //讀頁(yè)數(shù)目;
            ULONG     PageReadIos;         //讀頁(yè)I/O操作數(shù);
            ULONG     Reserved2[2];
            ULONG     PagefilePagesWritten;    //已寫(xiě)頁(yè)文件頁(yè)數(shù);
            ULONG     PagefilePageWriteIos;    //已寫(xiě)頁(yè)文件操作數(shù);
            ULONG     MappedFilePagesWritten;   //已寫(xiě)映射文件頁(yè)數(shù);
            ULONG     MappedFileWriteIos;     //已寫(xiě)映射文件操作數(shù);
            ULONG     PagedPoolUsage;       //分頁(yè)池使用;
            ULONG     NonPagedPoolUsage;     //非分頁(yè)池使用;
            ULONG     PagedPoolAllocs;       //分頁(yè)池分配情況;
            ULONG     PagedPoolFrees;       //分頁(yè)池釋放情況;
            ULONG     NonPagedPoolAllocs;     //非分頁(yè)池分配情況;
            ULONG     NonPagedPoolFress;     //非分頁(yè)池釋放情況;
            ULONG     TotalFreeSystemPtes;     //系統(tǒng)頁(yè)表項(xiàng)釋放總數(shù);
            ULONG     SystemCodePage;       //操作系統(tǒng)代碼頁(yè)數(shù);
            ULONG     TotalSystemDriverPages;   //可分頁(yè)驅(qū)動(dòng)程序頁(yè)數(shù);
            ULONG     TotalSystemCodePages;    //操作系統(tǒng)代碼頁(yè)總數(shù);
            ULONG     SmallNonPagedLookasideListAllocateHits; //小非分頁(yè)側(cè)視列表分配次數(shù);
            ULONG     SmallPagedLookasideListAllocateHits;  //小分頁(yè)側(cè)視列表分配次數(shù);
            ULONG     Reserved3;        
            ULONG     MmSystemCachePage;     //系統(tǒng)緩存頁(yè)數(shù);
            ULONG     PagedPoolPage;       //分頁(yè)池頁(yè)數(shù);
            ULONG     SystemDriverPage;     //可分頁(yè)驅(qū)動(dòng)頁(yè)數(shù);
            ULONG     FastReadNoWait;       //異步快速讀數(shù)目;
            ULONG     FastReadWait;       //同步快速讀數(shù)目;
            ULONG     FastReadResourceMiss;   //快速讀資源沖突數(shù);
            ULONG     FastReadNotPossible;    //快速讀失敗數(shù);
            ULONG     FastMdlReadNoWait;     //異步MDL快速讀數(shù)目;
            ULONG     FastMdlReadWait;      //同步MDL快速讀數(shù)目;
            ULONG     FastMdlReadResourceMiss;  //MDL讀資源沖突數(shù);
            ULONG     FastMdlReadNotPossible;   //MDL讀失敗數(shù);
            ULONG     MapDataNoWait;       //異步映射數(shù)據(jù)次數(shù);
            ULONG     MapDataWait;        //同步映射數(shù)據(jù)次數(shù);
            ULONG     MapDataNoWaitMiss;     //異步映射數(shù)據(jù)沖突次數(shù);
            ULONG     MapDataWaitMiss;      //同步映射數(shù)據(jù)沖突次數(shù);
            ULONG     PinMappedDataCount;     //牽制映射數(shù)據(jù)數(shù)目;
            ULONG     PinReadNoWait;       //牽制異步讀數(shù)目;
            ULONG     PinReadWait;        //牽制同步讀數(shù)目;
            ULONG     PinReadNoWaitMiss;     //牽制異步讀沖突數(shù)目;
            ULONG     PinReadWaitMiss;      //牽制同步讀沖突數(shù)目;
            ULONG     CopyReadNoWait;       //異步拷貝讀次數(shù);
            ULONG     CopyReadWait;       //同步拷貝讀次數(shù);
            ULONG     CopyReadNoWaitMiss;     //異步拷貝讀故障次數(shù);
            ULONG     CopyReadWaitMiss;     //同步拷貝讀故障次數(shù);
            ULONG     MdlReadNoWait;       //異步MDL讀次數(shù);
            ULONG     MdlReadWait;        //同步MDL讀次數(shù);
            ULONG     MdlReadNoWaitMiss;     //異步MDL讀故障次數(shù);
            ULONG     MdlReadWaitMiss;      //同步MDL讀故障次數(shù);
            ULONG     ReadAheadIos;       //向前讀操作數(shù)目;
            ULONG     LazyWriteIos;       //LAZY寫(xiě)操作數(shù)目;
            ULONG     LazyWritePages;       //LAZY寫(xiě)頁(yè)文件數(shù)目;
            ULONG     DataFlushes;        //緩存刷新次數(shù);
            ULONG     DataPages;         //緩存刷新頁(yè)數(shù);
            ULONG     ContextSwitches;      //環(huán)境切換數(shù)目;
            ULONG     FirstLevelTbFills;     //第一層緩沖區(qū)填充次數(shù);
            ULONG     SecondLevelTbFills;     //第二層緩沖區(qū)填充次數(shù);
            ULONG     SystemCall;         //系統(tǒng)調(diào)用次數(shù);
            }SYSTEM_PERFORMANCE_INFORMATION,*PSYSTEM_PERFORMANCE_INFORMATION;

            現(xiàn)在看到的是結(jié)構(gòu)SYSTEM_PROCESSOR_TIMES提供的系統(tǒng)處理器的使用情況,包括各種情況下的使用時(shí)間及中斷數(shù)目:

            typedef struct __SYSTEM_PROCESSOR_TIMES
            {
            LARGE_INTEGER IdleTime;       //空閑時(shí)間;
            LARGE_INTEGER KernelTime;       //內(nèi)核模式時(shí)間;
            LARGE_INTEGER UserTime;       //用戶模式時(shí)間;
            LARGE_INTEGER DpcTime;        //延遲過(guò)程調(diào)用時(shí)間;
            LARGE_INTEGER InterruptTime;     //中斷時(shí)間;
            ULONG     InterruptCount;     //中斷次數(shù);
            }SYSTEM_PROCESSOR_TIMES,*PSYSTEM_PROCESSOR_TIMES;

            頁(yè)文件的使用情況,SYSTEM_PAGEFILE_INFORMATION提供了所需的相關(guān)信息:

            typedef struct _SYSTEM_PAGEFILE_INFORMATION
            {
            ULONG NetxEntryOffset;        //下一個(gè)結(jié)構(gòu)的偏移量;
            ULONG CurrentSize;          //當(dāng)前頁(yè)文件大小;
            ULONG TotalUsed;           //當(dāng)前使用的頁(yè)文件數(shù);
            ULONG PeakUsed;           //當(dāng)前使用的頁(yè)文件峰值數(shù);
            UNICODE_STRING FileName;       //頁(yè)文件的文件名稱;
            }SYSTEM_PAGEFILE_INFORMATION,*PSYSTEM_PAGEFILE_INFORMATION;

            系統(tǒng)高速緩存的使用情況參見(jiàn)結(jié)構(gòu)SYSTEM_CACHE_INFORMATION提供的信息:

            typedef struct _SYSTEM_CACHE_INFORMATION
            {
            ULONG SystemCacheWsSize;       //高速緩存大??;
            ULONG SystemCacheWsPeakSize;     //高速緩存峰值大小;
            ULONG SystemCacheWsFaults;      //高速緩存頁(yè)故障數(shù)目;
            ULONG SystemCacheWsMinimum;     //高速緩存最小頁(yè)大小;
            ULONG SystemCacheWsMaximum;     //高速緩存最大頁(yè)大?。?br>ULONG TransitionSharedPages;     //共享頁(yè)數(shù)目;
            ULONG TransitionSharedPagesPeak;   //共享頁(yè)峰值數(shù)目;
            ULONG Reserved[2];
            }SYSTEM_CACHE_INFORMATION,*PSYSTEM_CACHE_INFORMATION;
            posted on 2008-06-07 16:53 saga.constantine 閱讀(5512) 評(píng)論(6)  編輯 收藏 引用

            Feedback

            # re: [轉(zhuǎn)載]NtQuerySystemInformation 2009-05-18 14:31 悟山
            贊一個(gè)  回復(fù)  更多評(píng)論
              

            # re: [轉(zhuǎn)載]NtQuerySystemInformation 2009-09-18 22:53 sbbbbbb
            你TMD不能給個(gè)源嗎呀?
            這點(diǎn)B玩意復(fù)制復(fù)制去.

            你不能整點(diǎn)有用的  回復(fù)  更多評(píng)論
              

            # re: [轉(zhuǎn)載]NtQuerySystemInformation 2012-03-23 22:52 YES
            @sbbbbbb

            罵得好! 搜索整個(gè)網(wǎng)絡(luò)都是這么些個(gè)東西在搗亂。。  回復(fù)  更多評(píng)論
              

            # re: [轉(zhuǎn)載]NtQuerySystemInformation 2012-11-14 10:49 fffg
            請(qǐng)尊重別人的勞動(dòng),動(dòng)不動(dòng)就要源碼,你們他媽的吃飯的時(shí)候怎么不讓別人給你們嚼好了再吃?!傻B玩意兒一個(gè)個(gè)的!  回復(fù)  更多評(píng)論
              

            # re: [轉(zhuǎn)載]NtQuerySystemInformation[未登錄](méi) 2013-08-12 09:22 sun
            @fffg你編程自己從0寫(xiě)起試試,你能寫(xiě)得出來(lái)嗎,就不信了
              回復(fù)  更多評(píng)論
              

            # re: [轉(zhuǎn)載]NtQuerySystemInformation[未登錄](méi) 2014-01-05 12:34 aa
            @sun
            煞筆玩意。  回復(fù)  更多評(píng)論
              

            久久亚洲sm情趣捆绑调教| MM131亚洲国产美女久久| 麻豆精品久久精品色综合| 66精品综合久久久久久久| 久久国产高清一区二区三区| 欧美久久久久久午夜精品| 久久99毛片免费观看不卡| 久久久久18| 色婷婷久久综合中文久久蜜桃av| 久久99国产精品一区二区| 久久婷婷国产综合精品 | 久久亚洲2019中文字幕| 久久精品国产免费| 国产精品成人99久久久久| 亚洲国产精品18久久久久久| 99久久99久久精品国产| 久久久久黑人强伦姧人妻| 中文字幕精品无码久久久久久3D日动漫 | 久久精品视屏| 久久人妻少妇嫩草AV蜜桃| 一本伊大人香蕉久久网手机| 久久91亚洲人成电影网站| 久久久久久久国产免费看| 久久久久精品国产亚洲AV无码 | 国产欧美一区二区久久| 91精品国产高清久久久久久91 | 一本一道久久a久久精品综合 | 欧美亚洲国产精品久久| 久久国产精品99精品国产| 色狠狠久久综合网| 深夜久久AAAAA级毛片免费看| 久久亚洲熟女cc98cm| 69SEX久久精品国产麻豆| 久久亚洲AV成人无码软件 | 久久99精品久久久久久动态图| 久久这里只有精品久久| 狠狠色丁香婷婷久久综合| 久久国产色AV免费看| 久久久黄色大片| 国产精品一区二区久久精品无码 | 狠狠色丁香婷婷久久综合|