Ошибка 0x8007000e в LookupAccountSid () - PullRequest
0 голосов
/ 19 января 2012

У меня есть довольно старое приложение VS6, которое генерирует ошибку 0x8007000E (ERROR_OUTOFMEMORY "Недостаточно памяти для завершения этой операции.") При вызове LookupAccountSid.

Неудачный вызов простопытаясь определить, насколько большими должны быть буферы для использования во втором вызове LookupAccountSid:

std::string GetNameFromSID(PSID pSid)
{
    if (NULL == pSid)
        return "";

    DWORD        _dwName;   //Size of the name in TCHARs
    DWORD        _dwDomain; //Size of the domain in TCHARs
    SID_NAME_USE _use;      //Usage type of the name (user,group etc).
    BOOL         _b;

    //Determine the buffer sizes we require
    SetLastError(0);
    _b = LookupAccountSid( NULL, pSid, NULL, &_dwName, NULL, &_dwDomain, &_use );
    if ( !_b ) {
        DWORD _dw = GetLastError();
        if ( ERROR_NONE_MAPPED == _dw ) {
            //There is no name for this SID
            return "";
        } else if ( ERROR_INSUFFICIENT_BUFFER == _dw ) {
            //This is expected.
        } else if ( S_OK != _dw ) {
            //This is where we see ERROR_OUTOFMEMORY
            return "";
        }
    }
    //Do some other stuff here...
}

То, что я ожидал, было ошибкой 0x8007007A: ERROR_INSUFFICIENT_BUFFER "Область данных, переданная системному вызову, слишком мала."Что бы указывало на то, что мне (неудивительно) нужно было выделять большие буферы.

В системе совсем не хватает памяти, поэтому кто-нибудь может предложить причину?

1 Ответ

2 голосов
/ 19 января 2012

Проверьте, работает ли он, если правильно инициализировать _dwName и _dwDomain до 0.

В стеке может быть какой-то случайный мусор, но в соответствии с http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166(v=vs.85).aspx они должны быть фактически равны 0, чтобы получить требуемый размер буфера

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