ZwQuerySystemInformation 函数

[ZwQuerySystemInformation 自Windows 8起不再可用。 请改用本主题中列出的备用函数。]

检索指定的系统信息。

语法

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结构的数组,每个结构对应系统中运行的每个进程。

这些结构包含有关每个进程的资源使用情况的信息,包括进程使用的句柄数、页面文件的峰值使用情况以及进程已分配的内存页数。

SystemProcessorPerformanceInformation

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION结构的数组,系统中安装的每个处理器对应一个。

SystemInterruptInformation

一种不透明的 SYSTEM_INTERRUPT_INFORMATION 结构,可用于为随机数生成器生成不可预知的种子。 请改用 CryptGenRandom 函数。

SystemExceptionInformation

一种不透明的 SYSTEM_EXCEPTION_INFORMATION 结构,可用于为随机数生成器生成不可预知的种子。 请改用 CryptGenRandom 函数。

SystemRegistryQuotaInformation

SYSTEM_REGISTRY_QUOTA_INFORMATION 结构。

SystemLookasideInformation

一种不透明的 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;
    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 参数指向的缓冲区应足够大,以容纳一个数组,该数组包含与系统中安装的处理器 (CPU) 一 样多的 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/100 秒为单位。

KernelTime 成员包含系统在内核模式下执行所用的时间, (包括所有进程中的所有线程、) 的所有处理器上的所有线程,以纳秒的 1/100 秒为单位。

UserTime 成员包含系统在用户模式下执行所花费的时间量, (包括所有进程中的所有线程,) 所有处理器上的所有线程,以纳秒的 1/100 秒为单位。

请改用 GetSystemTimes 来检索此信息。

SYSTEM_INTERRUPT_INFORMATION

SystemInformationClass 参数为 SystemInterruptInformation 时, SystemInformation 参数指向的缓冲区应足够大,以容纳一个数组,该数组包含与系统上安装的处理器 (CPU) 一样多的不透明 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,请通过 运行时动态链接访问函数。 这样,当函数已更改或从操作系统中删除时,代码就有机会正常响应。 但是,可能无法检测到签名更改。

此函数没有关联的导入库。 必须使用 LoadLibraryGetProcAddress 函数动态链接到Ntdll.dll。

要求

要求
DLL
Ntdll.dll

另请参阅

GetSystemInfo

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemTimes

GetSystemRegistryQuota