日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

探測(cè)Win2K/XP/2003本機(jī)系統(tǒng)信息

;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; PVOIDSystemInformation,
IN; ULONGSystemInformationLength,
OUT PULONGReturnLength; OPTIONAL);
NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;
從中可以看到,SystemInformationClass是一個(gè)類(lèi)型信息,它大概提供了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)型來(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)類(lèi)型的定義:
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)程名稱(chēng);
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_COUNTERSVmCounters;; //虛擬存儲(chǔ)器的結(jié)構(gòu),見(jiàn)下;
IO_COUNTERSIoCounters;; //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ǔ)大?。?BR>ULONG PageFaultCount;//頁(yè)故障數(shù)目;
ULONG PeakWorkingSetSize;//工作集峰值大??;
ULONG WorkingSetSize;//工作集大??;
ULONG QuotaPeakPagedPoolUsage;; //分頁(yè)池使用配額峰值;
ULONG QuotaPagedPoolUsage;; //分頁(yè)池使用配額;
ULONG QuotaPeakNonPagedPoolUsage;//非分頁(yè)池使用配額峰值;
ULONG QuotaNonPagedPoolUsage;//非分頁(yè)池使用配額;
ULONG PagefileUsage;//頁(yè)文件使用情況;

推薦閱讀