У меня есть довольно старое приложение 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 "Область данных, переданная системному вызову, слишком мала."Что бы указывало на то, что мне (неудивительно) нужно было выделять большие буферы.
В системе совсем не хватает памяти, поэтому кто-нибудь может предложить причину?