【发布时间】:2021-04-02 22:04:19
【问题描述】:
我正在编写一种方法来找出与给定 LUID 关联的权限名称。以下是相同的代码:
private string PrivilegeName(LUID luid)
{
StringBuilder sbuilder = new StringBuilder();
int nameLength = 0;
IntPtr ptrToLuid = Marshal.AllocHGlobal(Marshal.SizeOf(luid));
Marshal.StructureToPtr(luid, ptrToLuid, true);
if(!InvokeAPI.LookupPrivilegeName(null, ptrToLuid, null, ref nameLength))
{
Console.WriteLine("Unable to lookup value.");
Console.WriteLine(Marshal.GetLastWin32Error());
Marshal.FreeHGlobal(ptrToLuid);
return null;
}
sbuilder.EnsureCapacity(nameLength + 1);
InvokeAPI.LookupPrivilegeName(null, ptrToLuid, sbuilder, ref nameLength);
Marshal.FreeHGlobal(ptrToLuid);
return sbuilder.ToString();
}
作为参考,我的 LUID 结构如下所示
[StructLayout(LayoutKind.Sequential)]
public struct LUID
{
public UInt32 LowPart;
public Int32 HighPart;
}
在执行此代码时,我得到一个 ERROR_INSUFFICIENT_BUFFER (122) 而不是与 LUID 关联的权限名称。
有人可以帮我解决上述代码中缺少的阻止我检索权限名称的问题吗?
【问题讨论】:
-
您应该包含
LookupPrivilegeName的PInvoke ...并且您有两个LookupPrivilegeName是否正常?WinAPI.LookupPrivilegeName和InvokeAPI.LookupPrivilegeName