首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >签名整数到未签名整数& DWORD转换

签名整数到未签名整数& DWORD转换
EN

Stack Overflow用户
提问于 2014-12-17 21:39:31
回答 2查看 618关注 0票数 2

我有一个Win32 API调用,它返回一个带符号的32位整数值(-2147022987)。

在Windows (在程序员视图中,Alt-3)模式中,如果输入-2147022987的值,然后将模式切换到DecDword,则设置为Dword,然后切换到1909年的Word模式。我是否正确地理解1909年是包含在Word中的两个DWord之一的表示?这个值是低阶Dword还是高阶Dword

如何以编程方式在C#中进行此转换,以便将值与下面定义的枚举类型匹配?

代码语言:javascript
复制
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
} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 21:50:33

您可以使用& (按位和)运算符如下:

代码语言:javascript
复制
int i = -2147022987;
LogonError err = (LogonError)(i & 0xffff);  // 1909
票数 1
EN

Stack Overflow用户

发布于 2014-12-17 21:54:57

假设您声明了外部API调用,如下所示:

代码语言:javascript
复制
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

您可以通过以下函数获得错误代码:

代码语言:javascript
复制
int errorCode = Marshal.GetLastWin32Error();

您可能需要将枚举更改为int,这仅在使用SetLastError = true时才有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27535292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档