我有一个Win32 API调用,它返回一个带符号的32位整数值(-2147022987)。
在Windows (在程序员视图中,Alt-3)模式中,如果输入-2147022987的值,然后将模式切换到Dec和Dword,则设置为Dword,然后切换到1909年的Word模式。我是否正确地理解1909年是包含在Word中的两个DWord之一的表示?这个值是低阶Dword还是高阶Dword?
如何以编程方式在C#中进行此转换,以便将值与下面定义的枚举类型匹配?
public enum LogonError : ushort
{
LogonSuccessful = 0,
PasswordMustChange = 1907,
NoSuchUser = 1317,
LogonFailure = 1326,
AccountRestriction = 1327,
AccountDisabled = 1331,
InvalidLogonHours = 1328,
NoLogonServers = 1311,
InvalidWorkstation = 1329,
AccountLockedOut = 1909,
AccountExpired = 1793,
PasswordExpired = 1330
} 发布于 2014-12-17 21:50:33
您可以使用& (按位和)运算符如下:
int i = -2147022987;
LogonError err = (LogonError)(i & 0xffff); // 1909发布于 2014-12-17 21:54:57
假设您声明了外部API调用,如下所示:
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);您可以通过以下函数获得错误代码:
int errorCode = Marshal.GetLastWin32Error();您可能需要将枚举更改为int,这仅在使用SetLastError = true时才有效。
https://stackoverflow.com/questions/27535292
复制相似问题