KUSER_SHARED_DATA 结构 (ntddk.h)

本主题介绍 KUSER_SHARED_DATA 结构。

语法

typedef struct _KUSER_SHARED_DATA {
  ULONG                         TickCountLowDeprecated;
  ULONG                         TickCountMultiplier;
  KSYSTEM_TIME                  InterruptTime;
  KSYSTEM_TIME                  SystemTime;
  KSYSTEM_TIME                  TimeZoneBias;
  USHORT                        ImageNumberLow;
  USHORT                        ImageNumberHigh;
  WCHAR                         NtSystemRoot[260];
  ULONG                         MaxStackTraceDepth;
  ULONG                         CryptoExponent;
  ULONG                         TimeZoneId;
  ULONG                         LargePageMinimum;
  ULONG                         AitSamplingValue;
  ULONG                         AppCompatFlag;
  ULONGLONG                     RNGSeedVersion;
  ULONG                         GlobalValidationRunlevel;
  LONG                          TimeZoneBiasStamp;
  ULONG                         NtBuildNumber;
  NT_PRODUCT_TYPE               NtProductType;
  BOOLEAN                       ProductTypeIsValid;
  BOOLEAN                       Reserved0[1];
  USHORT                        NativeProcessorArchitecture;
  ULONG                         NtMajorVersion;
  ULONG                         NtMinorVersion;
  BOOLEAN                       ProcessorFeatures[PROCESSOR_FEATURE_MAX];
  ULONG                         Reserved1;
  ULONG                         Reserved3;
  ULONG                         TimeSlip;
  ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
  ULONG                         BootId;
  LARGE_INTEGER                 SystemExpirationDate;
  ULONG                         SuiteMask;
  BOOLEAN                       KdDebuggerEnabled;
  union {
    UCHAR MitigationPolicies;
    struct {
      UCHAR NXSupportPolicy : 2;
      UCHAR SEHValidationPolicy : 2;
      UCHAR CurDirDevicesSkippedForDlls : 2;
      UCHAR Reserved : 2;
    };
  };
  USHORT                        CyclesPerYield;
  ULONG                         ActiveConsoleId;
  ULONG                         DismountCount;
  ULONG                         ComPlusPackage;
  ULONG                         LastSystemRITEventTickCount;
  ULONG                         NumberOfPhysicalPages;
  BOOLEAN                       SafeBootMode;
  union {
    UCHAR VirtualizationFlags;
    struct {
      UCHAR ArchStartedInEl2 : 1;
      UCHAR QcSlIsSupported : 1;
    };
  };
  UCHAR                         Reserved12[2];
  union {
    ULONG SharedDataFlags;
    struct {
      ULONG DbgErrorPortPresent : 1;
      ULONG DbgElevationEnabled : 1;
      ULONG DbgVirtEnabled : 1;
      ULONG DbgInstallerDetectEnabled : 1;
      ULONG DbgLkgEnabled : 1;
      ULONG DbgDynProcessorEnabled : 1;
      ULONG DbgConsoleBrokerEnabled : 1;
      ULONG DbgSecureBootEnabled : 1;
      ULONG DbgMultiSessionSku : 1;
      ULONG DbgMultiUsersInSessionSku : 1;
      ULONG DbgStateSeparationEnabled : 1;
      ULONG SpareBits : 21;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME2;
  ULONG                         DataFlagsPad[1];
  ULONGLONG                     TestRetInstruction;
  LONGLONG                      QpcFrequency;
  ULONG                         SystemCall;
  ULONG                         Reserved2;
  ULONGLONG                     FullNumberOfPhysicalPages;
  ULONGLONG                     SystemCallPad[1];
  union {
    KSYSTEM_TIME TickCount;
    ULONG64      TickCountQuad;
    struct {
      ULONG ReservedTickCountOverlay[3];
      ULONG TickCountPad[1];
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME3;
  ULONG                         Cookie;
  ULONG                         CookiePad[1];
  LONGLONG                      ConsoleSessionForegroundProcessId;
  ULONGLONG                     TimeUpdateLock;
  ULONGLONG                     BaselineSystemTimeQpc;
  ULONGLONG                     BaselineInterruptTimeQpc;
  ULONGLONG                     QpcSystemTimeIncrement;
  ULONGLONG                     QpcInterruptTimeIncrement;
  UCHAR                         QpcSystemTimeIncrementShift;
  UCHAR                         QpcInterruptTimeIncrementShift;
  USHORT                        UnparkedProcessorCount;
  ULONG                         EnclaveFeatureMask[4];
  ULONG                         TelemetryCoverageRound;
  USHORT                        UserModeGlobalLogger[16];
  ULONG                         ImageFileExecutionOptions;
  ULONG                         LangGenerationCount;
  ULONGLONG                     Reserved4;
  ULONGLONG                     InterruptTimeBias;
  ULONGLONG                     QpcBias;
  ULONG                         ActiveProcessorCount;
  UCHAR                         ActiveGroupCount;
  UCHAR                         Reserved9;
  union {
    USHORT QpcData;
    struct {
      UCHAR QpcBypassEnabled;
      UCHAR QpcReserved;
    };
  };
  LARGE_INTEGER                 TimeZoneBiasEffectiveStart;
  LARGE_INTEGER                 TimeZoneBiasEffectiveEnd;
  XSTATE_CONFIGURATION          XState;
  KSYSTEM_TIME                  FeatureConfigurationChangeStamp;
  ULONG                         Spare;
  ULONG64                       UserPointerAuthMask;
  XSTATE_CONFIGURATION          XStateArm64;
  ULONG                         Reserved10[210];
} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;

成员

TickCountLowDeprecated

当前低 32 位计时周期计数。

TickCountMultiplier

刻度计数乘数。

InterruptTime

当前 64 位中断时间(以 100ns 为单位)。

SystemTime

当前 64 位系统时间(以 100ns 为单位)。

TimeZoneBias

当前 64 位时区偏差。

ImageNumberLow

主机系统的低图像幻数。

ImageNumberHigh

主机系统的高图像幻数。

NtSystemRoot[260]

unicode 中系统根目录的副本。 必须通过 RtlGetNtSystemRoot API 访问此字段,才能获得准确的结果。

MaxStackTraceDepth

启用跟踪时的最大堆栈跟踪深度。

CryptoExponent

加密指数值。

TimeZoneId

时区 ID。

LargePageMinimum

定义 ULONG 成员 LargePageMinimum

AitSamplingValue

此值控制 AIT 采样率。

AppCompatFlag

此值控制切换回处理。

RNGSeedVersion

当前内核根 RNG 状态种子版本。

GlobalValidationRunlevel

此值控制断言失败处理。

TimeZoneBiasStamp

定义 LONG 成员 TimeZoneBiasStamp

NtBuildNumber

未使用 C 或 F 修饰的共享集合生成号。 GetVersionEx 隐藏实数。

NtProductType

产品类型。 必须通过 RtlGetNtProductType API 访问此字段,才能获得准确的结果。

ProductTypeIsValid

定义 BOOLEAN 成员 ProductTypeIsValid

Reserved0[1]

保留供将来使用。

NativeProcessorArchitecture

定义 USHORT 成员 NativeProcessorArchitecture

NtMajorVersion

NT 主版本。 每个进程都会从其 PEB 中看到一个版本,但如果进程正在运行的系统版本视图已更改,则此字段用于正确标识版本。

NtMinorVersion

NT 次要版本。 每个进程都会从其 PEB 中看到一个版本,但如果进程正在运行的系统版本视图已更改,则此字段用于正确标识版本。

ProcessorFeatures[PROCESSOR_FEATURE_MAX]

处理器功能。

Reserved1

留待将来使用。

Reserved3

留待将来使用。

TimeSlip

调试器中的时间滑点。

AlternativeArchitecture

替代系统体系结构。 例如,x86 上的 NEC PC98xx。

BootId

启动序列,针对 OS 加载程序每次启动尝试递增。

SystemExpirationDate

如果系统是评估单元,则以下字段包含评估单元过期的日期和时间。 值为 0 表示没有过期时间。 非零值是系统过期的 UTC 绝对时间。

SuiteMask

套件支持。 必须通过 RtlGetSuiteMask API 访问此字段,才能获得准确的结果。

KdDebuggerEnabled

如果已连接/启用内核调试器,则为 TRUE。

MitigationPolicies

缓解策略。

NXSupportPolicy

定义 UCHAR 成员 NXSupportPolicy

SEHValidationPolicy

定义 UCHAR 成员 SEHValidationPolicy

CurDirDevicesSkippedForDlls

定义 UCHAR 成员 CurDirDevicesSkippedForDlls

Reserved

保留供将来使用。

CyclesPerYield

单个处理器产量的测量持续时间(以周期为单位)。 锁包使用它来确定在阻止之前等待状态更改的旋转次数。

ActiveConsoleId

当前控制台会话 ID。在非 TS 系统上始终为零。 必须通过 RtlGetActiveConsoleId API 访问此字段,才能获得准确的结果。

DismountCount

强制卸除会导致句柄无效。 客户端可以使用这些序列号来查看是否需要探测句柄,而不是始终探测句柄。

ComPlusPackage

此字段指示系统上 64 位 COM+ 包的状态。 它指示中间语言 (IL) COM+ 映像是否需要使用 64 位 COM+ 运行时或 32 位 COM+ 运行时。

LastSystemRITEventTickCount

所有终端会话中系统范围的上次用户输入的计时周期计数。 对于 MP 性能,它不会一直更新 (例如,每个会话) 一分钟一次。 它用于空闲检测。

NumberOfPhysicalPages

系统中的物理页数。 这可以动态更改,因为可以在正在运行的系统中添加或删除物理内存。

SafeBootMode

如此 如果系统是在安全启动模式下启动的。

VirtualizationFlags

虚拟化标志。

ArchStartedInEl2

使此位域与 arc.w 中的位域保持同步。

QcSlIsSupported

使此位域与 arc.w 中的位域保持同步。

Reserved12[2]

保留供将来使用。

DUMMYUNIONNAME2

这是一个打包位域,其中包含有关系统状态的各种标志。 必须使用互锁操作来操作它们。 必须通过 RtlIsMultiSessionSku API 访问 DbgMultiSessionSku,才能获得准确的结果。

DUMMYUNIONNAME2.SharedDataFlags

定义 ULONG 成员 SharedDataFlags

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2

定义 DUMMYSTRUCTNAME2 结构。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgErrorPortPresent

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgElevationEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgVirtEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgInstallerDetectEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgLkgEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgDynProcessorEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgConsoleBrokerEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgSecureBootEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgMultiSessionSku

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgMultiUsersInSessionSku

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.DbgStateSeparationEnabled

仅适用于调试器。 请勿使用。 请改用位定义。

DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.SpareBits

仅适用于调试器。 请勿使用。 请改用位定义。

DataFlagsPad[1]

定义 ULONG 成员 DataFlagsPad

TestRetInstruction

根据处理器的不同,快速系统调用的代码会有所不同。 此字段仅在 32 位系统上使用。

QpcFrequency

定义 LONGLONG 成员 QpcFrequency

SystemCall

在 AMD64 上,如果系统使用系统服务调用机制的已更改视图运行,则此值将初始化为非零值。

Reserved2

留待将来使用。

FullNumberOfPhysicalPages

留待将来使用。

SystemCallPad[1]

留待将来使用。

DUMMYUNIONNAME3

64 位计时周期计数。

DUMMYUNIONNAME3.TickCount

定义 KSYSTEM_TIME 成员 TickCount

DUMMYUNIONNAME3.TickCountQuad

定义 ULONG64 成员 TickCountQuad

DUMMYUNIONNAME3.DUMMYSTRUCTNAME

定义 DUMMYSTRUCTNAME

DUMMYUNIONNAME3.DUMMYSTRUCTNAME.ReservedTickCountOverlay[3]

定义 ULONG 成员 ReservedTickCountOverlay

DUMMYUNIONNAME3.DUMMYSTRUCTNAME.TickCountPad[1]

定义 ULONG 成员 TickCountPad

Cookie

用于在系统范围内编码指针的 Cookie。

CookiePad[1]

保留供将来使用。

ConsoleSessionForegroundProcessId

焦点位于当前活动控制台会话 ID 中的进程的客户端 ID。必须通过 RtlGetConsoleSessionForegroundProcessId API 访问此字段,才能获得准确的结果。

TimeUpdateLock

(内部) 时间更新锁的占位符。 此数据用于实现精确的时间服务。 它在 64 字节缓存行边界上对齐,并按典型访问的顺序排列。

BaselineSystemTimeQpc

用于建立当前系统时间的性能计数器值。

BaselineInterruptTimeQpc

用于计算上次中断时间的性能计数器值。

QpcSystemTimeIncrement

此值 (单个性能计数表示的缩放系统时间秒数可能会有所不同,以实现时间同步) 。

QpcInterruptTimeIncrement

在系统启动) 后,此值 (单个性能计数表示的缩放中断时间秒数是恒定的。

QpcSystemTimeIncrementShift

应用于性能计数器系统时间增量的缩放移位计数。

QpcInterruptTimeIncrementShift

应用于性能计数器中断时间增量的缩放移位计数。

UnparkedProcessorCount

未停止的处理器的计数。

EnclaveFeatureMask[4]

此系统支持的 enclave 功能的位掩码。 必须通过 RtlIsEnclareFeaturePresent API 访问此字段,才能获得准确的结果。

TelemetryCoverageRound

基于遥测的覆盖范围的当前覆盖轮次。

UserModeGlobalLogger[16]

以下字段用于 ETW 用户模式全局日志记录 (UMGL) 。

ImageFileExecutionOptions

除了原始 HKLM 之外,还可以启用使用 HKCU 中的图像文件执行选项的设置。

LangGenerationCount

生成包含系统语言信息的内核结构。

Reserved4

保留供将来使用。

InterruptTimeBias

当前 64 位中断时间偏差(以 100ns 为单位)。

QpcBias

当前 64 位性能计数器偏差,在应用移位前以性能计数器单位为单位。

ActiveProcessorCount

活动处理器数。

ActiveGroupCount

活动组数。

Reserved9

保留供将来使用。

QpcData

定义 USHORT 成员 QpcData。

QpcBypassEnabled

一个布尔值,指示性能计数器查询是否可以 (绕过系统调用) 直接读取计数器。

QpcReserved

保留供将来使用。

TimeZoneBiasEffectiveStart

定义 LARGE_INTEGER 成员 TimeZoneBiasEffectiveStart

TimeZoneBiasEffectiveEnd

定义 LARGE_INTEGER 成员 TimeZoneBiasEffectiveEnd

XState

扩展的处理器状态配置。

FeatureConfigurationChangeStamp

定义 KSYSTEM_TIME 成员 FeatureConfigurationChangeStamp

Spare

定义 ULONG 成员 备用

UserPointerAuthMask

定义 ULONG64 成员 UserPointerAuthMask

XStateArm64

Reserved10[210]

要求

要求
Header ntddk.h (包括 Ntddk.h)