关于msdn中NtQuerySystemInformation函数说明
来源:互联网 发布:淘宝客优惠券采集软件 编辑:程序博客网 时间:2024/06/06 07:48
函数原型
typedef NTSTATUS (__stdcall *NTQUERYSYSTEMINFORMATION)
(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
IN OUT PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength OPTIONAL
);NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;
参数含义
1、SystemInformationClass:
这个参数最终根据需要取得的信息而变,表示要获取的系统信息,包括下面的值:
1)SystemBasicInformation:在SYSTEM_BASIC_INFORMATION结构体中返回处理器的数量,用GetSystemInfo函数代替
2)SystemExceptionInformation:返回不透明(opaque)SYSTEM_EXCEPTION_INFORMATION结构体用来产生随机数生成器的不确定种子。用CryptGenRandom函数代替
3)SystemInterruptInformation:返回不透明(opaque)SYSTEM_INTERRUPT_INFORMATION结构体用来产生随机数生成器的不确定种子。用CryptGenRandom函数代替
4)SystemLookasideInformation:返回不透明(opaque)SYSTEM_LOOKASIDE_INFORMATION结构体用来产生随机数生成器的不确定种子。用CryptGenRandom函数代替
5)SystemPerformanceInformation:返回不透明SYSTEM_PERFORMANCE_INFORMATION结构体用来产生随机数生成器的不确定种子。用CryptGenRandom函数代替
6)SystemProcessInformation:返回SYSTEM_PROCESS_INFORMATION结构体数组,每组包含系统中运行的一个进程的信息。这个结构体包括每个进程资源使用信息,包括进程使用的句柄数、页-文件使用峰值,以及内存分配的内存页的数量。
7)SystemProcessorPerformanceInformation:返回
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION结构体数组,每组包含系统中已安装的一个进程处理器。
8)SystemQueryPerformanceCounterInformation:返回
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION结构体,通过
QueryPerformanceCounter函数的调用来确定系统是否需要一个内核过渡检测高分辨率性能计数器信息
9)SystemRegistryQuotaInformation:返回SYSTEM_REGISTRY_QUOTA_INFORMATION结构体
10)SystemTimeOfDayInformation:返回不透明(opaque)
SYSTEM_TIMEOFDAY_INFORMATION结构体用来产生随机数生成器的不确定种子。用CryptGenRandom函数代替
2、SystemInformation[in out]
这个参数指向接收取来的信息的缓存结构,它的大小和结构体的信息取决于SystemInformationClass 参数的值:
1)SYSTEM_BASIC_INFORMATION
如果SystemInformationClass 参数的值为 SystemBasicInformation,被SystemInformation 参数指向的缓冲区大小应该足够包含单个如下格式的SYSTEM_BASIC_INFORMATION结构体:
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
NumberOfProcessors 变量的值为当前系统中处理器的数量。用GetSystemInfo 函数代替获取这个信息.结构体中的其他参数被操作系统作为内部应用保留了。
2)SYSTEM_EXCEPTION_INFORMATION
如果SystemInformationClass 参数的值为SystemExceptionInformation,SystemInformation参数所指的缓冲区大小应该足够存放一个SYSTEM_EXCEPTION_INFORMATION 结构体的内容,这些内容用来为随机数生成器产生不确定的种子。为了达到这个目的,结构体具有如下格式:
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
结构体的成员被操作系统保留以做内部使用。用CryptGenRandom函数代替来生成加密的随机数据
3)SYSTEM_INTERRUPT_INFORMATION
如果SystemInformationClass参数的值为SystemInterruptInformation,被SystemInformation参数指向的缓冲区的大小应该足够保存和SYSTEM_INTERRUPT_INFORMATION 结构体一样多的数组,数组中有系统中已经安装的所有处理器。每个结构体或者数组作为一个整体,可以被用来为随机数生成器产生一个不可预知的种子。 为了达到这个目的,该结构体具有如下格式:
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
结构体中的每个变量被操作系统保留以做内部应用。用CryptGenRandom函数代替来产生加密的随机数据。
4)SYSTEM_LOOKASIDE_INFORMATION
如果SystemInformationClass参数的值为SystemLookasideInformation,被SystemInformation 参数指向的缓冲区大小应该足够容纳 SYSTEM_LOOKASIDE_INFORMATION 结构体的内容。该结构体用来为随机数生成器产生一个不可预知的种子。 为了达到这个目的,该结构体具有如下格式:
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
结构体中的每个变量被操作系统保留以做内部应用。用CryptGenRandom函数代替来产生加密的随机数据。
5)SYSTEM_PERFORMANCE_INFORMATION
如果SystemInformationClass参数的值为SystemPerformanceInformation,被SystemInformation 参数指向的缓冲区大小应该足够容纳包含尽可能多的SYSTEM_PERFORMANCE_INFORMATION结构体信息的数组。该结构体用来为随机数生成器产生一个不可预知的种子。为了达到这个目的,该结构体具有如下格式:
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
结构体中的每个变量被操作系统保留以做内部应用。用CryptGenRandom函数代替来产生加密的随机数据。
6)SYSTEM_PROCESS_INFORMATION
如果SystemInformationClass参数的值为SystemProcessInformation,被SystemInformation 参数指向的缓冲区应该足够容纳这样的一个数组,该数组包含尽可能多的SYSTEM_PROCESS_INFORMATION结构体信息,该结构体包含系统中正在运行进程。每个结构体都有如下格式:
typedef struct _SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
BYTE Reserved1[52];
PVOID Reserved2[3];
HANDLE UniqueProcessId;
PVOID Reserved3;
ULONG HandleCount;
BYTE Reserved4[4];
PVOID Reserved5[11];
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER Reserved6[6];
} SYSTEM_PROCESS_INFORMATION;
数组下一项的起始位置为当前项的地址加上为NextEntryOffset 成员的值。数组中最后一项,NextEntryOffset值为0。
HandleCount 成员值为请求中被进程正在使用的所有的句柄数量; 用 GetProcessHandleCount 函数替代获取该信息。
PeakPagefileUsage 成员包含进程占用的页-文件存储的字节的最大值,并且PrivatePageCount 成员包含相应进程被分配的内存页数。你可以通过GetProcessMemoryInfo函数或Win32_Process类来获取这些信息。
结构体中的其他成员被操作系统保留作为内部应用。
7)SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
如果SystemInformationClass参数的值为SystemProcessInformation,被SystemInformation参数指向的缓冲区应该足够容纳这样的一个数组,这个数组包含尽可能多的SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION结构体信息,而该结构体包含系统中已安装的处理器(CPUs)。每个结构体都有如下格式:
typedef struct
_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
LARGE_INTEGER IdleTime;
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER Reserved1[2];
ULONG Reserved2;
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
IdleTime 成员包含大量系统处于空闲状态的时间,间隔100纳秒(十亿分之一秒).
KernelTime 成员包含大量系统运行在内核模式(包括所有处理器上的所有进程的所有线程)的时间, 间隔100纳秒。
UserTime 成员包含大量系统运行在用户模式(包括所有处理器上的所有进程的所有线程)的时间,间隔100纳秒。
用GetSystemTimes 函数代替获取这些信息。
8)SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION
如果SystemInformationClass参数的值为SystemQueryPerformanceCounterInformation,被SystemInformation参数指向的缓冲区应该足够容纳单个具有如下格式的SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION结构体:
typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
ULONG Version;
QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;
Flags和ValidFlags 成员属于QUERY_PERFORMANCE_COUNTER_FLAGS 结构体,该结构体格式如下:
typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
union {
struct {
ULONG KernelTransition:1;
ULONG Reserved:31;
};
ULONG ul;
};
} QUERY_PERFORMANCE_COUNTER_FLAGS;
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 结构体的ValidFlags 成员指明Flags 成员哪个字节包含有效信息。当请求内核转换时,KernelTransition 字节在ValidFlags和Flags中都被设置. 若没有请求内核转换,则KernelTransition 字节在ValidFlags 中进行设置而Flags中被清除。
9)SYSTEM_REGISTRY_QUOTA_INFORMATION
如果SystemInformationClass参数的值为SystemRegistryQuotaInformation,被SystemInformation 参数指向的缓冲区大小应该足够容纳具有如下格式的单个 SYSTEM_REGISTRY_QUOTA_INFORMATION结构体。
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
RegistryQuotaAllowed 成员为注册表在本系统中可获得的最大值,单位为字节(bytes)
RegistryQuotaUsed 成员为注册表当前大小,单位为字节(bytes)
用 GetSystemRegistryQuota 函数代替获取这些信息。结构体中的其他成员被操作系统保留作为内部应用。
10)SYSTEM_TIMEOFDAY_INFORMATION
如果SystemInformationClass参数的值为SystemTimeOfDayInformation,被SystemInformation 参数指向的缓冲区大小应该足够容纳SYSTEM_TIMEOFDAY_INFORMATION结构体,该结构体为随机数生成器产生不可预知的种子。为此,该结构体具有如下格式:
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
结构体的每个成员被操作系统保留用于内部应用。
用CryptGenRandom 函数代替产生加密的随机数据。
3、SystemInformationLength[in]
指出SystemInformation指向的缓存结构的大小
4、ReturnLength[out optional]
可选的指针指向实际返回的数据的大小。如果这个值小于或等于SystemInformationLength参数,此函数将信息拷贝到SystemInformation 缓冲区;否则,就返回一个NTSTATUS错误代码并且返回接收请求信息的必要的缓冲区大小到 ReturnLength中。
返回值
返回一个NTSTATUS成功或失败代码。NTSTATUS错误代码的形式和意义在DDK的Ntstatus.h头文件中已列出,且在DDK文档中进行了描述.
注意
NtQuerySystemInformation函数和它返回的结构体属于操作系统内部信息,和windows发布版本的变更主题或标志。为了保持应用程序的兼容性,最好用先前提到的可替换函数来代替。
如果你必须使用NtQuerySystemInformation,通过运行时的动态链接来获取该函数,这样的话当该函数在操作系统中被更改或移除时,你的代码有机会响应的更好。鲜明改变也可能不被发现。
这个功能没有与导入库联系。你必须用LoadLibrary 和 GetProcAddress 函数来动态链接到Ntdll.dll动态库。
需求说明
头文件:Winternl.h
动态库:Ntdll.dll
另请参见
GetSystemInfo
GetProcessHandleCount
GetProcessMemoryInfo
GetSystemTimes
GetSystemRegistryQuota
- 关于msdn中NtQuerySystemInformation函数说明
- 关于msdn中NtQuerySystemInformation函数说明
- MSDN中关于CString类成员函数的说明
- 关于msdn中CreateProcess函数说明的注释
- NtQuerySystemInformation函数
- MSDN中memset函数说明的翻译
- msdn中关于TimeSetEvent回调函数的说明
- stl(三)------这是一个MSDN中的一个关于map 中find函数的说明 很好的一个例子
- NtQuerySystemInformation 函数简单解析
- 关于rename函数,库头文件说明和MSDN说明不一致的问题。
- MSDN帮助文档中关于内联函数学习笔记
- MSDN中关于SetWindowLongPtr和GetWindowLongPtr函数的描述错误
- NtQuerySystemInformation
- NtQuerySystemInformation
- 未公开的函数 NtQuerySystemInformation
- MSDN中关于Membership的SqlProvider属性说明的一个BUG
- 关于C++中构造函数的说明
- 关于C++中构造函数的说明
- 【Anychart】自动保存flash图片到指定目录下。
- 表格的渲染模型
- IT人的境界
- ORA-00600错误及其解决方案
- local static
- 关于msdn中NtQuerySystemInformation函数说明
- apahce+tomcat补充
- Zend实用指南连载一:Zend Platform概述
- 表文件组修改
- ASP读取显示TXT文件内容
- onsubmit校验表单时利用ajax的return false 无效问题
- 微信、手机QQ,网易新闻等几乎大部分Android App的一个诡异的Bug,求高手出招?
- JDOM包概览以及类说明
- AspNetPager分页示例