исключение, выброшенное из вызова Win32 на XP - PullRequest
0 голосов
/ 21 апреля 2011

All

У меня машина 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

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Везде, где вы разыгрываете, вероятно, ошибка. Вы не показали нам все определения, но сам факт, что вы читаете, предполагает, что что-то не так. Похоже, вы передаете параметры ANSI в функцию Unicode.

Почему вы используете неподписанные короткий вместо широкого символа?

Также ваш SID выглядит неправильно.

0 голосов
/ 21 апреля 2011

Тип rUser - string, а не wstring, при условии, что вам нужно добавить приведение (wchar_t*) к вызову .c_str(), чтобы компилятор не жаловался.

Аналогично, rDomain также может относиться к 8-разрядному типу string вместо 16-разрядного типа wstring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...