.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
相关产品推荐
相关产品推荐

