XP上的Win32调用引发异常

exception thrown from a Win32 call on XP

本文关键字:异常 调用 上的 Win32 XP      更新时间:2023-10-16

全部,

我有一台XP SP3机器,只有在家里运行、无线连接但没有域控制器或任何东西时,它才会使用我的软件崩溃。

我得到以下转储

Call stack below ---
 # ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
00 0337ddc8 77e9f942 000006ba 00000001 00000000 kernel32!RaiseException+0x52
01 0337dde0 77e9fc30 000006ba 0337e1f4 0337e1d8 RPCRT4!RpcRaiseException+0x34
02 0337ddf0 77ef560b 0337de3c 0000004c 00217d40 RPCRT4!RpcRaiseException+0x322
03 0337e1d8 77de1ee8 77ddf4b0 77de14e4 0337e1f4 RPCRT4!NdrClientCall2+0x13b
04 0337e1ec 77de1e6a 00209878 0337e260 00000800 ADVAPI32!LsaOpenPolicy+0xc1
05 0337e240 77de5be7 0337e28c 0337e260 00000800 ADVAPI32!LsaOpenPolicy+0x43
06 0337e2a8 77de5b7a 015246d0 0337e930 0337e3f0 ADVAPI32!LookupAccountNameW+0x8e
07 0337e2d0 10006903 015246d0 0337e930 0337e3f0 ADVAPI32!LookupAccountNameW+0x21

我怀疑的代码是

char aTmp[MAX_PATH];
DWORD dwSize=sizeof(aTmp);
SID_NAME_USE aTmp2;
unsigned short usDmn[MAX_PATH];
DWORD dwDmn=sizeof(usDmn);
wchar_t* pDomain;
if (!rDomain.empty())
    pDomain=(wchar_t*)rDomain.c_str();
else
    pDomain=NULL;
if (!LookupAccountNameW(pDomain, (wchar_t*)rUser.c_str(), (PSID)aTmp,
                        &dwSize,
                        (LPWSTR)usDmn,
                        &dwDmn,
                        &aTmp2))
    //Error
    return aInfo;

用户和域是传入的字符串变量…

有什么明显我遗漏的吗?抛出了什么异常?enter code here

您投射的所有位置都可能是一个错误。你还没有向我们展示所有的定义,但你选角的事实本身就表明出了问题。您似乎正在将ANSI参数传递给Unicode函数。

为什么使用unsigned短字符而不是宽字符?

此外,您的SID看起来完全错误。

rUser的类型是string,而不是wstring,假设您需要将(wchar_t*)强制转换添加到对.c_str()的调用中,以使编译器不会抱怨。

类似地,rDomain也可以是8比特string类型而不是16比特wstring类型。