0

我有几个从程序中Kernel32.dll调用的函数。C#我导入的功能如下:

[System.Runtime.InteropServices.DllImport("Kernel32.dll", EntryPoint = "GetSystemTime", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
private static extern void GetSystemTime(ref SYSTEMTIME lpSystemTime);

[System.Runtime.InteropServices.DllImport("Kernel32.dll", EntryPoint = "SetSystemTime", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
private static extern UInt32 SetSystemTime(ref SYSTEMTIME lpSystemTime);

SYSTEMTIME这些方法接受的结构在哪里。

的文档SetSystemTime说,如果函数失败并调用GetLastError以获取有关失败的扩展信息,它将返回 0。所以我以与上述函数相同的方式GetLastError从文件中导入。Kernel32.dll现在,当我将失败模拟为:

if (SetSystemTime(ref st) == 0) {
      Console.WriteLine(GetLastError() + " Error occurred: SetSystemTime returned zero.");
}

GetLastError()打印一个代码,它1314是 for A required privilege not held by the client。我也更改了Local security policy将用户添加到其中Replace a process level tokenUser rights assignment但我仍然得到相同的代码。我在做什么是正确的还是我错过了什么?

4

1 回答 1

-3

它看起来像由 UAC 引起的“用户权限分配”。

尝试这个:

1]使用本地安全策略

有时它是由于一些管理员帐户冲突而发生的。在这种情况下,您需要打开本地安全策略窗口。您可以在任务栏搜索框或 Cortana 中搜索相同的内容,也可以按Win + R、键入secpol.msc并按 Enter 按钮。

导航到Local Policies > Security Options。找到User Account Control: Run all administrators in Admin Approval Mode并将其设置为Disable.

  • 或者

2]禁用UAC

UAC 或用户帐户控制可防止程序对系统进行任何更改。但是,有时它也会产生问题。因此,您可以暂时尝试禁用 UAC 并检查它是否有效。要在 Windows 中禁用用户帐户控制,请Account Control Settings在任务栏搜索框中搜索用户。您应该将 UAC 设置为Never Notify.

我希望它对你有帮助。

于 2019-11-21T13:30:17.013 回答