首页
社区
课程
招聘
[旧帖] [翻译]翻译一个msdn文档-ZwQuerySystemInformation 0.00雪花
2013-8-9 00:26 3292

[旧帖] [翻译]翻译一个msdn文档-ZwQuerySystemInformation 0.00雪花

2013-8-9 00:26
3292
新人,不知道怎么的在线n个小时都没一分钱,又没技术赚不了……所以老实干点苦力,翻译了下msdn里面的文档,有误之处见谅!!

ZwQuerySystemInformation function

[ZwQuerySystemInformation 在Windows 8里不再被使用。而取而代它的, 是在这个主题里列举的替代函数。]
找回指定的系统信息。
语法
C++
NTSTATUS WINAPI ZwQuerySystemInformation(
  _In_       SYSTEM_INFORMATION_CLASS SystemInformationClass,
  _Inout_    PVOID SystemInformation,
  _In_       ULONG SystemInformationLength,
  _Out_opt_  PULONG ReturnLength
);


参数
SystemInformationClass [in]
要获取的系统信息的类型。这个参数可以是SYSTEM_INFORMATION_CLASS 枚举类型的其中之一。

SystemBasicInformation  //系统基础信息

包含在SYSTEM_BASIC_INFORMATION 结构里的系统处理程序的数量。可以用GetSystemInfo函数来替代。

SystemPerformanceInformation  //系统执行信息

一个不透明的,可以被用来为随机数发生器生成一个随机种子的SYSTEM_PERFORMANCE_INFORMATION 结构。使用CryptGenRandom函数替代。

SystemTimeOfDayInformation  //系统时间段信息

一个不透明的,可以被用来为随机数发生器生成一个随机种子的SYSTEM_TIMEOFDAY_INFORMATION结构。使用CryptGenRandom函数替代。

SystemProcessInformation  //系统进程信息

一个SYSTEM_PROCESS_INFORMATION 结构的数组,保存系统正在运行的进程。
这些结构体包含关于每个进程的资源用途(resource usage)的信息,包含进程句柄数量、最大页面文件用途(the peak page-file usage)和进程分配的内存页数量。

SystemProcessorPerformanceInformation  //系统处理程序执行信息

一个包含安装在系统里的每个处理程序(processor)的 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 结构的数组。

SystemInterruptInformation  //系统中断信息

一个不透明的结构,被用来为随机数发生器生成一个随机种子SYSTEM_INTERRUPT_INFORMATION结构。使用CryptGenRandom函数替代。

SystemExceptionInformation  //系统异常信息

一个不透明的结构,被用来为随机数发生器生成一个随机种子 SYSTEM_EXCEPTION_INFORMATION  结构。使用CryptGenRandom函数替代。

SystemRegistryQuotaInformation//系统注册表配额信息

一个SYSTEM_REGISTRY_QUOTA_INFORMATION 结构。

SystemLookasideInformation  //系统后援信息98  

一个不透明的结构,被用来为随机数发生器生成一个随机种子 
SYSTEM_LOOKASIDE_INFORMATION  结构。使用CryptGenRandom函数替代。
SystemInformation [in, out]

一个接收请求信息的缓冲区的指针。这个信息的大小和结构取决于SystemInformationClass参数,如同下面的列表所表示的那样:
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 可以获取这个信息。
这个结构的其他成员被保留以供操作系统使用。

SYSTEM_PERFORMANCE_INFORMATION  //系统执行信息

当SystemInformationClass参数为 SystemPerformanceInformation时,SystemInformation 指向的缓冲区应该有足够大的空间来包含不透明结构 SYSTEM_PERFORMANCE_INFORMATION,这个结构为随机数发生器产生一个随机种子。为此,结构有如下构造:
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
    BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;

此结构的个别成员保留给系统内部使用。
使用CryptGenRandom函数来代替产生秘密的随机数据。

SYSTEM_TIMEOFDAY_INFORMATION //系统时间段信息

当SystemInformationClass参数为SystemTimeOfDayInformation时,SystemInformation 指向的缓冲区应该有足够大的空间来包含不透明结构  SYSTEM_TIMEOFDAY_INFORMATION,这个结构为随机数发生器产生一个随机种子。为此,结构有如下构造:
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
    BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;

此结构的个别成员保留给系统内部使用。
使用CryptGenRandom函数来代替产生秘密的随机数据。

!SYSTEM_PROCESS_INFORMATION
当SystemInformationClass参数为SystemProcessInformation 时,SystemInformation指向的缓冲区应该足够大来包含与系统进程数目相等量的 SYSTEM_PROCESS_INFORMATION 结构,这个结构有如下定义:
typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    BYTE Reserved1[48];
    PVOID Reserved2[3];
    HANDLE UniqueProcessId;    //进程id
    PVOID Reserved3;
    ULONG HandleCount;
    BYTE Reserved4[4];
    PVOID Reserved5[11];
    SIZE_T PeakPagefileUsage;
    SIZE_T PrivatePageCount;
    LARGE_INTEGER Reserved6[6];
} SYSTEM_PROCESS_INFORMATION;

