You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8调用NtSetInformationThread设置ThreadBasePriority返回STATUS_DATATYPE_MISALIGNMENT

.NET 8在Windows 10 IoT 2021中设置软实时线程的问题解决

错误码0x80000002对应STATUS_INFO_LENGTH_MISMATCH,核心问题是你的NtSetInformationThread调用参数传递错误:

  • 第三个参数ThreadInformation要求传入指向优先级值的指针,你直接传了数值31,导致系统无法正确读取数据。
  • CULong类型在.NET中的适配性不佳,建议改用uint作为ThreadInformationLength的类型。

修正后的代码如下:

using System;
using System.Runtime.InteropServices;

class RealTimeThreadHelper
{
    [DllImport("Ntdll.dll")]
    private static extern uint NtSetInformationThread(IntPtr hThread, int ThreadInformationClass, IntPtr ThreadInformation, uint ThreadInformationLength);

    [DllImport("Kernel32.dll")]
    private static extern IntPtr GetCurrentThread();

    public static void SetRealTimePriority()
    {
        // 设置软实时优先级(范围16-31,示例用31)
        int targetPriority = 31;
        // 分配非托管内存存储优先级值
        IntPtr priorityPtr = Marshal.AllocHGlobal(sizeof(int));
        Marshal.WriteInt32(priorityPtr, targetPriority);

        try
        {
            // ThreadInformationClass=3 对应 ThreadBasePriority
            uint result = NtSetInformationThread(GetCurrentThread(), 3, priorityPtr, (uint)sizeof(int));
            Console.WriteLine($"调用结果: 0x{result.ToString("X")}");
        }
        finally
        {
            // 必须释放非托管内存,避免泄漏
            Marshal.FreeHGlobal(priorityPtr);
        }
    }
}

额外注意事项:

  • 即使你推测不是权限问题,仍需确认进程已获取并启用SeIncreaseBasePriorityPrivilege权限,否则设置高优先级会失败。
  • Windows 10 IoT 2021对实时线程的支持依赖硬件和系统配置,需确保设备满足实时调度的硬件要求。

内容的提问来源于stack exchange,提问作者tom1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:12:22