我有一个相当老的VS6应用程序,该应用程序在对LookupAccountSid的调用中生成错误0x8007000E(ERROR_OUTOFMEMORY“没有足够的存储空间来完成此操作。”)。
失败的调用只是试图确定在第二次对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“传递给系统调用的数据区域太小。”这将表明我(毫不奇怪)需要分配更大的缓冲区。
系统根本不是内存不足,所以有人可以提出原因吗?
最佳答案
查看是否正确地将_dwName
和_dwDomain
初始化为0,是否可行。
堆栈上可能有一些随机垃圾,但是根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166(v=vs.85).aspx,必须将它们实际设置为0才能接收所需的缓冲区大小
关于c++ - LookupAccountSid()中的错误0x8007000e,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8925505/