NumberOfThreads成员包含进程当前运行的线程总数。
HandleCount成员包含所查询进程的句柄总数;使用GetProcessHandleCount可以获取这个信息。
PeakPagefileUsage成员包含进程使用的页文件储存器的最大字节数, PrivatePageCount  成员进程分配使用的内存页数。
你也可以使用 GetProcessMemoryInfo或者Win32_Process类来获取这个信息。
其他成员保留给系统内部使用。

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION  //系统处理程序执行信息

当 SystemInformationClass  参数为 SystemProcessorPerformanceInformation 时, SystemInformation  指向的缓冲区应该有足够大的空间来包含一个数组that包含与安装在系统中的处理程序(CPUs)数目相同的 SYSTEM_PROCESS_INFORMATION  结构。此结构有如下定义:
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成员包含系统空闲时间总量,单位为一纳秒的1%。
KernelTime成员包含系统执行内核模式的总时间(包含所有处理函数中所有进程的所有线程),单位为一纳秒的1%。
UserTime成员包含系统在用户模式中的总时间(包含所有处理函数中所有进程的所有线程),单位为一纳秒的1%。
也可以使用GetSystemTimes函数来获取这个信息。

SYSTEM_INTERRUPT_INFORMATION   //系统中断信息

当SystemInformationClass参数为SystemInterruptInformation时,SystemInformation指向的缓冲区应该有足够的空间来包含一个和系统安装的处理程序数量相同的 SYSTEM_INTERRUPT_INFORMATION 结构体的数组。每一个结构,或者这个数组的整体,可以被用来产生一个随机数种子给随机数发生器。为此,此结构有如下定义:
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
    BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;

个别成员被保留给系统内部使用。
也可使用CryptGenRandom函数来获取随机数据。

SYSTEM_EXCEPTION_INFORMATION //系统异常信息

当SystemInformationClass参数为  SystemExceptionInformation 时,SystemInformation 指向的缓冲区应该有足够大的空间来包含不透明结构  SYSTEM_EXCEPTION_INFORMATION  ,这个结构为随机数发生器产生一个随机种子。为此,结构有如下构造:
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
    BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;

个别成员被保留给系统内部使用。
也可使用CryptGenRandom函数来获取随机数据。

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 成员包含注册表在系统上能达到的最大大小(以字节为单位)。
RegistryQuotaUsed 成员注册表的当前大小(以字节为单位)。
使用GetSystemRegistryQuota函数也可以获取这个信息。
此结构的其他成员被保留给系统内部使用。
SYSTEM_LOOKASIDE_INFORMATION //系统后援信息
当SystemInformationClass参数为SystemLookasideInformation时,SystemInformation 指向的缓冲区应该有足够大的空间来包含不透明结构SYSTEM_LOOKASIDE_INFORMATION,这个结构为随机数发生器产生一个随机种子。为此,该结构有如下构造:
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
    BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;

个别成员被保留给系统内部使用。
也可使用CryptGenRandom函数来获取随机数据。
SystemInformationLength [in]

SystemInformation参数指向的缓冲区的大小,以字节为单位。
ReturnLength [out, optional]

一个可选的指向函数写入所获得的返回信息的实际大小的位置的指针。如果这个大小小于或等于SystemInformationLength参数,函数则拷贝这个信息到SystemInformation缓冲区;否则,函数将返回一个NTSTATUS错误信息,以及在ReturnLength里写入需要来获取你请求获取的信息所需的缓冲区大小。
返回值

返回一个NTSTATUS型的表示成功或错误代码。
NTSTATUS错误代码的表单和意义在DDK的Ntstatus.h 头文件里列出,DDK文档里也有它的描述。
注解
ZwQuerySystemInformation函数和它返回的结构是已发布的Windows操作系统内部的转变而来的。为了维持你的应用的兼容性,最好使用上面提到的替代函数。
如果你想使用ZwQuerySystemInformation函数,请通过run-time dynamic linking(运行时动态链接)。这样提供了机会,当这个函数被操作系统改变或者移除时,会有一个优雅的应答。然而签名的改变,或许不会被检测到。
这个函数与导入库无关。所以你必须使用LoadLibrary或者GetProcAddress函数来动态链接Ntdll.dll。(用户模式下)
而在驱动模式中,直接在开始的时候声明一下就可以了。

NTKERNELAPI
NTSTATUS NTAPI ZwQuerySystemInformation(
        IN  ULONG SystemInformationClass,
        IN  OUT PVOID SystemInformation,
        IN  ULONG SystemInformationLength,
        OUT PULONG ReturnLength OPTIONAL
);

需求
DLL
Ntdll.dll

 
Send comments about this topic to Microsoft
翻译 by Ruby 日期:2013-8-4

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞3
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回